У меня есть веб-страница, такая как следующая:
<!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) визуально слева от заголовка. Я мог бы сделать с позицией: абсолютный, но такой макет не очень гибкий и сломался, как только изменились заголовок или размеры заголовка. Предложенная компоновка сетки CSS http://www.w3.org/TR/css3-grid-layout/ может выполнять именно то, что я хочу, но она, насколько мне известно, поддерживается только (как-то ) в IE 10.
Одним простым и рабочим решением будет просто реструктурировать мою страницу:
<!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 (и вложен, чтобы гибкая компоновка ящика свойство заказа не будет достаточным). Как бы вы решили проблему? Перепишите разметку HTML5 с не семантическими элементами (например, divs), чтобы она соответствовала визуальному расположению и затем заменила не семантические элементы семантическими (например, нижним колонтитулом или основным), где это возможно, с новой структурой?