Ich bin kürzlich auf eine Frage gestoßen, bei der jemand versucht hat, ein korrektes Zeilenumbruchverhalten auf seinen Headern zu bekommen. Etwas wie folgt aus:Seltsames Verhalten auf Tabelle und Tabellenzelle mit prozentualer Breite
Ihre Umsetzung ergab unterschiedliche Ergebnisse für unterschiedliche Kopf- und damit die Frage. Die Implementierung war ziemlich merkwürdig, indem table
für das Element und table-cell
für die :before
und :after
verwendet wurde. Das resultierende Verhalten war für mich ziemlich überraschend. Ich habe einen Test gemacht auf jsfiddle, schauen Sie.
Sie werden sehen, dass ich zwei Klassen habe; a
und b
, wobei ersterer eine Breite von 25% und letzterer von 40% aufweist. Trotzdem ist der b
fast 5 mal breiter als a
. Wenn sie auf 40% bzw. 45% gesetzt werden, ist b
doppelt so groß wie a
. Dies ist ein völlig unerwartetes Verhalten für nur 5% Unterschied. Die Länge des Textes scheint dies ebenfalls zu beeinflussen.
Ich bekomme, dass diese Implementierung schlecht ist und dass es "brechen" würde. Allerdings würde ich gerne wissen, warum es bricht so wie es tut. Das ergibt für mich keinen Sinn.
div {
display: table;
background: grey;
margin: 10px 0;
}
div:before,
div:after {
width: 25%;
position: relative;
content: '';
border-top: 2px solid black;
display: table-cell;
}
div.b:before,
div.b:after {
width: 45%;
}
<div class="a">text</div>
<div class="a">some more text</div>
<div class="b">text</div>
<div class="b">some more text</div>
Das ist ziemlich interessant. Die Änderung von '40%' zu '45%' bedeutet also im Wesentlichen, dass die 'textwidth' von '20%' der Tabellenbreite auf '10%' geändert wurde. Das erklärt die Verdopplung der Tabellenbreite. Hast du irgendwelche Ressourcen, die ich studieren kann? Vielen Dank. – Chris
@Chris Sie können einen nicht-normativen Algorithmus für das automatische Tabellenlayout sehen, der in [CSS2.1] vorgeschlagen wird (https://www.w3.org/TR/CSS21/tables.html#auto-table-layout). Vor kurzem gab es einige Arbeiten in [CSS Tables 3] (https://drafts.csswg.org/css-tables-3/), aber es ist immer noch ein Entwurf, und ich bin mir nicht sicher, ob es zeigt, was Implementierungen tun. – Oriol