次のような Web ページがあります。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<header>
<span>Logo</span>
<nav>Navigation</nav>
</header>
<main>
<h1>Page heading</h1>
<div>
Page content
</div>
</main>
<footer>
Content information
</footer>
</body>
</html>
ページ構造は、現在の HTML5 ドラフトの一例に似ています: http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-elementで、私はそれが意味的に正しい。
次に、CSS を使用してこのドキュメントのスタイルを設定したいと思います。ヘッダーを上部に、フッターを下部にしたいと考えていますが、もちろん簡単に実行できます。ヘッダー内では、ロゴを右側に配置し、ナビゲーションを中央に配置したいと考えています。浮きます)。
私の問題は、メインのコンテンツ ヘッダー (h1 要素) をヘッダーの左側に視覚的に配置したいときに始まります。私は position: absolute で行うことができますが、そのようなレイアウトはあまり柔軟ではなく、ヘッダーまたは見出しのサイズが変更されるとすぐに壊れてしまいます。提案された CSS グリッド レイアウトhttp://www.w3.org/TR/css3-grid-layout/は、まさに私がやりたいことを実行できるかもしれませんが、私の知る限り、IE 10 でのみサポートされています (どういうわけか) .
シンプルで有効な解決策の 1 つは、ページを単純に再構築することです。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<div>
<h1 id="heading">Page heading</h1>
<header>
<span>Logo</span>
<nav>Navigation</nav>
</header>
</div>
<main aria-labelledby="heading">
<div>
Page content
</div>
</main>
<footer>
Content information
</footer>
</body>
</html>
ただし、このソリューションは簡単にレイアウトできますが、完全なセマンティクスは aria-* 属性を介してのみ表現され、HTML5 セマンティクスの精神 (特にメイン要素) に反するようです。
サンプル ページは単純かもしれませんが、より多くの要素の視覚的位置が HTML5 マークアップのフロー順序と同じ順序ではない (そして、フレキシブル ボックス レイアウトの順序プロパティが優先されるようにネストされている) より複雑なページを簡単に想像できます。十分ではありません)。どのように問題を解決しますか? 非セマンティック要素 (div など) を使用して HTML5 マークアップを書き直して、ビジュアル レイアウトにより対応するようにし、非セマンティック要素を可能な限りセマンティック要素 (フッターやメインなど) と新しい構造に交換しますか?