我一直在爲導航欄採用flexbox佈局,並且我注意到Internet Explorer 11中有一種奇怪的行爲。在Chrome,FF或Edge中不會發生。我做了一個小提琴證明:IE11 flexbox:影響佈局的不透明度
https://jsfiddle.net/6L06251k/
以下是小提琴的代碼的進一步精簡版:
HTML
<form>
<ul>
<li>
<button>Menu item</button>
<ul id="submenu"><li><button>Submenu item</button></li></ul>
</li>
</ul>
</form>
CSS
form {
display: flex;
flex-flow: column;
}
button {
display: inline-block;
}
#submenu {
display: inline-block;
position: absolute;
opacity: 0.5;
}
li:hover #submenu {
opacity: 1; /* RULE A */
}
button:focus + #submenu {
opacity: 1; /* RULE B */
}
問題是,當我將鼠標懸停在外部菜單<ul>
上,觸發規則A並將子菜單的opacity
從0.5更改爲1時,外部菜單的高度增加了幾個像素。如果懸停規則將不透明度設置爲0.999,則不會發生這種情況。我不明白爲什麼元素的不透明度會影響其佈局,也不知道爲什麼只有在不透明度變爲1時纔會發生,而不是0.999!另外,如果我使用規則B改變子菜單的不透明度,通過標籤將焦點集中在外部<button>
上,即使應用完全相同的樣式,外部菜單中的高度更改也不會發生。
對於小提琴,我可以通過使用0.999的opacity
來解決此問題,但此解決方案對於我遇到此問題的實際項目不起作用。要說明原因並不容易,所以我希望通過理解這個怪癖的基本機制,我可以找出其他的東西。
很好,謝謝 - 這是在[小提琴](https://jsfiddle.net/9roq5yj7工作/),並在我的主要項目。你有任何關於爲什麼發生這種情況的信息或資源?我猜這不是在現代瀏覽器中不會發生的事情?對我來說,這只是一種非常奇怪的混濁行爲,它受到_which_ selector觸發CSS變化的影響的方式特別奇怪。 –
@ JosephO'Donnell很棒,沒問題。很高興可以幫助。內聯塊的問題是你的div之間的空白在屏幕上變得可見。因爲這是內聯塊的行爲方式,所以它實際上並不關乎你的瀏覽器的現代化程度。其他瀏覽器正確顯示它真的很有趣。有時你甚至不會注意到空白,但在你的情況下,你注意到了它,因爲懸停時導航高度的變化。後來,如果你不想處理這些空白問題,你可以簡單地用flex做所有事情。 – SvenL
David Walsh寫了一篇關於這個話題的文章(https://davidwalsh.name/remove-whitespace-inline-block),甚至指出了更多解決空白問題的方法,但我認爲在你的情況下字體大小的方法是最好的。 – SvenL