GithubHelp home page GithubHelp logo

e11world / locomotive-boilerplate Goto Github PK

View Code? Open in Web Editor NEW

This project forked from locomotivemtl/locomotive-boilerplate

0.0 0.0 0.0 3.31 MB

🚂 Front-end boilerplate for projects by Locomotive.

License: MIT License

HTML 16.17% JavaScript 32.69% SCSS 51.13%

locomotive-boilerplate's Introduction

Locomotive Boilerplate

Front-end boilerplate for projects by Locomotive.

Requirements

Name Version
Node >= 14.17
NPM >= 6.0

You can use nvm to install the node version in .nvmrc.

Installation

npm i

Usage

# start it
npm start

Configuration

There are a few occurrences that should be renamed for your project:

  • package.json:
    • Package name: @locomotivemtl/boilerplate
    • Package title: Locomotive Boilerplate
  • package-lock.json:
    • Package name: @locomotivemtl/boilerplate
  • loconfig.json:
    • Browser Sync proxy URL: locomotive-boilerplate.test Remove paths.url to use Browser Sync's built-in server which uses paths.dest.
    • View path: ./views/boilerplate/template
  • environment.js:
    • Application name: Boilerplate
  • site.webmanifest:
    • Manifest name: Locomotive Boilerplate
    • Manifest short name: Boilerplate
  • HTML files:
    • Page title: Locomotive Boilerplate

Build

Tasks

# watch
npm start

# build
npm run build

Styles

Sass is our CSS preprocessor. Autoprefixer is also included.

Architecture

ITCSS is our CSS architecture.

  • settings: Global variables, site-wide settings, config switches, etc.
  • tools: Site-wide mixins and functions.
  • generic: Low-specificity, far-reaching rulesets (e.g. resets).
  • elements: Unclassed HTML elements (e.g. a {}, blockquote {}, address {}).
  • objects: Objects, abstractions, and design patterns (e.g. .o-layout {}).
  • components: Discrete, complete chunks of UI (e.g. .c-carousel {}).
  • utilities: High-specificity, very explicit selectors. Overrides and helper classes (e.g. .u-hidden {})

source

Naming

We use a simplified BEM syntax.

.block .block_element -modifier

Namespaces

We namespace our classes for more transparency.

  • o-: Object that it may be used in any number of unrelated contexts to the one you can currently see it in. Making modifications to these types of class could potentially have knock-on effects in a lot of other unrelated places.
  • c-: Component is a concrete, implementation-specific piece of UI. All of the changes you make to its styles should be detectable in the context you’re currently looking at. Modifying these styles should be safe and have no side effects.
  • u-: Utility has a very specific role (often providing only one declaration) and should not be bound onto or changed. It can be reused and is not tied to any specific piece of UI.
  • s-: Scope creates a new styling context. Similar to a Theme, but not necessarily cosmetic, these should be used sparingly—they can be open to abuse and lead to poor CSS if not used wisely.
  • is-, has-: Is currently styled a certain way because of a state or condition. It tells us that the DOM currently has a temporary, optional, or short-lived style applied to it due to a certain state being invoked.

source

Example

<div class="c-block -large">
    <div class="c-block_layout o-layout">
        <div class="o-layout_item u-1/2@from-medium">
            <div class="c-block_heading o-h -medium">Heading</div>
        </div>
        <div class="o-layout_item u-1/2@from-medium">
           <a class="c-block_button o-button -outline" href="#">Button</a>
        </div>
    </div>
</div>
.c-block {
    &.-large {
        padding: rem(60px);
    }
}

.c-block_heading {
    @media (max-width: $to-medium) {
        .c-block.-large & {
            margin-bottom: rem(40px);
        } 
    }
}

Scripts

modularJS is a small framework we use on top of ES modules. It compiles with Rollup and Babel.

Why

  • Automatically init visible modules.
  • Easily call other modules methods.
  • Quickly set scoped events with delegation.
  • Simply select DOM elements scoped in their module.

source

Example

<div data-module-example>
    <div data-example="main">
        <h2>Example</h2>
    </div>
    <button data-example="load">More</button>
</div>
import { module } from 'modujs';

export default class extends module {
    constructor(m) {
        super(m);

        this.events = {
            click: {
                load: 'loadMore'
            }
        }
    }

    loadMore() {
        this.$('main')[0].classList.add('is-loading');
    }
}

Learn more

Page transitions

modularLoad is used for page transitions and lazy loading.

Example

<nav>
    <a href="/">Home</a>
    <a href="/page" data-load="transitionName">Page</a>
</nav>
<div data-load-container>
    <img data-load-src="assets/images/hello.jpg">
</div>
import modularLoad from 'modularload';

this.load = new modularLoad({
    enterDelay: 300,
    transitions: {
        transitionName: {
            enterDelay: 450
        }
    }
});

Learn more

Scroll detection

Locomotive Scroll is used for elements in viewport detection and smooth scrolling with parallax.

Example

<div data-module-scroll>
    <div data-scroll>Trigger</div>
    <div data-scroll data-scroll-speed="1">Parallax</div>
</div>
import LocomotiveScroll from 'locomotive-scroll';

this.scroll = new LocomotiveScroll({
    el: this.el,
    smooth: true
});

Learn more

locomotive-boilerplate's People

Contributors

beneroch avatar dependabot[bot] avatar devenini avatar dominiclord avatar hum-n avatar jdacosta avatar jerek0 avatar joelalphonso avatar mcaskill avatar mducharme avatar mouseeatscat avatar plcossette avatar quentinhocde avatar stephenbe avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.