Chrome でのみ表示される CSS 列レイアウトに関して、非常に奇妙な動作に遭遇しました。
列化されるアイテムの全体的な高さに応じて、左オフセットがシフトされ、アイテムの実際の位置を特定するのが難しくなります。レンダリングは問題ないように見えますが、要素を調べると、実際にはかなりオフセットされていることがわかります。
例を次に示します: https://jsfiddle.net/vx8h8u46/
.panel 要素を調べると、境界矩形が左から始まらないことがわかります。
ボタンをクリックして 1 つの項目を削除すると、突然境界四角形が正しくなります。
これは、パネルの高さが特定のしきい値を超えると発生するようですが、現時点では推測にすぎません。回避策はありますか?
function logOffset() {
document.getElementById("log").innerText = document.querySelector(".panel").getBoundingClientRect().left;
}
window.removeLastItem = function() {
var items = document.querySelectorAll(".item");
if (items.length) {
items[items.length - 1].remove();
logOffset();
}
}
logOffset();
* {
box-sizing: border-box;
}
.item {
display: inline-block;
width: 160px;
height: 80px;
outline: 1px solid red;
}
.container {
-moz-column-width: 320px;
column-width: 320px;
-moz-column-fill: auto;
column-fill: auto;
max-height: 160px;
width: 640px;
}
<div class="container">
<div class="panel">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<!-- Something weird happens after this -->
<div class="item">10</div>
</div>
</div>
<div>
Left offset of
<mark>panel</mark>:
<span id="log"></span>
</div>
<button onclick="removeLastItem()">
Remove last item
</button>