CSS/LESS Coding Convention
Improvements? Suggestions? email dna@hola.org
General CSS
Consistent and Minimal
Most important rules:
Be consistent.
Be minimal.
Use tools.
Read these sections carefully.
React
Scope
Write CSS per component.
let Btn = props=><a className="main_links" href={props.href}> {props.children}</a>; let Contact_link = props=><a className="main_links" href={props.href}> {props.children}</a>;
let Btn = props=><a className="btn" href={props.href}>{props.children}</a>; let Contact_link = props=><Btn {...props}/>;
.btn { color: @dark_blue; }
Keep the same syling wherever the component is used: don't nest component CSS inside a different component.
.main_page { .btn { color: @white; } }
.main_page { color: @white; } .btn { color: @dark_blue; .btn-main { color: @white; } }
Flat
Make all component CSS global. A component should look the same in on any page in and inside any other component.
.main_page { .btn { color: @dark_blue; } }
.btn { color: @dark_blue; }
Nest component sub-classes inside the component less to group the definitions together.
.btn { padding: 5px; } .btn-text { color: @dark_blue; }
.btn { padding: 5px; .btn-text { color: @dark_blue; } }
Inside a component's class keep it flat - only one level of nesting.
.btn { padding: 5px; .btn-left { float: left; .btn-text { color: @dark_blue; } } }
.btn { padding: 5px; .btn-left { float: left; } .btn-text { color: @dark_blue; } }
Naming
Use Unix notation for naming
.startButton { color: @white; }
.start-button { color: @white; }
.start_button { color: @white; }
Use the same name as the react component
let Btn = props=><a className="button_round" href={props.href}> {props.children}</a>;
let Btn = props=><a className="btn" href={props.href}> {props.children}</a>;
Use parent class name to prefix inner class names to pervent collisions.
.btn { .text { color: @white; } }
.btn { .btn-text { color: @white; } }
Use dash "-" as a delimiter between prefixes.
.btn { .btn_text { color: @white; } }
.btn { .btn-text { color: @white; } }
Use "sc_" as a prefix for sections.
let Many_ips = props=><Section className="many_ips"> <h2>title</h2></Section>;
let Many_ips = props=><Section className="sc_many_ips"> <h2>title</h2></Section>;
Do not use "ad-" prefix for class names. Such items can be removed by ad blockers. Check that your code works with the ad blockers enabled.
.ad-text { color: @white; }
.item-text { color: @white; }
HTML
TBD