HTML5 standards of nesting div in li or dl

前端 未结 3 1476
天命终不由人
天命终不由人 2020-12-03 20:46

I know that it is not allowed to nest div in li in HTML5, although you can and it works. Does that mean I shoudn\'t use it? What is the standard about nesting divs in dls?

相关标签:
3条回答
  • 2020-12-03 21:30

    Since I had the same question as the second question: What is the standard about nesting divs in dls? I will answer here:

    According to the HTML5 (https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element),

    "The dl element represents an association list consisting of zero or more name-value groups (a description list). A name-value group consists of one or more names (dt elements, possibly as children of a div element child) followed by one or more values (dd elements, possibly as children of a div element child), ignoring any nodes other than dt and dd element children, and dt and dd elements that are children of div element children. Within a single dl element, there should not be more than one dt element for each name."

    There is even an example of nesting divs inside the dl that wraps the dt and dd elements.

    0 讨论(0)
  • 2020-12-03 21:38

    It is perfectly allowed to nest <div> elements in <li> and <dd> elements. <li>/<dd> elements may contain flow content, which <div> elements are.

    Specification: http://www.w3.org/TR/html5/grouping-content.html#the-li-element

    0 讨论(0)
  • 2020-12-03 21:41

    This information is incorrect - div elements are regarded flow content and are very well allowed inside li elements. You might have confused it with ul/ol elements, which may only contain lis accordingly.

    What has changed in HTML5 is, that it does not have block-level and inline elements anymore. Instead there is a more complex distinction of the elements into several categories.

    To see what is allowed inside an element according to HTML5, see the description of the specific tag where the section "Content model" tells you which content is allowed inside this particular element.

    EDIT: addressing the confusion in the comments about list elements

    (according to HTML living standard as of 2019-07-30)

    There are several types of lists - the most common ones are unordered (ul), and ordered (ol) lists. ul and ol are the "container" elements that only hold list item (li) as child elements - no other elements are allowed*. The li element itself can contain arbitrary flow content.
    * (technically they are also allowed to hold "script-supporting" elements

    <ol>
       <li></li>
       ...more li elements
    </ol>
    
    <ul>
       <li></li>
       ...more li elements
    </ul>
    

    For description lists (dl) there used to be the same restriction that they can only contain their respective child elements dt and dd, but recent changes allow div child elements as well, as long as those divs themselves contain a dt or dd.

    <dl>
      <dt>term</dt><dd>description</dd>
    </dl>
    
    // the following is now valid as well:
    
    <dl>
      <div><dt>term</dt><dd>description</dd></div>
    </dl>
    

    As a mnemonic: Container elements should only contain their respective child elements and those child elements can contain any content you like.

    0 讨论(0)
提交回复
热议问题