2016-05-05 11 views
3

Ich habe eine <td>, die eine <div> enthält, wo die div ist absolut positioniert. Die <td> wird dann auf 0 gesetzt, indem die Höhe height, line-height, border, and padding-top/padding-bottom CSS-Eigenschaften auf 0.Absolute Position Div verhindert, dass td auf 0 Höhe in Firefox

Das Ergebnis, wenn es mit einer Reihe von anderen Elementen und Javascript kombiniert, die keinen Einfluss auf die Ausgabe aufweisen, ist eine Kopfzeile, die gut schweben über der Tabelle, während sie korrekt mit den Tabellenspalten ausgerichtet bleibt.

Dies funktioniert in jedem Browser und Betriebssystem, mit dem ich testen konnte (Safari, Chrome, IE unter Windows und Mac), außer Firefox. In Firefox die <tr> enthält die 0 Höhe <td> in Frage ist als 4 Pixel hoch - aber nur, wenn die <div> innen ein position Attribut von absolute oder fixed hat. Wenn ich beispielsweise position von relative verwende, wird die Zeile korrekt auf 0px high reduziert. Natürlich brauche ich eine Position von absolute auf dem Div, um alles andere zu arbeiten.

Wie kann ich auch Firefox erhalten, um die <tr>/<td> richtig zu reduzieren?

html:

<table id="zeroHeight"> 
    <tr> 
     <td> 
      Some Content that should disappear 
      <div>Content that should have no background</div> 
     </td> 
    </tr> 
</table> 

CSS:

#zeroHeight tr{ 
    background-color:lightblue; 
} 

#zeroHeight tr td{ 
    height:0px; 
    padding-top:0px; 
    padding-bottom:0px; 
    line-height:0px; 
    border:0px; 
    color:transparent; 
    white-space: nowrap; 
} 

#zeroHeight td div{ 
    position:absolute; 
    color:black; 
} 

HINWEIS: Das Problem hier ist nicht mit der Positionierung des absoluten DIV. Das funktioniert gut, deshalb habe ich im Beispiel keine Positionierung berücksichtigt. Das Problem ist, dass die <TD>/<TR> nicht richtig auf Null Höhe nicht kollabiert nach unten, wie durch die sichtbare Hintergrundfarbe zu dem <tr>

EDIT angewandt angezeigt: Das Problem hier ist die Nicht-Null Höhe des td/tr, nicht sichtbar Hintergrundfarbe. Die Hintergrundfarbe in der Zeile ist einfach eine einfache Möglichkeit, das Problem sichtbar zu machen.

+0

Haben Sie versucht, die Marge auf 0 und Einstellung? Es könnte auch mit bestimmten Anzeigeinterpretationen mit Leerraum zu tun haben (wie es bei Inline-Block-Elementen der Fall ist). Siehe https://css-tricks.com/fighting-the-space-between-inline-block-elements/ – smrubin

+0

Auch könnte relevant sein: https://davidwalsh.name/table-cell-position-absolute – smrubin

+0

Sie könnten einstellen 'font-size: 0' auf dem' td', aber Sie müssten dann explizit eine Schriftgröße auf dem 'div' setzen: https://jsfiddle.net/enpoe4yd/ –

Antwort

1

Ich würde tr und td so nicht stylen. Warum wickelst du den unsichtbaren Inhalt nicht in ein extra Div und versteckst das?

HTML:

<table id="zeroHeight"> 
    <tr> 
     <td> 
      <div class="invisible">Some Content that should disappear</div> 
      <div class="visible">Content that should have no background</div> 
     </td> 
    </tr> 
</table> 

CSS:

#zeroHeight tr td div.invisible{ 
    background-color:lightblue; 
} 

#zeroHeight tr td div.invisible { 
    height:0px; 
    padding-top:0px; 
    padding-bottom:0px; 
    line-height:0px; 
    border:0px; 
    color:transparent; 
    white-space: nowrap; 
} 

#zeroHeight td div.visible{ 
    position:absolute; 
    color:black; 
} 

Siehe hier: https://jsfiddle.net/2j2s9jys/1/

+0

Das verbirgt das Problem (durch Verschieben des Hintergrunds Farbe zu einem div, das tatsächlich mit Nullhöhe endet, wie es sollte), aber es nicht beheben: das 'td' /' tr' hat immer noch eine Höhe ungleich Null aufgrund des absolut positionierten divins innen (siehe https://jsfiddle.net/2j2s9jys/2/). Das Beispiel, das ich gab, wurde entworfen, um das Problem hervorzuheben und nicht 100% ig genau zu sein. Das heißt, interessanterweise reduziert Ihre Lösung die Höhe des 'td' /' tr' auf 2px statt auf 4 (anscheinend ist mehr Test in Ordnung), also ist es immer noch eine Verbesserung. – ibrewster

+0

Oh, warte: Sieht so aus, als ob das funktionieren würde - ich brauchte nur 'line-height: 0px;' und 'padding: 0px;' für den td selbst und violà: das 'td' /' tr' verschwindet (https://jsfiddle.net/2j2s9jys/3/)! Ich denke, das sollte es tun. Ich muss noch testen, um sicherzustellen, dass die Tabellengröße korrekt den Inhalt des "unsichtbaren" div respektiert, aber es sieht vielversprechend aus. Vielen Dank! – ibrewster

Verwandte Themen