html - 显示 flex 创造额外的空间 为什么

标签 html css flexbox

我对 flexbox 的理解是,如果你将一个元素显示为 flex,该元素将成为 flex 容器,它的直接子元素将成为 flex 元素,这些 flex 元素表现为内联 block 元素, 所以我遵循这个逻辑,它工作正常,直到我在我的 css 中添加了最后一个,请阅读我在我的 css 代码中留下的评论,哪一行让我感到困惑。

简而言之,我期待类似的结果,但我对空间感到困惑,请同时查看图片以了解,

HTML 代码

<ul class="menu">
            <li><a href="#">Home</a></li>
            <li><a href="#">About</a></li>
            <li class="menu-item-has-children"><a href="#">Services</a>
                <ul class="sub-menu">
                    <li><a href="#">Plumbing</a></li>
                    <li class="menu-item-has-children"><a href="#">Heating</a>
                        <ul class="sub-menu">
                            <li><a href="#">Residential</a></li>
                            <li><a href="#">Commercial</a></li>
                            <li><a href="#">Industrial</a></li>
                        </ul>
                    </li>
                    <li><a href="#">Electrical</a></li>
                </ul>
            </li>
                <li><a href="#">Pricing</a></li>
                <li><a href="#">Contact Us</a></li>

        </ul>

CSS 代码

/*basic style no need to pay attention*/
*{font-family:helvetica;
    margin:0px;padding:0;
    list-style-type:none;
}
ul{margin:5px;}
ul ul a:link{color:red;}
ul ul ul a:link{color:black}
/*displaying them as flex, work fine*/
.menu{display:flex;}
.menu li {flex:1;}

.menu li a {
    display:block;
    min-width:100%
}

/*this line is confusing to me*/
ul ul li{
    display:flex;
}

第一张图片 enter image description here

第二张图片 enter image description here

最佳答案

默认情况下,flex 从左到右按行组织元素。在您的情况下,这意味着 <li class="menu-item-has-children"> 中的两个元素(链接和子菜单)将并排放置。

您必须添加 flex-direction: column解决您的问题:

* {
  font-family: helvetica;
  margin: 0px;
  padding: 0;
  list-style-type: none;
}

ul {
  margin: 5px;
}

ul ul a:link {
  color: red;
}

ul ul ul a:link {
  color: black
}

.menu {
  display: flex;
}

.menu li {
  flex: 1;
}

.menu li a {
  display: block;
}

ul ul li {
  display: flex;
  flex-direction: column; /* <- specify the flex direction here */
}
<ul class="menu">
  <li><a href="#">Home</a></li>
  <li><a href="#">About</a></li>
  <li class="menu-item-has-children"><a href="#">Services</a>
    <ul class="sub-menu">
      <li><a href="#">Plumbing</a></li>
      <li class="menu-item-has-children"><a href="#">Heating</a>
        <ul class="sub-menu">
          <li><a href="#">Residential</a></li>
          <li><a href="#">Commercial</a></li>
          <li><a href="#">Industrial</a></li>
        </ul>
      </li>
      <li><a href="#">Electrical</a></li>
    </ul>
  </li>
  <li><a href="#">Pricing</a></li>
  <li><a href="#">Contact Us</a></li>
</ul>

您的子菜单出现在 flex 容器之外的事实是由 min-width: 100% 引起的在你的 .menu li a 上设置元素。

关于html - 显示 flex 创造额外的空间 为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45559269/

相关文章:

html - 如何在填充的输入字段/框中对齐文本?

css - Reactjs 特定组件打印与 css

html - 用CSS修改链接

html - 如何在没有滚动条的情况下向 flexbox 添加负边距(不显示,不能滚动,没有 hack)

css - react JS : using `flexbox` to implement one div over another

javascript - ng-repeat 在 html 中显示数组中对象的索引

html - CSS 3 列响应式网格

html - 如何对齐元素 : center AND align-self: stretch?

php - 如何使用 jquery 在自动刷新 div 之前显示消息

html - 容器内的元素不占满宽度