HTML에서 목록에 대한 캡션, 제목 또는 레이블을 의미 론적으로 제공하는 방법


83

HTML 목록에 의미 캡션 을 제공하는 적절한 방법은 무엇입니까 ? 예를 들어, 다음 목록에는 "제목"/ "캡션"이 있습니다.

과일

  • 사과
  • 주황색

"과일"이라는 단어가 목록 자체와 의미 적으로 연관되도록 어떻게 처리해야합니까?


HTML 사양은 요소에 캡션, 범례 및 메모 속성 또는 태그를 추가해야합니다. 이미지, 표, 목록 및 기타 텍스트가 아닌 개체에는 출판물에 첨부 된 제목, 범례 및 / 또는 메모가 있으며 유용한 마크 업 언어는 이러한 규칙을 반영해야합니다.

9
이 질문이 종료되어 놀랍습니다. 그것은 미학이나 다른 주관적인 주제가 아니라 의미론에 관한 것입니다. 질문은 "이 상황에 적절한 의미 마크 업이 있습니까?"라고 직접 묻는 것입니다. HTML5에 관한 한 대답은 "예" 입니다.
daiscog

9
나는 "의견 기반"으로 마감되는 것처럼 내 관심사 인 많은 질문을 보는 것에 지쳤습니다. 그것은 반 생산적입니다. 우리의 의견을 표현합시다. 또한이 질문은 "모범 사례"에 관한 것입니다. 사람들은 모범 사례와 관련하여 유효한 주장을 할 수 있습니다 (출처 포함). 우리는 그러한 주장을 원합니다. 그 모든 "의견"에 대해
믈라덴 Adamovic

2
나는이 질문을 다시 여는 것에 투표했고, 의견이 덜하게 들리도록 편집했습니다. 이제 제목을 추가하는 올바른 의미 론적 방법을 명확하게 요구합니다.
Lazar Ljubenović

답변:


73

마크 업을 효과적으로 구성하는 캡션이나 제목 요소는 없지만 동일한 효과를 가질 수 있습니다. 몇 가지 제안이 있습니다 :

중첩 목록

<ul>
    <li>
        Fruit
        <ul>
            <li>Apple</li>
            <li>Pear</li>
            <li>Organge</li>
        </ul>
    </li>
</ul>

목록 앞의 제목

<hX>Fruit</hX>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

정의 목록

<dl>
  <dt>Fruit</dt>
  <dd>Apple</dd>
  <dd>Pear</dd>
  <dd>Orange</dd>
</dl>

2
@alohci 목록에 더 많은 정의가있을 경우 정의 목록이나 순서없는 목록에 무엇이 잘못 되었습니까?
ahsteele

2
@Alohci : 자세히 설명 해주세요. 귀하의 코멘트에 관심 있지만 의미로 설명하지 않는 당신 같은 전혀 도움이되지이다 다른 옵션은 '의미 유효'아니다
스테인 드 위트

4
@StijndeWitt-그게 다 사실입니다. 경우에는 문제가 아니기 때문에 잘못된 의미입니다 . 이것이 바로 HTML 마크 업을 얻는 데있어 문제이며, 실제 내용과 맥락이 중요합니다.
Alohci

2
갖는 @JeffereyCave <ul>의 자식으로 (또는 다른 블록 레벨 요소 것은) <p>에 따라 무효 는 HTML 사양 상태, <p>유일한 자식 노드로 "내용을 같이 분석"할 수 있습니다.
daiscog 16.01.26

4
@ahsteele 흥미 롭군요 ... MDN이 설명 목록으로 나열했습니다 ... 오! "HTML5 이전에는 [it]가 정의 목록으로 알려졌습니다." developer.mozilla.org/en-US/docs/Web/HTML/Element/dl . 귀하의 링크는 html4 용이었습니다. 그리고 그 링크에서 대화를 나타내는 dl의 예를 제공합니다. 각 dt는 화자를 표시하고 dd는 말하는 내용을 표시합니다. 그래서 나는 그것들이 무엇이든간에 이런 방식으로도 적절하게 사용될 수 있다고 확신합니다.
RoboticRenaissance

54

옵션 1

HTML5에는 figurefigcaption요소가 있습니다.

예:

<figure>
    <figcaption>Fruit</figcaption>
    <ul>
        <li>Apple</li>
        <li>Pear</li>
        <li>Orange</li>
    </ul>
</figure>

그런 다음 CSS로 쉽게 스타일을 지정할 수 있습니다.


옵션 2

CSS3의 :: before pseudo-element를 사용하는 것이 좋은 해결책이 될 수 있습니다 :

HTML :

<ul title="Fruit">
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

CSS :

ul[title]::before {
    content: attr(title);
    /* then add some nice styling as needed, eg: */
    display: block;
    font-weight: bold;
    padding: 4px;
}

