Element mit CSS display: none; brechen layout - Versatz verursacht

Habe ich ein Standard-Menü, das aus horizontal ausgerichtet Liste (<li>), die jeweils mit einem Symbol, Bild und text:

Element mit CSS display: none; brechen layout - Versatz verursacht

Einer der <li> enthält ein extra-Bild mit display: none; so, dass das Symbol kann ein - /ausgeschaltet werden (aus einer grünen eine rote Paprika, in diesem Beispiel.
Das problem ist, dass es nicht korrekt ausgerichtet auf einigen Browsern, wie Sie im obigen Bild. Mein Verständnis war, dass im Gegensatz zu visibilty: hidden; ein element mit display: none; sollte sich nicht auf die position eines anderen Elementes und Rendern soll, als wenn es nicht da ist?

Den Browsern, wo es nicht richtig gerendert wird, sind Google Chrome und Safari - aber nur auf MacOS(!?) und IE7 (ich weiß, ich weiß...) auf Windows. Jeder andere browser /OS-Kombination, die ich getestet habe, funktioniert einwandfrei.

Hier die HTML-Ausgabe:

<ul class="menu">
    <li><img alt="Green Pepper" src="/green.png">li</li>
    <li><img alt="Green Pepper" src="/green.png">li</li>
    <li><img alt="Green Pepper" src="/green.png">li</li>
    <li id="change">
        <img alt="Red Pepper" src="/red.png" style="display: none;">
        <img alt="Green Pepper" src="/green.png"> 
        li
    </li>
    <li><img alt="Green Pepper" src="/green.png">li</li>
</ul>

Hier die CSS:

.menu li {
    cursor: default;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10pt;
    list-style-type: none; 
    position: relative; 
    text-align:center; 
    margin: 0 0 0 -25px; 
    padding: 8px 0 0 0;
    width: 144px;
    height: 35px;
    display: inline-block;
    background-image: url(../bct-white.png);
    background-repeat: no-repeat;
    color: #0091c1;
}

Sowie für die icon-Bilder:

.menu img {
    display: inline;
    vertical-align: -25%;
    padding-right: 6px;
}

Habe ich auch schon um einen browser hack für den IE7, weil es nicht erkennen, inline-block, das kommt von einem separaten stylesheet basierend auf einer bedingten import (<!--[if lte IE 7]>):

.menu li {
    zoom: 1;
    display: inline;
}

Obwohl, natürlich, der Stil ist nicht geladen, auf Chrome und Safari, unabhängig von OS, so kann nicht die Ursache von meinem Problem auf Macs.

Ich weiß, die Schnellste Lösung wäre die Umgestaltung der HTML-und der JavaScript-manipulation der ein - /ausblenden der icons, aber ich würde wirklich gerne wissen, was dieses Problem verursacht und wie es zu lösen.


Update

Hab ich verfolgte die Ursache nach unten. Im Grunde, das element Stil display: none; auf die <img> element überschreibt die inline von der .menu img Regel. Entfernen, dann Umschalten zwischen block und inline können Sie das Problem zu reproduzieren. Das ist offensichtlich ein browser-bug, und zwar das element wird nicht angezeigt, dass ein in-line-oder block-element sollte keine Auswirkung auf das layout.


jsFiddles

Problem mit Chrome und Safari nur auf Macs

Problem mit extra CSS-Datei für IE7 nur

Hinweis! Für mich, der Fiddle-Seite nicht ordnungsgemäß geladen wurde mit IE7, aber den direkten link für die Ergebnis-iFrame http://fiddle.jshell.net/z4dU7/3/show/

Bounty update!!!

Habe ich geschrieben man fix unten, aber es tatsächlich bringt das gleiche layout problem im IE9! Bitte fühlen Sie sich frei zu entwickeln oder zu verbessern, auf meine Antwort oder kommen Sie an den Tisch mit etwas ganz anderes! 🙂

  • Ich denke, wir müssen dies in Aktion zu sehen, um der Lage sein, um Ihnen zu helfen. Ich habe eine schnelle fiddle und konnte nicht reproduzieren dieses Verhaltens — display:none entfernt das Bild aus dem layout (wie es sollte). Vielleicht #change hat einige andere Stile angewendet?
  • Diese Geige demo ist es im IE7: jsfiddle.net/z4dU7/3 Zu sehen, die Ausgabe auf dem Mac, entfernen Sie einfach die Letzte Stil-Regel (das ist gezogen aus einem IE-spezifischen Stylesheet auf meinem system).
  • Ich aktualisiert meine Frage mit links zu beiden Szenarien.
  • Das erste Beispiel sieht OK in meinem chrome/mac: imgur.com/nYgBIG0 oder bin ich etwas fehlt?
  • Möchten Sie vielleicht zu prüfen, mit hintergrund-Bilder sowieso, dass Sie nie Einfluss auf den visuellen Fluss.
  • Seltsam - das ist genau so, wie es angezeigt werden soll. Perfekt in einer Linie mit dem vorsätzlichen überlappen. Funktioniert es korrekt im Safari auch für Sie?
  • In meiner tatsächlichen Umgebung, die Menü-Tasten jeweils den gleichen hintergrund haben, aber die icons unterscheiden sich für jedes und haben einen negativen Kontrast mit dem blauen hintergrund.
  • Safari: gleiche (er sieht richtig)
  • Ich würde Zustimmen, mit David, die hintergrund-Bilder wäre die bessere Lösung. Nicht nur, dass es keine Auswirkungen auf Ihr layout, aber es ist auch semantisch richtig: Sie wollen nicht, um zu zeigen, ein Bild, sondern eine Art von Dekoration.
  • Ich Stimme David zu, setzen Sie die Bilder auf einen hintergrund ist eine bessere Lösung.
  • Erklären Sie bitte, was ist falsch mit meiner Frage?
  • Ich habe aktualisiert mein hintergrund-Bild-Methode, um stärker ähneln Weizen waren Sie für ein shooting finden Sie unter aktualisieren
  • Ihre Geige scheint rendering fein in Chrome/Safari auf OSX für mich, keine details über die browser-version?
  • Sorry hätte es schlug noch, aber ich bin faul und ich will nicht alle Lesen die Antworten.Wenn Ihr Punkt ist, der zum Umschalten der Bild , ich nehme an, es ist irgendeine Art von Aktion des Benutzers, die brennen es. Warum nicht einfach das Bild ändern des src-Attributs, sobald diese Aktion erfolgt mit javascript ? Da es keine weiteren versteckten Bild, sollte das problem verschwunden sein, habe ich Recht ?

InformationsquelleAutor Michael | 2013-07-11
Schreibe einen Kommentar