【发布时间】:2019-02-13 17:30:21
【问题描述】:
我有一个有趣的问题,也许有人已经遇到过,我有一个使用 display:flex 和 flex-wrap:wrap 的列表。这也很好用,我的问题是我在 li 的右侧设置了一个 li 的 onHover 图标为可见,因此 li 的宽度增加了,并且由于空间不足和包装标志,li 被移到了下方。到目前为止一切都很好,但我还在 onmouseleave 中隐藏了图标,因此空间再次减小并且 li 向后跳,所以如果你能想象的话,这一切都会变得疯狂。下面的代码重现了这个问题,至少在我的显示器和 crhome 上,悬停在最后一个 li 上。
var ul = document.getElementById("fileList");
let listItem = document.createElement("li");
listItem.setAttribute('id', "li");
listItem.textContent = "Crazy jumping";
listItem.onmouseover = function (event) {
let removeIcon = document.getElementById("remove");
removeIcon.setAttribute('class', 'removeIconVisible');
event.preventDefault();
return false;
};
listItem.onmouseleave = function () {
let idTemp = listItem.getAttribute("id");
let id = idTemp.slice(2, idTemp.length);
let removeIcon = document.getElementById("remove" + id);
removeIcon.setAttribute('class', 'removeIcon');
return false; // Prevents propagation of the event to the parents.
};
let removeButton = document.createElement('img');
removeButton.setAttribute('id', "remove");
removeButton.setAttribute('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAARElEQVR42mNgGAVUAApAfB+I/6Ph+1A5ssB/MvHgsYAugOauH7Vg1IJRC0YtIAI8IsHwR+RY4AHEj4kw/DFU7SggDwAAyTHHV/YXjncAAAAASUVORK5CYII=");
removeButton.setAttribute('class', 'removeIcon');
listItem.appendChild(removeButton);
ul.appendChild(listItem);
<!DOCTYPE html>
<html>
<head>
<style>
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
display: flex;
align-items: center;
flex-wrap: wrap;
}
li {
display: flex;
font-family: sans-serif;
background-color: gold;
float: left;
padding: 8px;
margin-right: 8px;
margin-bottom: 8px;
border-radius: 10px;
text-align: center;
align-items: center;
}
li:hover {
background-color: #FFFFFF;
}
.removeIcon {
display: none;
visibility: collapse;
}
.removeIconVisible {
display: flex;
visibility: visible;
}
</style>
</head>
<body>
<ul class="fileList" id="fileList">
<li>
<span class="text">Home</span>
</li>
<li>
<span class="text">Home2</span>
</li>
<li>
<span class="text">Home3</span>
</li>
<li>
<span class="text">Home4</span>
</li>
<li>
<span class="text">Home5</span>
</li>
<li>
<span class="text">Home6Bigger</span>
</li>
</ul>
</body>
</html>
【问题讨论】:
-
最好看到而不是想象它;)
-
如果您在示例中添加所有代码(html、js)会很有用
-
这是不可能的,因为我都是用 JS 动态构建的。
-
所以我们无法为您提供帮助..
-
您可以添加构建代码的静态副本,对吗?或者至少有一个截图来说明问题?
标签: javascript html css flexbox