물론 다른 선택기를 사용할 수 있습니다 ul[title]. 예를 들어 'head-as-header'클래스를 추가하고 ul.title-as-header::before대신 사용할 수 있습니다.

이것은 전체 목록에 대한 툴팁을 제공하는 부작용이 있습니다. 이러한 툴팁을 원하지 않는 경우 대신 데이터 속성 (예 : <ul data-title="fruit">ul[data-title]::before { content: attr(data-title); })을 사용할 수 있습니다 .


귀하의 대답은 사양이 말하는 것입니다. 나는 그것이 최고 득표자가 아닌 이유가 궁금합니다.
Ahmed Mahmoud

@AhmedMahmoud 아마도 상위 답변이 이것보다 7 년 더 오래 되었기 때문일 것입니다!
daiscog

오, 시간이 간다. 날짜를 몰랐습니다.
Ahmed Mahmoud

figure이미지와 다른 콘텐츠에 사용할 수 있다는 의미 입니까?
CodeGust

1
@CodeGust 절대적으로
daiscog

13

내가 아는 한, 현재 HTML 사양에는 표와 같이 목록에 대한 캡션을 제공하는 조항이 없습니다. 지금은 분류 된 단락이나 헤더 태그를 사용하고 있습니다.

<h3>Fruit</h3>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

앞으로 HTML5가 더 널리 채택되면 <legend><figure>태그를 사용하여 이를 약간 더 의미 적으로 수행 할 수 있습니다 .

자세한 내용 은 W3C 메일 링리스트 의이 게시물 을 참조하십시오.


4

스크린 리더가 목록을 관련 제목에 aria-labelledby연결하도록하려면 다음 id과 같이 제목에 연결됨을 사용할 수 있습니다 .

<h3 id="fruit-id">Fruit</h3>

<ul aria-labelledby="fruit-id">
  <li>Apple</li>
  <li>Pear</li>
  <li>Orange</li>
</ul>

이전 답변에서 언급했듯이 제목 수준이 문서의 제목 순서를 따르는 지 확인하십시오.


1

표와 같은 목록에는 캡션과 같은 태그가 없습니다. 그래서 나는 <Hx>(이전에 사용한 헤더에 따라 x)를 줄 것 입니다.


1

나는 이것이 오래되었다는 것을 알고 있지만 미래의 사람들을 위해 찾은 답변을 추가하고 싶었습니다. https://www.w3.org/MarkUp/html3/listheader.html

<lh>요소 사용 :

<ul>
  <lh>Types of fruit:</lh>
  <li>Apple</li>
  <li>Orange</li>
  <li>Grape</li>
</ul>

참고 : 이것은 HTML 3.0 초안에 언급 되었지만 HTML 3.2 에는 포함되지 않았 으므로 일부 브라우저에서는 제대로 렌더링 될 수 있지만 지원되지 않습니다.
Nathan Champion

0

이전 브라우저를 지원하는 솔루션을 찾으려고했기 때문에 지나치게 단순화 된 솔루션이 있습니다. 테이블 표시 스타일 및 ID / 클래스 사용 :

    <ul>
        <li id="listCaption">My List</li>
        <li>first item</li>
        <li>second item</li>
        <li>third item</li>
      </ul>

그런 다음 display: table-row;CSS의 요소에 스타일을 적용합니다 .

    li#listCaption {
      display: table-row;
      font-size: larger;
      text-decoration: underline; }

설명 목록을 사용하는 경우 훨씬 더 잘 작동합니다. 동일한 질문이있을 때 수행 한 작업입니다. 이 경우 dl 목록 내에서 div 요소가 지원 <div>되므로 HTML 및 display: table-caption;CSS 에서 사용할 수 있습니다 .

    <dl>
        <div id="caption">Table Caption</div>
        <dt>term</dt>
        <dd>definition</dd>
    </dl>

CSS에서 캡션에 다양한 스타일을 적용 할 수 있습니다.

    #caption {
        display: table-caption;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        background: transparent;
        caption-side: top;
        text-align: center; }

나는 그것이 table-caption잘 작동하지 않는다는 것을 알아야 합니다.ul/ol 이 블록 요소로 취급 될 때 텍스트가 아마 당신은 원하지 않는, 수직으로 정렬됩니다.

Firefox와 Chrome에서 이것을 테스트했습니다.


-2

언제든지를 사용 <label/>하여 목록 요소에 레이블을 연결할 수 있습니다 .

<div>
    <label for="list-2">TEST</label>
    <ul id="list-1">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
    <label for="list-2">TEST</label>
    <ol id="list-2">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
</div>

4
이것은 유효하지 않습니다. HTML 사양 상태는 것을 for속성은 해야한다 a의 ID가 될 labelable 요소 , UL(글을 쓰는 시점에서) 되지 않습니다 .
daiscog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.