2016-03-10 8 views
3

Я нашел a page about sections and outlines для HTML5. Не на 100% уверен, что это официально, и на странице говорится, что большинство браузеров не следуют за ним, но я думаю, что это довольно крутая идея, поэтому я пытаюсь создать код, который явно вставляет неявные разделы и создает контур.Невозможная ситуация при смешивании явного и неявного секционирования в HTML5?

концептуальная проблема, я похож на один из примеров, где смешаны неявные и явные секционирования (сокращенный вариант):

<body> 
    <h1>Mammals</h1> 
    <h2>Whales</h2> 
    ... 
    <section> 
    <h3>Forest elephants</h3> 
    ... 
    <h3>Mongolian gerbils</h3> 
    ... 
    <h2>Reptiles</h2> 
    ... 
    </section> 
</body> 

Который должен дать:

1. Mammals 
    1.1 Whales (implicitly defined by the h2 element) 
    1.2 Forest elephants (explicitly defined by the section element) 
    1.3 Mongolian gerbils (implicitly defined by the h3 element, which closes the previous section at the same time) 
2. Reptiles (implicitly defined by the h2 element, which closes the previous section at the same time) 

Но я сталкиваюсь проблема с этим (начиная раздел с заголовком, а затем позже используя менее глубокий заголовок). Рассмотрим этот слегка измененный пример:

<body> 
    <h1>Mammals</h1> 
    <h2>Whales</h2> 
    ... 
    <section> 
    <h3>Forest elephants</h3> 
    ... 
    <h2>Reptiles</h2> 
    ... 
    <h1>Martians</h2> 
    <p>Just being annoying</p> 
    </section> 
</body> 

Как я должен иметь дело с этим? Последние <h1> должны заканчиваться на уровне <h0> во внешнем пространстве, которого не существует.

(Лично я думаю, что было бы наиболее целесообразно иметь явные разделы, которые начинаются с <h3> только позволяют <h3>, <h4>, <h5> и <h6>, но не воспроизводит пример, и я хотел бы сделать это «официальный 'way.)

+1

Кажется, что этот пример вводит в заблуждение; Я уведомил Mozilla https://bugzilla.mozilla.org/show_bug.cgi?id=1255429 – Mark

ответ

2

Этот алгоритм учитывает это, просто не позволяя элементу заголовка внутри элемента секционирования быть выше самого элемента секционирования. Из spec:

При входе в заголовок элемента содержимого

Если текущий раздел не имеет заголовка, пусть элемент должен быть введен заголовок текущего раздела.

В противном случае, если введенный элемент имеет ранг, равный или превышающий заголовок последнего раздела схемы текущего контура цели, или если заголовок последнего раздела схемы текущего целевого контура это подразумеваемый заголовок, затем создайте новый раздел и добавьте его в контур текущего целевого элемента контура, чтобы этот новый раздел стал новым последним разделом этого контура. Пусть текущий раздел будет в новом разделе. Пусть вводимый элемент будет новым заголовком для текущего раздела.

Например, если у вас есть <h3> в качестве первого заголовка в секции, то любая <h2> или <h1>, что следует за ним в том же разделе будет рассматриваться одинаково, создавая неявные участки отдельно от первого. Только <h4> до <h6> создаст неявные подразделы, не запустив новый раздел.

Вашего первый пример на самом деле производит следующую схему:

 
1. Mammals 
    1.1 Whales 
    1.2 Forest elephants 
    1.3 Mongolian gerbils 
    1.4 Reptiles 

И ваш второй пример дает следующую схему:

 
1. Mammals 
    1.1 Whales 
    1.2 Forest elephants 
    1.3 Reptiles 
    1.4 Martians 
1

В неявной секции внутри секционирования элемента контента не может «излом out "для создания записи более высокого уровня.Они либо создают запись для сиблинга (если это элемент заголовка с тем же или более высоким рангом), либо дочерняя запись (если это элемент заголовка с более низким рангом).

Так как ваши примеры создать эту схему:

1. Mammals 
    1.1 Whales 
    1.2 Forest elephants 
    1.3 Mongolian gerbils [resp. Reptiles] 
    1.4 Reptiles [resp. Martians] 

demo of the HTML5 Outliner (which I recommend), кажется, согласны.