목록에 의미 론적으로 제목을 추가하는 방법


120

이것은 한동안 나를 괴롭 혔고, 이것을 올바르게 수행하는 방법에 대한 합의가 있는지 궁금합니다. HTML 목록을 사용할 때 목록의 헤더를 의미 론적으로 포함하려면 어떻게해야합니까?

한 가지 옵션은 다음과 같습니다.

<h3>Fruits I Like:</h3>
<ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

그러나 의미 상 <h3>표제는 명시 적으로<ul>

또 다른 옵션은 다음과 같습니다.

<ul>
    <li><h3>Fruits I Like:</h3></li>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

그러나 제목이 실제로 목록 항목 중 하나가 아니기 때문에 이것은 약간 더러워 보입니다.

이 옵션은 W3C에서 허용되지 않습니다.

<ul>
    <h3>Fruits I Like:</h3>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

의에 <ul>하나 이상의 <li>의 만 포함될 수 있으므로

오래된 "목록 제목" <lh>이 가장 의미가 있습니다.

<ul>
    <lh>Fruits I Like:</lh>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

물론 공식적으로 HTML의 일부는 아닙니다.

나는 우리 <label>가 양식처럼 사용한다고 제안했다고 들었습니다 .

<ul>
    <label>Fruits I Like:</label>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

그러나 이것은 약간 이상하며 어쨌든 유효성을 검사하지 않습니다.

내 목록 헤더의 스타일을 지정하려고 할 때 의미 론적 문제를 쉽게 볼 수 있습니다. <h3>태그를 첫 번째 안에 넣고 <li>다음과 같은 스타일링 대상으로 지정해야합니다.

ul li:first-of-type {
    list-style: none;
    margin-left: -1em;
    /*some other header styles*/
}

공포! 그러나 적어도 이런 식으로 태그 <ul>스타일을 지정하여 전체 , 제목 및 모든 것을 제어 할 수 있습니다 ul.

이를 수행하는 올바른 방법은 무엇입니까? 어떤 아이디어?


5
어떤 사람들은 LH를 사용하고 있지만 실제로 "실제"HTML 태그를 사용하고 있지 않고 임의의 태그 이름을 만들고 있다는 사실을 깨닫지 못할 수도 있습니다. 브라우저는 이러한 태그를 인라인 요소로 취급합니다. 일부는 클래스와 CSS를 넣을 수 있습니다.
Glen Little


답변:


81

Felipe Alsacreations가 이미 말했듯이 첫 번째 옵션은 괜찮습니다.

목록 아래에 아무 것도 제목에 속하는 것으로 해석되지 않도록하려면 HTML5 섹션 콘텐츠 요소의 용도입니다. 예를 들어 할 수 있습니다.

<h2>About Fruits</h2>
<section>
  <h3>Fruits I Like:</h3>
  <ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
  </ul>
</section>
<!-- anything here is part of the "About Fruits" section but does not 
     belong to the "Fruits I Like" section. -->

6
이것은 많은 의미가 있습니다. 감사. 물론 HTML5를 사용하려는 경우 제목은 태그 내의 최상위 제목이므로 <h1>안에 있어야 <section>합니다.
Tomas Mulder

6
물론 <h1>거기에서 사용할 수 있습니다 . 하지만 <h3>괜찮습니다. 동일한 섹션 내에서 더 높은 수준의 제목을 사용하지 않는 한.
Alohci

4
브라우저, 스크린 리더 및 기타 보조 기술이 HTML5에 명시된대로 올바르게 제목을 설명하지 않는 한 h1..h6 제목 (여기서는 h2 및 h3)을 고수해야합니다 ( coding.smashingmagazine.com/2011/08/16/ 참조) . … -검색 "brows"...). 몇 달 동안 얼마나 진화했는지는 모르겠지만 브라우저의 접근성 API와 관련하여 그렇게 빠르지는 않을 것입니다. /
FelipeAls

3
@davidjb-조심하세요, 그 조언이 말하는 것과 정확히 다릅니다. 제목 수준을 제공하기 위해 h1-h6을 사용해야한다고 말합니다. 즉, h1 요소는 페이지에서 가장 높은 수준의 제목에만 사용해야합니다. 가장 높은 수준에서 제목이 하나만있을 수 있다는 것은 아닙니다. 덧붙여서, 브라우저 제작자들은 아웃 라인 알고리즘을 구현할 의도가 없음을 분명히 밝혔으므로 상황이 빠르게 개선 될 것이라는 희망은 거의 없습니다.
Alohci

2
@Michele-그것은 시각적으로 중간에 있는지 또는 의미 적으로 중간에 있는지에 따라 다릅니다. 시각적으로 보면 CSS가 분류하는 데 문제가되고 이상적으로는 마크 업을 변경하지 않을 것입니다. 의미 상으로는 어떤 종류의 목록이 있는지 잘 모르겠습니다. 하나가 아닌 두 개의 목록이있을 수 있습니다.
Alohci

