【问题标题】:Nested ul and ol closing tag placement嵌套的 ul 和 ol 结束标记放置
【发布时间】:2020-12-19 23:08:45
【问题描述】:

我看到这有两种不同的方式:

第一种方式

<ul>
  <li>first item</li>
  <!-- No closing li tag in next line -->
  <li>second item
    <ul>
      <li>first subitem of second item</li>
    </ul>
  <!-- li closing tag in next line -->
  </li> 
</ul>

第二种方式

<ul>
  <li>first item</li>
  <!-- Closing li tag in next line like normal -->
  <li>second item</li>
  <ul>
    <li>first subitem of second item</li>
  </ul>
</ul>

这两者在渲染方式上是相同的,但其中一个比另一个更好吗?

【问题讨论】:

  • 这取决于代码JS或css想要的用法
  • @MisterJojo 你能详细说明一下吗?
  • 查看依赖关系:在第一种情况下,li sub 的 ul 是 li 第二项的子项。
  • 第二种方式不是有效的 W3C,但浏览器接受它

标签: html


【解决方案1】:

这取决于想要实现的目标(包括您的 JS)。每种方式的使用示例:

第一种方式(多级下拉-嵌套列表):
W3schools example.
Stackoverflow example

第二种方式示例:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-size: 10px;
  overflow-x: hidden;
}

header {
  background-color: #f88752;
  position: relative;
  height: 50px;
  width: 100%;
}

nav {
    height: 100%;
}

.first-list,
.second-list {
  list-style-type: none;
  display: flex;
  align-items: center;
  justify-content: center;
}

.first-list {
  height: 100%;
}

.first-list .list1-item {
  margin: 0 10px;
  cursor: pointer;
  color: #f1f1f1;
  font-size: 1.3rem;
}

.second-list {
  position: absolute;
  flex-direction: column;
  left: -100%;
  transform: translate(-50%, 0);
  top: 65px;
  background-color: #f88752;
  width: 400px;
  height: 70px;
  border-radius: 5px;
  transition: all 0.2s;
}

.second-list .list2-item {
  font-size: 1.2rem;
}

#myBtn:hover ~ .second-list {
  left: 50%;
}
<header>
  <nav>
    <ul class="first-list">
      <li class="list1-item">Home</li>
      <li class="list1-item">Gallery</li>
      <li class="list1-item">About</li>
      <li class="list1-item" id="myBtn">Contact</li>
      <ul class="second-list">
        <li class="list2-item">+123456789</li>
        <li class="list2-item">example@hotmail.com</li>
      </ul>
    </ul>
  </nav>
</header>

【讨论】:

    【解决方案2】:

    尽管 html 可能看起来相同,但存在一些差异,使第一种方法成为更好的选择。

    首先,语义上:你可以找到一个讨论和一些文章here

    第二,DOM 操作。使用第一种方法,嵌套的 ul 显然是第二个 li 的孩子。例如,如果您决定删除 js 中的第二个 li,则 ul 也将被删除。使用第二种方法,它看起来像嵌套的 ul 是一个孩子,但实际上不是。所以如果你决定删除第二个 li,你仍然会有嵌套的 ul,没有它的父级,这没有多大意义。

    第三,造型。仅当未应用特定样式时,这两种方法看起来相同。如果你想改变一些东西,事情可能会开始变得不同。例如,假设您想为您的 li 添加一些填充。看看这个sn-p:

      li{
        padding-left: 30px;
      }
    <ul>
      <li>first item</li>
      <!-- No closing li tag in next line -->
      <li>second item
        <ul>
          <li>first subitem of second item</li>
        </ul>
      <!-- li closing tag in next line -->
      </li> 
    </ul>
    
    <ul>
      <li>first item</li>
      <!-- Closing li tag in next line like normal -->
      <li>second item</li>
      <ul>
        <li>first subitem of second item</li>
      </ul>
    </ul>

    您可以看到第一种方法看起来仍然不错,而第二种方法开始看起来不对。

    因此,总而言之,虽然它们看起来相同,但请选择选项 1 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多