为啥在 <a> 中没有从 <li> 元素继承垂直对齐?

Posted

技术标签:

【中文标题】为啥在 <a> 中没有从 <li> 元素继承垂直对齐?【英文标题】:Why vertical-align is not inherited in <a> from <li> element?为什么在 <a> 中没有从 <li> 元素继承垂直对齐? 【发布时间】:2022-01-07 01:13:10 【问题描述】:

首先我需要说我只是从 CSS 和 html 开始。

有以下代码:

body 
  font-family: Verdana, sans-serif;


.topnav 
  text-align: center;


.topnav ul 
  background-color: #2B3AA7;
  display: inline-block;
  border-radius: 15px;
  height: 30px;
  padding-left: 20px;
  padding-right: 20px;


.topnav ul li 
  display: inline;
  text-decoration: none;
  margin-left: 20px;
  margin-right: 20px;
  vertical-align: middle;


.topnav ul li a 
  text-decoration: none;
  color: white;
</head>

<body>
  <div class="logo">
    <img  src="logosmaller.png">
  </div>
  <div class="topnav">
    <ul>
      <li>
        <a href="index.html" id="indexnav">Home</a>
      </li>
      <li>
        <a href="userdoc.html" id="userdocnav">Docs</a>
      </li>
      <li>
        <a href="download.html" id="downloadnav">Downloads</a>
      </li>
    </ul>
  </div>
  <div class="content-body">content</div>
  <div class="footer">
  </div>
  <br>
</body>

</html>

如您所见,蓝色区域中的项目未完全垂直对齐。我发现我需要在 a 元素中指定 vertical-alignment: middle; 以便在 li 元素中指定。为什么不继承?那些ali里面,所以我猜应该是继承的。

例如,body 中的 font-family 可以在任何地方继承。

【问题讨论】:

"为什么不继承?" — 因为您的浏览器默认样式表的设计者做出了这样的选择。 “例如,body 中的 font-family 随处继承”——而 background-color 不是,所以这并不意味着什么。 @Quentin 所以这是浏览器特定的东西,而不是 CSS?它可能在不同的浏览器中被继承? 这些天浏览器或多或少地标准化了他们的默认样式表。 【参考方案1】:

vertical-alignment: middle 仅适用于 table 或带有 display: table 的 div 的子级。

您可以在这里做的是将.topnav ul li a 中文本的line-height 与父级的高度匹配,或者为父级设置display: flex,然后您可以使用align-items: center 将父级内的所有内容垂直居中.

【讨论】:

以上是关于为啥在 <a> 中没有从 <li> 元素继承垂直对齐?的主要内容,如果未能解决你的问题,请参考以下文章

Qt正则表达式 如何得到字符串中所有满足条件的字符。这个正则为啥匹配不成功

为啥 ul 列表中的第一个类型不起作用

为啥<li>标签里的元素不能左对齐

当一些 <ul> 没有 <li> 子元素时,从 <ul> 数组中抓取 <li>

jQuery:为啥我在 li 元素上的点击事件不起作用?

为啥 jQuery 在选择器中链接 .attr() 时只选择一个元素?