添加display: block后,nav-item的内容增加到1px,导致父item的高度Flexbox 示例页面

问题描述 投票:0回答:1

下图指向当前UI:

|

给定的html和css代码:

<!DOCTYPE html>
<html lang="en-US">
  <head>
    <title>Flexbox example page</title>
    <link href="styles.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <nav>
      <ul class="site-nav">
        <li><a href="#">Home</a></li>
        <li><a href="#">Features</a></li>
        <li><a href="#">Pricing</a></li>
        <li><a href="#">Support</a></li>
        <li class="nav-right"><a href="#">About</a></li>
      </ul>
    </nav>
  </body>
</html>
*,
::before,
::after {
  box-sizing: border-box;
}
body {
  margin: unset;
  background-color: #709b90;
  font-family: Helvetica, Arial, sans-serif;
}
.site-nav {
  display: flex;
  padding: 0.5rem;
  list-style-type: none;
  background: #5f4b44;
}
.site-nav > li > a {
  text-decoration: none;
  color: white;
  background: #cc6b5a;
  padding: 0.5em 1em;
}

原来的问题是在应用以下CSS后出现的:

.site-nav > li > a {
  display: block;
}

最终的用户界面:

最终的 UI 是我所期望的,但我无法弄清楚 css 在这里是如何工作的。

我尝试了开发工具,看来

block
值会导致元素占据其父元素的整个宽度,从而引入换行符。这会将导航项内容的高度增加到
1px

  1. 现在,我关心的是
    display: block
    属性如何影响 UI?
  2. 这里我无法弄清楚的基本想法是什么?
  3. 我是否缺少任何深刻的理解?
css flexbox display
1个回答
0
投票

function f(){
  document.querySelectorAll('.site-nav > li > a')
    .forEach( el => {
      el.classList.toggle('block');
    });
}
*,
::before,
::after {
  box-sizing: border-box;
}
body {
  margin: unset;
  background-color: #709b90;
  font-family: Helvetica, Arial, sans-serif;
}
.site-nav {
  display: flex;
  padding: 0.5rem;
  list-style-type: none;
  background: #5f4b44;
}
.site-nav > li > a {
  text-decoration: none;
  color: white;
  background: #cc6b5a;
  padding: 0.5em 1em;
}

/*.site-nav > li > a,*/
.block {
  display: block;
}
<!DOCTYPE html>
<html lang="en-US">
  <head>
    <title>Flexbox example page</title>
    <link href="styles.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <nav>
      <ul class="site-nav">
        <li><a href="#">Home</a></li>
        <li><a href="#">Features</a></li>
        <li><a href="#">Pricing</a></li>
        <li><a href="#">Support</a></li>
        <li class="nav-right"><a href="#">About</a></li>
      </ul>
    </nav>
    
    <button onclick="f();">asdf</button>
  </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.