-
-
Notifications
You must be signed in to change notification settings - Fork 23
Coding Standards
Mecha mostly contains CSS, HTML, JavaScript, JSON, PHP, and YAML files.
Always use HEX color code to declare a solid color, and RGBA color code to declare a color with opacity. Always use lower-case letter, and use the shortest color code version:
.button {
background-color: #b4d455;
border-color: rgba(255, 255, 0, .5);
color: #def;
}
Sort declarations alphabetically, unless you want to override the previous declaration:
.button {
border: 1px solid #000;
border-top-width: 0;
margin-left: 1px;
margin-right: 1px;
}
Always remove zero prefix in fractions:
.button {
margin: 1.25em;
padding: .25em .5em;
}
Use two <Space>
s to represent single indent:
@media print {
.hidden-print {
display: none;
}
}
Add a <Space>
after colon:
@media (max-width: 1024px) {
body {
font-size: 80%;
}
}
Pseudo classes don’t have to be in alphabetical order. In common, they will be ordered like this:
.button {}
.button:focus {}
.button:hover {}
.button:active {}
But you can also order them like this to make sure that focus state will remain as-is when hovered:
.button {}
.button:hover {}
.button:focus {}
.button:active {}
Be sure to put disabled states at the end, so it will be easier to override other states:
.input {}
.input:hover {}
.input:focus {}
.input:active {}
.input:valid {}
.input:invalid {}
.input:read-only {}
.input:disabled {}
Add a line-break after comma, sort selectors alphabetically:
h1,
h2,
h3,
h4,
h5,
h6 {}
Use single quote for attribute selector value, and for non-empty string value. Use double quote for empty string value:
[rel='nofollow']::before {
background-image: url('./image.jpg');
content: "";
}
Ensure semi-colon at the end of declaration:
body {
margin-bottom: 1px;
margin-top: 1px;
}
Remove unit in zero values except 0%
and 0deg
:
body {
margin: 0 0 1px 1px;
margin-top: 0%;
}
Use lower-case letter, sort attributes alphabetically:
<input class="input" id="input:0" type="text">
Always use double quote, even on empty value:
<img alt="" src="./image.jpg">
Always remove values:
<button disabled type="submit">
Use two <Space>
s to represent single indent:
<ul>
<li></li>
<li></li>
</ul>
Do not add /
before >
in void elements:
<img alt="" src="/photo.jpg">
<hr>
Use Yoda notation in equal/not-equal comparison to quickly detect typos:
if (-1 !== pairs.indexOf(pair)) {}
Use four <Space>
s to represent single indent:
function foo(bar = 'baz') {
return bar ?? 'qux';
}
Always add a <Space>
around operators:
let value = a + b * (1 / (c - 2));
let value = a + 'asdf' + b;
value += 'asdf';
value += 'asdf';
Use single quote for non-empty string or for string that contains "
character, so you don’t have to escape. Use double quote for empty string or for string that contains '
character, so you don’t have to escape:
'asdf'
"asdf's"
""
'"asdf"'
'"asdf\'s"'
"'asdf'"
"'asdf\"s'"
Join multiple variables, unless its indentation looks ugly such as when used with const
, or when using single name variable. Sort them aplhabetically where possible:
let bar = 1,
baz = 2,
x, y, z;
const bar = 1;
const baz = 2;
Order constants, methods and properties alphabetically, including the visibility state:
class Foo extends A, B, C {
private function _internal() {}
public function get() {}
public function let() {}
public function set() {}
public function __construct() {}
public static function __callStatic() {}
}
Use Yoda notation in equal/not-equal comparison to quickly detect typos:
if (false !== strpos($foo, $bar)) {}
- Use
is_dir
oris_file
instead offile_exists
. - If you just want to check whether a path does exist, use
stream_resolve_include_path
instead offile_exists
. - Use
strtr
instead ofstr_replace
. - If you know that a path exists, use
stream_resolve_include_path
to normalize the path instead ofrealpath
. - If you just want to escape/un-escape HTML, use
htmlspecialchars
andhtmlspecialchars_decode
instead ofhtmlentities
.
Use four <Space>
s to represent single indent:
function foo(string $bar = 'baz') {
return $bar ?? 'qux';
}
Always add a <Space>
around operators:
$value = $a + $b * (1 / ($c - 2));
$value = $a . 'asdf' . $b;
$value .= 'asdf';
$value .= 'asdf';
Use single quote for non-empty string or for string that contains "
character, so you don’t have to escape. Use double quote for empty string or for string that contains '
character, so you don’t have to escape:
'asdf'
"asdf's"
""
'"asdf"'
'"asdf\'s"'
"'asdf'"
"'asdf\"s'"