最近のHTMLコーディングは特に理由がない限りHTML5で行います。古いブラウザへの対応も減少し、積極的にCSS3も取り入れるようになりました。
HTML5ではインライン要素とブロックレベル要素の概念がない
HTML5以前のHTMLタグはインライン要素とブロックレベル要素に分類されており、インライン要素のタグはブロックレベル要素のタグ内で使う事が推奨されていました。
例えばdiv
タグの中でa
タグを使うのはありだけど、a
タグの中でdiv
を使う事はタブーとされてきました。 また、インライン要素はブロックレベル要素で包括されることが好ましいとされていました。
HTML5にはインライン要素とブロックレベル要素の分類がないので、a
タグの中でdiv
タグを記述しても問題ありません。マークアップの概念が変わりました!
ナビゲーションのマークアップが悩ましい
HTML5でマークアップの概念が変わったついでに最近はナビゲーションのマークアップについてよく考えます。以前のマークアップでは上図のようなグローバルナビゲーションなどの横並びのメニューは以下のようにマークアップするのがスタンダードだったと思われます。
<div class="test-nav">
<ul>
<li><a href="#">メニュー</a></li>
<li><a href="#">メニュー改行<br>メニュー</a></li>
<li><a href="#">メニュー</a></li>
<li><a href="#">メニュー</a></li>
</ul>
<!-- /test-nav --></div>
cssは以下のような感じ
div.test-nav {
width: 100%;
overflow: hidden;
* zoom: 1;
margin-bottom: 30px
}
div.test-nav ul li {
display: table;
width: 25%;
float: left
}
div.test-nav ul li a {
width: 100%;
line-height: 130%;
position: relative;
display: table-cell;
height: 60px;
background: #17191D;
color: #fff;
text-decoration: none;
vertical-align: middle
}
div.test-nav ul li a:hover {
background: #3E4351
}
div.test-nav ul li + li a:before {
content: '';
background: #3E4351;
position: absolute;
width: 1px;
display: block;
height: 30px;
margin-top: -15px;
top: 50%;
left: 0
}
サンプル
以下の記述も文法的にはブロックレベル要素の中にインライン要素が入れ子になっているのでHTML5以前でもこの記法でも問題ありませんでしたが、なんとなく慣習的なもので上記の記述を採用し、以下のような記述は行っておりませんでした。
<nav>
<p class="test-nav02">
<a href="#">メニュー</a>
<a href="#">メニュー改行<br>メニュー</a>
<a href="#">メニュー</a>
<a href="#">メニュー</a>
<!-- /test-nav --></p>
</nav>
HTMLもすっきりしますし、CSSも短くなります。
p.test-nav02 {
width: 100%;
display: table;
margin-bottom: 30px
}
p.test-nav02 a {
width: 25%;
line-height: 130%;
display: table-cell;
position: relative;
height: 60px;
vertical-align: middle;
background: #17191D;
color: #fff;
text-decoration: none
}
p.test-nav02 a:hover {
background: #3E4351
}
p.test-nav02 a + a:before {
content: '';
background: #3E4351;
position: absolute;
width: 1px;
display: block;
height: 30px;
margin-top: -15px;
top: 50%;
left: 0
}
サンプル
HTMLの記述もCSSの記述も減少しますので、サイト単位で考え各所見直すと結構なソースの圧縮になります。
慣習的なことに縛られるのはWebクリエイターにとってはよくないことなので、一度マークアップを見直してみようかと思っておる次第です。