Ответ 1
Я сталкиваюсь с той же загадкой, что и вы, и я ценю разочарование. Я попробую отрицательный ответ, потому что я чувствую, что оба этих положительных (которые говорят, что вы можете достичь обоих своих целей) не имеют смысла.
Во-первых, как я его вижу, ваша основная трудность заключается в том, что CSS не может перемещать элемент в новый контейнер. Два ответа делятся на две категории:
-
Некоторые из них представляют собой ультра-специфические хаки (субъективно говоря), включающие поплавки, отрицательные поля и/или абсолютное позиционирование, которые могут перемещать элемент из своего контейнера. Они могут быть эффективными, но только в очень конкретных случаях. По мере роста ваших потребностей его трудно поддерживать, и для этого необходимо положить достаточно большой объем мышления для решения каждой новой необходимости или краевого случая, который вы пропустили ранее. Ответ @jennifit пытается переместить вас в этом направлении. Это, я считаю, нормальный маршрут, те стараются следовать духу семантической HTML5, которая достойна восхищения. Но это может быть трясина, которая заставляет вас начинать спрашивать, для кого вы поддерживаете свою смысловую чистоту? Это для поисковых систем, для чтения с экрана или простоты обслуживания? Я вернусь к этому после следующей классификации.
-
Некоторые из них являются прагматическими рационализациями, которые утверждают, что они эквивалентны семантически, но, по правде говоря, отличаются смысловым смыслом. На мой взгляд, это действительно семантический взлом. @volker-e ответ - пример этого. Он прав, это альтернативная разметка, которая может работать, но она не совпадает с тем же смысловым смыслом.
h2
принадлежитmain
какh1
- нет смысла перемещать его внутри заголовка страницы. Фактически, вы говорите, что ваш заголовок не связан с вашим основным контентом. Это, в некотором смысле, хуже, чем использование этого div, который вы хотели использовать, потому что вы создаете ложную семантическую связь, группируя заголовок страницы и заголовок сайта в один и тот же семантически значимыйheader
. Семантически бессмысленный контейнер, такой какdiv
, дляheader
иmain
, на мой взгляд, на самом деле менее извращен.
Итак, возвращаясь к тому, что я сказал о том, для кого вы поддерживаете семантическую чистоту, это настоящий философский вопрос в игре. Часто существует очевидное, эффективное и поддерживаемое решение без рационализированного неправильного использования существующих семантических элементов или трюков css. В вашем случае, если у вас есть элемент, который семантически является ребенком, но не является ребенком, ответ - тот, который вы уже задали в качестве вопроса:
Перепишите разметку HTML5 с не семантическими элементами (например, divs), поэтому что он больше соответствует визуальной компоновке, а затем обменивается не семантические элементы [sic] семантические (например, нижний колонтитул или основной), где бы возможно с новой структурой.
Это правильная вещь, чтобы сделать, чтобы вы были семантической чистотой, предназначенной для
- Доступность: в этом случае вы можете достичь этого в неиерархическом порядке с ролями ARIA.
- поисковые системы: поисковые системы по-прежнему понимают старый способ делать что-то, поэтому вы не столкнетесь с проблемой SEO, если будете следовать более старым подходам к семантике.
- обслуживание: это причина, по которой большинство людей заманивают - но проблема в том, какой смысл поддерживаемого HTML, но неподдерживаемый CSS, или наоборот? у вас нет выбора, кроме как увидеть ваше обслуживание как комбинацию как CSS, так и HTML, и вам нужно найти среднюю площадку, где они оба неравнозначны, когда вы сталкиваетесь с трудной проблемой презентации.
Единственный другой возможный ответ, если вы считаете, что семантика HTML важна, - это принять ограничения, которые иерархическая семантика HTML размещается на вашем макете. Проблема в том, что в CSS не существует способа воссоздать иерархию компоновки. Пока это не произойдет, вам придется признать, что HTML - это как презентационный, так и семантический язык, и поэтому семантика всегда будет вопросом "лучше" и "хуже". Действительно красивая или богатая или совершенная семантика будет недостижимой во многих, если не в большинстве, макетах.