Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

block element inside flex container do not behaves as expected

Tags:

html

css

flexbox

I need some help to understand what to me is an unexpected behaviour.

Why the h2 remains inline even though I set it's display property to block? I expected it to be 100% wide on top of the div elements as a title.

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>
like image 329
Amaliodigital Avatar asked Feb 17 '26 11:02

Amaliodigital


1 Answers

Because this is a flex row set to nowrap which means every flex child of the parent will be a cell/column in a horizontal row.

You will either need to use width: 100% or flex-basis: 100% on the h2 and also add flex-wrap: wrap to section, or you could just move the h2 above 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>

Or remove the flex properties from section and wrap the 3 column divs in a new element and apply the flex elements there.

.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>
like image 58
Michael Coker Avatar answered Feb 20 '26 01:02

Michael Coker