How to get actual width of a block displayed with flex-direction:column properly?

前端 未结 3 2010
温柔的废话
温柔的废话 2021-01-25 10:57

For Example:

HTML



        
相关标签:
3条回答
  • 2021-01-25 11:17

    What I need is just el.scrollWidth.

    0 讨论(0)
  • 2021-01-25 11:26

    As you've discovered, scrollWidth will provide you the dimension you're looking for. The reason that outerWidth isn't giving you the total width of the internal elements is that your .list element is actually 600px wide. The additional content is overflowing its parent, allowing it to display despite being outside of the .list.

    You can test this by changing the overflow property to hidden on .list:

    body{ padding:0; margin:0; }
    .container {
      width: 600px;
    }
    
    .list {
      display: flex;
      flex-direction: column;
      flex-wrap: wrap;
      height: 120px;
      background: #FFCDD2;
      overflow: hidden;
    }
    
    .box {
      margin:10px;
      flex-shrink:0;
      flex-grow:0;
      flex-basis:auto;
      width: 100px;
      height: 100px;
      text-align:center;
      line-height:100px;
      background: #F44336;
      color:#FFF;
      font-size:2rem;
    }
    
    .result{
      padding:1rem;
    }
    <div class="container">
      <div class="list">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
        <div class="box">8</div>
        <div class="box">9</div>
        <div class="box">10</div>
      </div>
    </div>

    Note that when you run this, the .list element clips the remaining boxes.

    Hopefully this helps you understand what is going on in addition to solving the problem for you. Cheers!

    0 讨论(0)
  • 2021-01-25 11:40

    Probably more code than you wanted, but you could just sum the width of the elements inside the div, using javascript with jQuery like this:

    var totalWidth = 0;
    $('.box').each(function() {
      totalWidth += $(this).width();
    
    });
    
    $('#msg').html(
      "<p>totalWidth: " + totalWidth + "</p>"
    );
    

    with a live example: https://jsfiddle.net/yeeqkd2e/4/

    or without jQuery

    var totalWidth = 0;
    
    var cont = document.getElementsByClassName('box');
    for (var i = 0, len = cont.length; i < len; i++) {
        totalWidth += cont[i].offsetWidth;
    }
    
    document.getElementById('msg').innerHTML = "<p>totalWidth: " + totalWidth + "</p>";
    

    Native Javascript: https://jsfiddle.net/yeeqkd2e/6/

    0 讨论(0)
提交回复
热议问题