Ich habe ein Flexbox-Layout für eine Navigationsleiste verwendet, und ich habe ein seltsames Verhalten in Internet Explorer 11 bemerkt. Nicht in Chrome, FF oder Edge passieren. Ich habe eine Geige gemacht zu demonstrieren:IE11 flexbox: Opazität beeinflusst Layout
https://jsfiddle.net/6L06251k/
Es folgt eine weitere abgespeckte Version des Codes Geige:
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 */
}
Das Problem ist, dass, wenn ich über das äußere Menü <ul>
schwinge, REGEL A auslöst und das opacity
des Untermenüs von 0,5 auf 1 ändert, erhöht sich die Höhe des äußeren Menüs um einige Pixel. Dies geschieht nicht, wenn die Hover-Regel die Deckkraft auf beispielsweise 0,999 festlegt. Ich verstehe nicht, warum die Deckkraft eines Elements sein Layout beeinflussen sollte und warum dies nicht nur passieren sollte, wenn die Deckkraft 1 wird, aber nicht 0.999!
Wenn ich stattdessen die Deckkraft des Untermenüs mit REGEL B ändere, indem ich den Fokus auf die äußere <button>
setze, tritt die Höhenänderung im äußeren Menü nicht auf, obwohl der exakt gleiche Stil angewendet wird.
Für die Geige, konnte ich dies lösen, indem Sie einfach eine opacity
von 0,999, aber diese Lösung funktioniert nicht für das eigentliche Projekt, in dem ich dieses Problem aufgetreten ist. Es ist nicht leicht zu sagen, warum, also hoffe ich, dass ich durch das Verständnis des zugrundeliegenden Mechanismus dieser Eigenart etwas anderes herausfinden kann.
Großen Dank aussehen - das in [die Geige] (https://jsfiddle.net/9roq5yj7 gearbeitet hat /) und in meinem Hauptprojekt. Haben Sie Informationen oder Ressourcen darüber, warum dies geschah? Ich nehme an, dass dies in modernen Browsern nicht passieren würde. Es ist nur ein sehr seltsames Verhalten für die Opazität, für mich, und die Art und Weise, in der es von _which_ selector beeinflusst wurde, die Änderung der CSS auszulösen, war besonders merkwürdig. –
@ JosephO'Donnell Großartig, kein Problem. Froh hätte helfen können. Das Problem mit Inline-Block ist, dass das Leerzeichen zwischen Ihren divs auf dem Bildschirm sichtbar wird. Weil sich Inline-Block so verhält, ist es eigentlich egal, wie modern Ihr Browser ist. Es ist wirklich interessant, dass die anderen Browser es korrekt angezeigt haben. Manchmal werden Sie das Leerzeichen gar nicht bemerken, aber in Ihrem Fall haben Sie es aufgrund der Änderung der Navigationshöhe beim Hover bemerkt. Später, wenn Sie nicht mit diesen Whitespace-Problemen umgehen wollen, können Sie einfach alles mit flex machen. – SvenL
David Walsh schrieb einen [Artikel] (https://davidwalsh.name/remove-whitespace-inline-block) über dieses Thema und wies sogar noch mehr Wege auf, wie man das Whitespace Problem lösen könnte, aber ich denke in deinem Fall die Schriftart -size-Methode ist das Beste. – SvenL