53

이 경우 정의 목록을 다음과 같이 사용합니다.

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>

5
위의 예와 같이 레이블로 설명 된 항목의 순서가 지정되지 않은 목록의 경우 이것이 최선의 선택이라고 생각합니다. 의미가 정확히 일치합니다. 여기에 용어 또는 레이블 (내가 좋아하는 과일)이 있으며, 해당 레이블 (각 과일)에 해당하는 항목이 있습니다.
Andrew

1
말 그대로 설명 목록 입니다. 이것은 최고의 솔루션 imo입니다.
Derek 朕 會 功夫

display : list-item ... CSS는 글 머리 기호를 표시합니다. 좋은 대답입니다.
Mycah

9

첫 번째 옵션은 좋은 것입니다. 문제가 가장 적으며 다른 옵션을 사용할 수없는 올바른 이유를 이미 찾았습니다.

그건 그렇고, 당신의 제목은 명시 적으로 관련되어 있습니다 <ul>: 목록 바로 앞에 있습니다! ;)

편집 : W3C HTML5 및 5.1의 편집자 중 한 명인 Steve Faulkner 가 요소 의 정의스케치했습니다 . 이것은 그가 HTML 5.2에 대해 논의 할 비공식적 인 초안 입니다.lt


1
동의합니다. 다른 솔루션은 전혀 의미가 없습니다

사실, <p>. 그러나 나는 여전히 테이블 for에 대한 <label>' or the <th>` 의 속성 과 같은 좀 더 명확한 것을 원합니다 . <lh>W3C가 실제로 지원한다면 옵션이 가장 합리적 이라고 생각합니다 .
Tomas Mulder 2012 년

5

<div>는 콘텐츠의 논리적 구분입니다. 목록과 함께 제목을 그룹화하려는 경우 의미 상 이것이 첫 번째 선택이 될 것입니다.

<div class="mydiv">
    <h3>The heading</h3>
    <ul>
       <li>item</li>
       <li>item</li>
       <li>item</li>
    </ul>
</div>

그런 다음 다음 CSS를 사용하여 모든 것을 하나의 단위로 함께 스타일링 할 수 있습니다.

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...

적어도 스타일링 목적으로는 좋은 선택입니다.
토마스 멀더

의미 론적으로 말하는 div는 아무것도 의미하지 않습니다. 왜 이것이 당신의 첫 번째 선택인지 이해가 안 되나요? : x
Rambobafet 2018

@Rambobafet, 위대한 강령술! 그 대답은 html5가 섹션과 다른 의미 상 올바른 옵션을 도입하기 전인 2012 년부터였습니다. 일부 브라우저는 이미 섹션을 지원했지만 일부는 지원하지 않았습니다. "div"는 콘텐츠에서 "논리적 분할"의 약자이므로 스타일링을 위해 콘텐츠를 분할하는 가장 좋은 방법이었습니다.
Evert

당신이 완벽하게 맞아요, "'12"부분을
보지 못했어요


0

CSS에서 새 클래스 인 ulheader를 정의 해보십시오. p.ulheader ~ ul은 내 헤더 바로 뒤에 오는 모든 항목을 선택합니다.

p.ulheader ~ ul {
   margin-top:0;
{
p.ulheader {
   margin-bottom;0;
}

-2

w3.org 에 따르면 (이 링크는 만료 된 HTML 3.0 사양 초안에 있음 ) :

순서가 지정되지 않은 목록은 일반적으로 항목의 글 머리 기호 목록입니다. HTML 3.0은 글 머리 기호를 사용자 정의하고 글 머리 기호없이 수행 할 수 있으며 여러 열 목록에 대해 목록 항목을 가로 또는 세로로 래핑하는 기능을 제공합니다.

여는 목록 태그는이어야합니다 <UL>. 그 뒤에는 선택적 목록 헤더 ( <LH>caption </LH>)와 첫 번째 목록 항목 ( <LI>) 이옵니다 . 예를 들면 :

<UL>
  <LH>Table Fruit</LH>
  <LI>apples
  <LI>oranges
  <LI>bananas
</UL>

다음과 같이 렌더링 될 수 있습니다.

테이블 과일

  • 사과
  • 오렌지
  • 바나나

참고 : 일부 레거시 문서에는 첫 번째 LI 요소 앞에 헤더 또는 일반 텍스트가 포함될 수 있습니다. HTML 3.0 사용자 에이전트의 구현자는 잘못된 형식의 레거시 문서를 처리하기 위해 이러한 가능성을 충족하는 것이 좋습니다.


8
이 "에 따른"링크가 1995 년 초안 3.0 사양을 가리키고 있기 때문에 반대 투표를합니다. "lh"태그는이를 초안이 아닌 HTML 사양으로 만들지 않았습니다.
Brooks Moses

HTML 3.0정말 오래된 문서입니다.
Derek 朕 會 功夫 July

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.