【发布时间】:2018-12-31 17:48:49
【问题描述】:
我有一个小工具可以尝试几个 flexbox 参数。它可以在 flexbox 容器中添加和删除 div,然后使用 jQuery 显示这些添加元素的宽度。但是测量的宽度与我在浏览器检查器中测量的不同。
使用“加号”和“减号”按钮,可以添加元素。第一个元素的宽度应该是正确的,但后面的元素测量错误。这是怎么回事?
function getWidth() {
// true: include margins
var v = parseFloat($(this).outerWidth(true)).toFixed(2);
var span = '<span>Width: ' + v + '</span>';
console.log(v);
$(this).html(span);
}
$(document).ready(function() {
// Initialize.
var items = 3;
var itemsDiv = '<div class="item">';
var HTML = '';
for (var i = 0; i < items; i++) {
HTML += itemsDiv + 'Item ' + i + '</div>';
}
$('.container').html(HTML)
var adjustment;
// Add / remove items
// Always keep at least one flex item.
$('input[name="build"]').click(function() {
adjustment = $(this).val();
if (adjustment == "plus") {
items += 1;
}
if (adjustment == "minus") {
if (items > 1) {
items -= 1;
}
}
HTML = '';
for (var i = 0; i < items; i++) {
HTML += itemsDiv + 'Item ' + i + '</div>';
}
$('.container').html(HTML);
$('.item').each(getWidth);
});
// Flex direction
// Select flex-direction radio buttons and get checked value.
$('input[name="flex-direction"]').click(function() {
var flexDirection = $('input[name="flex-direction"]:checked').val();
$('.container').css('flex-direction', flexDirection);
});
// Flex wrap
$('input[name="flex-wrap"]').click(function() {
var flexWrap = $('input[name="flex-wrap"]:checked').val();
$('.container').css('flex-wrap', flexWrap);
})
})
body {
box-sizing: border-box;
}
.container {
display: flex;
flex-direction: row;
height: 200px;
width: 400px;
border: 1px solid grey;
margin: auto;
}
div.item {
padding: 0;
/* max-width: 80px; */
height: 100px;
margin: auto;
border: 1px solid black;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="./flexbox.css">
<script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script>
<script src="flexbox.js"></script>
</head>
<body>
<div class="base">
<input type="button" name="build" value="plus" id="plus">
<input type="button" name="build" value="minus" id="minus">
<div class="container"></div>
Flex Direction
<input type="radio" name="flex-direction" id="row" value="row" checked>
<label for="row">Row</label>
<input type="radio" name="flex-direction" id="column" value="column">
<label for="column">Column</label>
<input type="radio" name="flex-direction" id="row-reverse" value="row-reverse">
<label for="row-reverse">Row-Reverse</label>
<input type="radio" name="flex-direction" id="column-reverse" value="column-reverse">
<label for="column-reverse">Column-Reverse</label>
<br />
<input type="radio" name="flex-wrap" id="nowrap" value="nowrap" checked>
<label for="nowrap">No Wrap</label>
<input type="radio" name="flex-wrap" id="wrap" value="wrap">
<label for="wrap">Wrap</label>
<input type="radio" name="flex-wrap" id="wrap-reverse" value="wrap-reverse">
<label for="wrap-reverse">Wrap-Reverse</label>
</div>
</body>
</html>
【问题讨论】:
-
您的
function getWidth()使用带有传递布尔值true的jQuerysouterWidth()。这意味着它将在其计算中包括边距。如果您删除布尔值就可以了。 -
@Paran0a 我故意添加了布尔值,因为我想要元素的总宽度(即有四个元素,它的 400px / 4 应该给每个元素 100 px)
标签: javascript jquery html css flexbox