HTML5とCSS3で変わるマークアップの概念

HTML5とCSS3で変わるマークアップの概念のアイキャッチ画像

最近の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クリエイターにとってはよくないことなので、一度マークアップを見直してみようかと思っておる次第です。