「Google HTML/CSS Style Guide」はGoogleが出している書式やスタイルのルール。
全般的なスタイル
プロトコル
埋め込みリソースからプロコトル(http、https)を省く。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- 推奨しません --> <script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script> <!-- 推奨 --> <script src="//www.google.com/js/gweb/analytics/autotrack.js"></script> /* 推奨しません */ .example { background: url(http://www.google.com/images/example); } /* 推奨 */ .example { background: url(//www.google.com/images/example); } |
一般的な書式
インデント
半角スペース2つ。
1 2 3 4 5 6 7 8 |
<ul> <li>Fantastic <li>Great </ul> .example { color: blue; } |
大文字と小文字
全てのコードは小文字で記述。
1 2 3 4 5 |
<!-- 推奨しません --> <A HREF="/">Home</A> <!-- 推奨 --> <img src="google.png" alt="Google"> |
末尾のスペース
末尾のスペースは消す。
1 2 3 4 5 |
<!-- 推奨しません --> <p>What?_ <!-- 推奨 --> <p>Yes please. |
基本のメタルール
エンコーディング
UTF-8(BOM無し)を使う。
スタイルシートにエンコーディングの明記は必要無し。
1 |
<meta charset="utf-8"> |
コメント
必要に応じてコードの説明を記述する。全部に書く必要は無し。
TODOコメント
アクション項目には「TODO」コメントを書く。
「TODO(contact)」という形で、括弧内に(ユーザーネームやメーリングリスト)を、
「TODO:action item」という形で、コロンの後にaction itemを書く。
「TODO」は使っていなかったから良く知らなかったけど、ようは「内容や担当者を書く」という事かと。
1 2 3 4 5 6 7 8 |
{# TODO(john.doe): revisit centering #} <center>Test</center> <!-- TODO: remove optional tags --> <ul> <li>Apples</li> <li>Oranges</li> </ul> |
HTMLスタイルルール
ドキュメントタイプ
HTML5を使うこと。XHTMLは使用しない。
void要素は閉じないように。すなわち、<br />ではなく<br>を使う。
1 |
<!DOCTYPE html> |
正しいHTML
正しいHTMLを使う。「W3C HTML validator」などのツールでテストする。
1 2 3 4 5 6 7 8 9 |
<!-- 推奨しません --> <title>Test</title> <article>This is only a test. <!-- 推奨 --> <!DOCTYPE html> <meta charset="utf-8"> <title>Test</title> <article>This is only a test.</article> |
セマンティックに書く
目的に応じたHTMLを使用する。header要素はheaderに、p要素は段落に、a要素はアンカーリンク。
1 2 3 4 |
<!-- 推奨しません --> <div onclick="goToRecommendations();">All recommendations</div> <!-- 推奨 --> <a href="recommendations/">All recommendations</a> |
メディアの代替
画像、動画、canvasを使ったアニメーションをいったマルチメディアには、別のアクセス方法を確保する。
画像にはalt、動画やオーディオにはキャプション・・・など。意味を持たない画像については、代替テキストは記述せずにalt=””とする。
1 2 3 4 5 |
<!-- 推奨しません --> <img src="spreadsheet.png"> <!-- 推奨 --> <img src="spreadsheet.png" alt="Spreadsheet screenshot."> |
構造の分離
HTML(構造)、CSS(デザイン)、Script(振る舞い=動き?)は分離させる。
=ドキュメントやテンプレートにはHTMLだけを書く。
CSSやScriptの外部リンクはなるべく少なくする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!-- 推奨しません --> <!DOCTYPE html> <title>HTML sucks</title> <link rel="stylesheet" href="base.css" media="screen"> <link rel="stylesheet" href="grid.css" media="screen"> <link rel="stylesheet" href="print.css" media="print"> <h1 style="font-size: 1em;">HTML sucks</h1> <p>I’ve read about this on a few sites but now I’m sure: <u>HTML is stupid!!1</u> <center>I can’t believe there’s no way to control the styling of my website without doing everything all over again!</center> <!-- 推奨 --> <!DOCTYPE html> <title>My first CSS-only redesign</title> <link rel="stylesheet" href="default.css"> <h1>My first CSS-only redesign</h1> <p>I’ve read about this on a few sites but today I’m actually doing it: separating concerns and avoiding anything in the HTML of my website that is presentational. <p>It’s awesome! |
実態参照
不要な実体参照(—, ”, or ☺)は使用しない。
(チーム間でも同じエンコーディング(UTF-8)を使っていれば使わない)
HTMLで特別な意味を持つ”<"や"&"を使用する分には問題ない。
1 2 3 4 5 |
<!-- 推奨しません --> The currency symbol for the Euro is “&eur;”. <!-- 推奨 --> The currency symbol for the Euro is “€”. |
タグの省略
省略できるタグ(html、body、p、tdなど)を省略する。
どのタグが省略できるかはここから確認できる。
※ただしタグを省略しないことがすでに認知されすぎているのでオプション。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!-- 推奨しません --> <!DOCTYPE html> <html> <head> <title>Spending money, spending bytes</title> </head> <body> <p>Sic.</p> </body> </html> <!-- 推奨 --> <!DOCTYPE html> <title>Saving money, saving bytes</title> <p>Qed. |
Type属性
stylesheetとscriptのtype属性は省略する。HTML5ではデフォルトの言語として解釈される。
1 2 3 4 5 6 7 8 9 10 11 |
<!-- 推奨しません --> <link rel="stylesheet" href="//www.google.com/css/maia.css" type="text/css"> <!-- 推奨 --> <link rel="stylesheet" href="//www.google.com/css/maia.css"> <!-- 推奨しません --> <script src="//www.google.com/js/gweb/analytics/autotrack.js" type="text/javascript"></script> <!-- 推奨 --> <script src="//www.google.com/js/gweb/analytics/autotrack.js"></script> |
HTMLの書式ルール
全般的な書式
ブロック、リスト、テーブル要素は改行する。それらの子要素にはインデントを入れる。
横並びリストなど改行による空白が問題になる場合は、li要素をすべて一行で書いてもOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<blockquote> <p><em>Space</em>, the final frontier.</p> </blockquote> <ul> <li>Moe <li>Larry <li>Curly </ul> <table> <thead> <tr> <th scope="col">Income <th scope="col">Taxes <tbody> <tr> <td>$ 5.00 <td>$ 4.50 </table> |
HTML引用符
属性値の引用符は、ダブルクオーテーションを使用する。
1 2 3 4 5 |
<!-- 推奨しません --> <a class='maia-button maia-button-secondary'>Sign in</a> <!-- 推奨 --> <a class="maia-button maia-button-secondary">Sign in</a> |
CSSスタイルルール
CSSのバリデート
CSSバリデーターにバグがある場合や独自の構文を必要としない限りは、ちゃんと書く。
W3C CSS validatorなどのツールを使用してテストする。
IDとclass名
意味の分かる(目的が分かる)名前にする。プロパティがかわっても大丈夫なようにする。
例)プロパティの色の名前をつけたりすると、変更があった場合に困る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* 推奨しません:意味が分かりません */ #yee-1901 {} /* 推奨しません:見た目を表しています */ .button-green {} .clear {} /* 推奨:意味があります */ #gallery {} #login {} .video {} /* 推奨:一般的な名前です */ .aux {} .alt {} |
IDとclass名のスタイル
ID名とclass名は可能な限り短くする。(必要であれば長くなっても良い)
1 2 3 4 5 6 7 |
/* 推奨しません */ #navigation {} .atr {} /* 推奨 */ #nav {} .author {} |
タイプセレクタ
IDとclass名にタイプセレクタは使わないようにする。
(タイプセレクタとは要素を対象としたセレクタ。全部のPタグに対して・・・とか。)
使いまわしがしにくくなるため。
1 2 3 4 5 6 7 8 |
/* 推奨しません */ ul#example {} div.error {} /* 推奨 */ #example {} .error {} .author {} |
ショートハンドプロパティ
可能な限りショートハンドプロパティを使う。
ショートハンドプロパティはここから確認できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* 推奨しません */ border-top-style: none; font-family: palatino, georgia, serif; font-size: 100%; line-height: 1.6; padding-bottom: 2em; padding-left: 1em; padding-right: 1em; padding-top: 0; /* 推奨 */ border-top: 0; font: 100%/1.6 palatino, georgia, serif; padding: 0 1em 2em; |
0と単位
値が0の場合は単位を省略する。
1 2 |
margin: 0; padding: 0; |
小数点の値
始めの0は省略する。
1 |
font-size: .8em; |
HEX形式の色指定
できるだけ3文字の色コードを使う。
1 2 3 4 5 |
/* 推奨しません */ color: #eebbcc; /* 推奨 */ color: #ebc; |
プリフィックス(接頭辞):※任意
なるべく固有の接頭詞を付ける。
大きなプロジェクトなどでIDやclass名が重複しないよう。ユニークな識別子をハイフンでつなぐ。
※BEMと一緒に考えた方が良いかも。
1 2 |
.adw-help {} /* AdWords */ #maia-note {} /* Maia */ |
ID、class名の区切り
IDとクラス名の単語はハイフンで区切る。
※BEMと一緒に考えた方が良いかも。
1 2 3 4 5 6 7 8 9 |
/* 推奨しません: “demo”と“image”が分けられていない */ .demoimage {} /* 推奨しません: ハイフンの代わりにアンダーバーが使われている */ .error_status {} /* 推奨 */ #video-id {} .ads-sample {} |
ハック
可能な限り使わない。
CSS書式のルール
宣言の順番
アルファベット順にする。ベンダープレフィックスは無視する。ただ-moz接頭辞は-webkitの前に来る、などの順序は保つ。
1 2 3 4 5 6 |
border: 1px solid; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; color: black; text-align: center; |
ブロック単位のインデント
階層がわかるようにブロック単位でインデントする。
1 2 3 4 5 6 |
@media screen, projection { html { background: #fff; color: #444; } } |
宣言の終止符
すべてのプロパティの終端はセミコロンを書く。
1 2 3 4 5 6 7 8 9 10 11 |
/* 推奨しません */ .test { display: block; height: 100px } /* 推奨 */ .test { display: block; height: 100px; } |
プロパティ名の終端
すべてのプロパティ名の終端にはコロンの後にスペースを入れる。
1 2 3 4 5 6 7 8 9 |
/* 推奨しません */ h3 { font-weight:bold; } /* 推奨 */ h3 { font-weight: bold; } |
プロパティ名の終わり
プロパティ名の終端にはコロンの後にスペースを入れる。プロパティとコロンの間には入れない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* 推奨しません: スペース忘れ */ #video{ margin-top: 1em; } /* 推奨しません: 不必要な改行 */ #video { margin-top: 1em; } /* 推奨 */ #video { margin-top: 1em; } |
セレクタと宣言の分離
別々のセレクタとプロパティは改行して書く。
1 2 3 4 5 6 7 8 9 10 11 12 |
/* 推奨しません */ a:focus, a:active { position: relative; top: 1px; } /* 推奨 */ h1, h2, h3 { font-weight: normal; line-height: 1.2; } |
ルールの分離
ルールごとに改行して一行間を空けて書く。=2回改行する。
1 2 3 4 5 6 7 8 |
html { background: #fff; } body { margin: auto; width: 50%; } |
クオテーションマーク
属性セレクターとプロパティ値にシングルクオテーションを使う。URI値には引用符を使用しない。
例外:もし@charsetを使う必要があれば、ダブルクオテーションを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* 推奨しません */ @import url("//www.google.com/css/maia.css"); html { font-family: "open sans", arial, sans-serif; } /* 推奨 */ @import url(//www.google.com/css/maia.css); html { font-family: 'open sans', arial, sans-serif; } |
CSSの書式ルール
セクションのコメント:任意
セクションごとにコメントを記述する。セクションの区切りに改行を入れる。
1 2 3 4 5 6 7 8 |
/* Header */ #adw-header {} /* Footer */ #adw-footer {} /* Gallery */ .adw-gallery {} |