Search code examples
htmlcssflexboxwidth

Set `width: auto` in flex-direction: column;


I have div1 with flex-direction: column. Inside that div1 I want to have another div2. I'll be populating that div2 with words of different lengths and I want the width to be auto(self-adjustable). But width: auto doesn’t work with flex-direction: column. And I want to have div2 aligned to the left.

.parent {
  background: lightblue;
  padding: 10px;
  display: flex;
  flex-direction: column;
}
.child {
  display: flex;
  border: 2px solid green;
  border-radius: 4px;
  padding: 10px;
  ///////
  width: auto;
}
<div class='parent'>
  <div class='child'>
    <span>
      Some text
    </span>
  </div>
 </div>

I want the same behavior as if flex-direction would be set to row. Just like this:

.parent {
  background: lightblue;
  padding: 10px;
  display: flex;
  flex-direction: row;
}
.child {
  display: flex;
  border: 2px solid green;
  border-radius: 4px;
  padding: 10px;
}
<div class='parent'>
  <div class='child'>
    <span>
      Some text
    </span>
  </div>
 </div>

P.S. Cannot use width: max-content; and width: min-content;


Solution

  • Place align-items:flex-start on the parent.

    .parent {
      background: lightblue;
      padding: 10px;
      display: flex;
      flex-direction: column;
    align-items: flex-start;
    }
    .child {
      display: flex;
      border: 2px solid green;
      border-radius: 4px;
      padding: 10px;
    }
    <div class='parent'>
      <div class='child'>
        <span>
          Some text
        </span>
      </div>
     </div>

    Alternatively, align-self:start on the child

    .parent {
      background: lightblue;
      padding: 10px;
      display: flex;
      flex-direction: column;
    }
    
    .child {
      display: flex;
      border: 2px solid green;
      border-radius: 4px;
      padding: 10px;
      align-self: start;
    }
    <div class='parent'>
      <div class='child'>
        <span>
          Some text
        </span>
      </div>
    </div>