flex容器内的块元素不会按预期运行

时间:2017-05-29 18:49:32

标签: html css css3 flexbox

我需要一些帮助来了解对我来说意外的行为。

为什么h2仍然保持内联,即使我将它的display属性设置为阻止? 我希望它作为标题在div元素之上是100%宽。

section{
       border: 1px solid red;
        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
        justify-content: space-around;
        align-items: stretch;
    }

h2 {
  display: block;
  border: 1px solid red;
}
<section>
               <h2>main title</h2>
       <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
        <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
        <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
</section>

1 个答案:

答案 0 :(得分:0)

因为这是设置为row的flex nowrap,这意味着父项的每个flex子项都是水平行中的单元格/列。

您需要在width: 100%上使用flex-basis: 100%h2,并将flex-wrap: wrap添加到section,或者您可以移动h2 1}}以上section ...

section {
       border: 1px solid red;
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: space-around;
        align-items: stretch;
    }

h2 {
  display: block;
  border: 1px solid red;
  width: 100%;
}
<section>
               <h2>main title</h2>
       <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
        <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
        <div>
           <h3>title</h3>
            <ul>
            <li>element 1</li>
            <li>element 2</li>
            <li>element 3</li>
            <li>element 4</li>
            <li>element 5</li>
            </ul>
        </div>
</section>

或者从flex中移除section属性并将3列div包装在新元素中并在那里应用flex元素。

.flex {
  border: 1px solid red;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-around;
  align-items: stretch;
}

h2 {
  display: block;
  border: 1px solid red;
}
<section>
  <h2>main title</h2>
  <div class="flex">
    <div>
      <h3>title</h3>
      <ul>
        <li>element 1</li>
        <li>element 2</li>
        <li>element 3</li>
        <li>element 4</li>
        <li>element 5</li>
      </ul>
    </div>
    <div>
      <h3>title</h3>
      <ul>
        <li>element 1</li>
        <li>element 2</li>
        <li>element 3</li>
        <li>element 4</li>
        <li>element 5</li>
      </ul>
    </div>
    <div>
      <h3>title</h3>
      <ul>
        <li>element 1</li>
        <li>element 2</li>
        <li>element 3</li>
        <li>element 4</li>
        <li>element 5</li>
      </ul>
    </div>
  </div>
</section>