例如:
console.log($('.container').width()); // 600px as we defined in css.
console.log($('.list').width()); // 600px
console.log($('.box').eq('-1').position().left + $('.box').outerWidth());

body{padding:0;margin:0;}
.container {
width: 600px;
backround:#E1BEE7;
}
.list {
display: flex;
flex-direction: column;
flex-wrap: wrap;
height:120px;
background:#FFCDD2;
}
.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;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<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>
&#13;
有10个盒子,每个盒子的宽度为100px,元素.list
的实际宽度应该是1000px而不是600px。
我尝试使用以下方法获取列表的实际宽度:最后一个子元素的左侧位置及其外部宽度
console.log($('.box').eq('-1').position().left + $('.box').outerWidth());
我想知道的是:有没有更好的方法来获得这种flexbox元素的实际宽度?为此存在一些更好的内置javascript或jquery方法?
答案 0 :(得分:2)
我需要的只是el.scrollWidth
。
答案 1 :(得分:1)
正如您所发现的,scrollWidth
将为您提供您正在寻找的维度。 outerWidth
未给出内部元素总宽度的原因是您的.list
元素实际上是600px宽。附加内容溢出其父级,允许它显示在.list
之外。
您可以通过将overflow
属性更改为hidden
上的.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;
}
&#13;
<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>
&#13;
请注意,运行此选项时,.list
元素会剪切剩余的框。
希望除了为您解决问题之外,这有助于您了解正在发生的事情。干杯!
答案 2 :(得分:0)
可能比你想要的代码多一些,但是你可以将div中的元素的宽度相加,使用javascript和jQuery这样:
var totalWidth = 0;
$('.box').each(function() {
totalWidth += $(this).width();
});
$('#msg').html(
"<p>totalWidth: " + totalWidth + "</p>"
);
使用实例:https://jsfiddle.net/yeeqkd2e/4/
或没有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>";
原生Javascript:https://jsfiddle.net/yeeqkd2e/6/