Betrachten Sie den folgenden HTML-Code:
<div class='x'>
<ul>
<li>Number one</li>
<li>Number two</li>
<li>Number three</li>
<li>Number four is a bit longer</li>
<li>Number five</li>
</ul>
</div>
und das folgende CSS:
.x {
-moz-column-count: 3;
column-count: 3;
width: 30em;
}
Derzeit gibt Firefox dies ähnlich wie folgt wieder:
• Number one • Number three bit longer
• Number two • Number four is a • Number five
Beachten Sie, dass das vierte Element zwischen der zweiten und dritten Spalte aufgeteilt wurde. Wie verhindere ich das?
Das gewünschte Rendering sieht möglicherweise eher so aus:
• Number one • Number four is a
• Number two bit longer
• Number three • Number five
oder
• Number one • Number three • Number five
• Number two • Number four is a
bit longer
Bearbeiten: Die Breite wird nur angegeben, um das unerwünschte Rendern zu demonstrieren. Im realen Fall gibt es natürlich keine feste Breite.
html
css
css-multicolumn-layout
Timwi
quelle
quelle
Antworten:
Der richtige Weg, dies zu tun, ist mit der CSS-Eigenschaft zum Einbrechen :
Leider wird dies ab Oktober 2019 in Firefox nicht unterstützt, aber von jedem anderen wichtigen Browser . Mit Chrome konnte ich den obigen Code verwenden, aber für Firefox konnte nichts funktionieren ( siehe Fehler 549114 ).
Die Problemumgehung, die Sie bei Bedarf für Firefox tun können, besteht darin, Ihren nicht unterbrechenden Inhalt in eine Tabelle zu packen. Dies ist jedoch eine wirklich, wirklich schreckliche Lösung, wenn Sie dies vermeiden können.
AKTUALISIEREN
Laut dem oben erwähnten Fehlerbericht unterstützt Firefox 20+
page-break-inside: avoid
einen Mechanismus zum Vermeiden von Spaltenumbrüchen innerhalb eines Elements. Das folgende Codefragment zeigt jedoch, dass es immer noch nicht mit Listen funktioniert:Code-Snippet anzeigen
Wie andere erwähnt, können Sie tun ,
overflow: hidden
oderdisplay: inline-block
aber diese entfernt die Kugeln in der ursprünglichen Frage gezeigt. Ihre Lösung hängt von Ihren Zielen ab.UPDATE 2 Da Firefox das Aufbrechen verhindert
display:table
unddisplay:inline-block
eine zuverlässige, aber nicht semantische Lösung darin besteht, jedes Listenelement in eine eigene Liste zu packen und dort die Stilregel anzuwenden:quelle
break-inside: avoid-column
page-break-inside:avoid
sollte in FF 20 funktionieren.-webkit-column-break-inside:avoid; -moz-column-break-inside:avoid; -o-column-break-inside:avoid; -ms-column-break-inside:avoid; column-break-inside:avoid;
overflow: hidden
ist dies die bessere Option.display: inline-block;
verursacht leider neue Macken bei Chrome.Hinzufügen;
zu den untergeordneten Elementen wird verhindert, dass sie zwischen Spalten aufgeteilt werden.
quelle
display:block
Element zu umschließen . Dies wird wahrscheinlich vorerst eine solide Firefox-Problemumgehung sein.<li>
aber ich musste hinzufügenwidth:100%;
, um zu verhindern, dass sie horizontal gestapelt werden.Stellen Sie Folgendes auf den Stil des Elements ein, das Sie nicht unterbrechen möchten:
quelle
overflow:hidden
Regel kein Fix für die anderen Regeln, es ist das, was das nicht brechende Layout verursacht ...Ab Oktober 2014 scheint Break-Inside in Firefox und IE 10-11 immer noch fehlerhaft zu sein. Das Hinzufügen von Überlauf: versteckt zum Element, zusammen mit dem Einbruch: vermeiden, scheint jedoch in Firefox und IE 10-11 zu funktionieren. Ich benutze derzeit:
quelle
Firefox unterstützt dies jetzt:
Dies löst das Problem, dass Elemente über Spalten hinweg brechen.
quelle
page-break-before:
oderpage-break-after:
nichtpage-break-inside:
Die akzeptierte Antwort ist jetzt zwei Jahre alt und die Dinge scheinen sich geändert zu haben.
Dieser Artikel erklärt die Verwendung der
column-break-inside
Eigenschaft. Ich kann nicht sagen, wie oder warum sich dies unterscheidetbreak-inside
, da nur letzteres in der W3-Spezifikation dokumentiert zu sein scheint. Chrome und Firefox unterstützen jedoch Folgendes:quelle
Das funktioniert bei mir im Jahr 2015:
quelle
ul
Elementen wird auf CSS Tricks geschrieben: css-tricks.com/almanac/properties/b/break-inside und richtig scheint basierend auf caniuse Kompatibilität Hinweise: „Teilweise Unterstützung bezieht sich der nicht unterstütztbreak-before
,break-after
,break-inside
Eigenschaften WebKit- und Blink-basierte Browser bieten eine gleichwertige Unterstützung für die nicht standardmäßigen-webkit-column-break-*
Eigenschaften, um dasselbe Ergebnis zu erzielen (jedoch nur die Werteauto
undalways
). Firefoxbreak-*
unterstützt diepage-break-*
Eigenschaften nicht, unterstützt sie jedoch , um dasselbe Ergebnis zu erzielen. "Der folgende Code verhindert Spaltenumbrüche innerhalb von Elementen:
quelle
Im Jahr 2019 funktioniert dies für mich in Chrome, Firefox und Opera (nach vielen anderen erfolglosen Versuchen):
quelle
Firefox 26 scheint zu erfordern
Und Chrome 32 braucht
quelle
Ich hatte das gleiche Problem, denke ich, und fand darin eine Lösung:
Arbeiten auch in FF 38.0.5: http://jsfiddle.net/rkzj8qnv/
quelle
Eine mögliche Problemumgehung für Firefox besteht darin, die CSS-Eigenschaft "Anzeige" des Elements, in dem keine Unterbrechung auftreten soll, auf "Tabelle" zu setzen. Ich weiß nicht, ob es für das LI-Tag funktioniert (Sie werden wahrscheinlich den Listen-Item-Stil verlieren), aber es funktioniert für das P-Tag.
quelle
Ich habe gerade einige
div
s behoben , die durch Hinzufügen in die nächste Spalte aufgeteilt wurdenan das Kind
div
s.* Es wurde festgestellt, dass es nur in Firefox behoben wird!
quelle
Ich hatte das gleiche Problem bei der Verwendung von Kartenspalten
Ich habe es mit behoben
quelle
funktioniert perfekt
quelle
Ich habe die eigentliche Antwort aktualisiert.
Dies scheint auf Firefox und Chrome zu funktionieren: http://jsfiddle.net/gatsbimantico/QJeB7/1/embedded/result/
Hinweis: Die Eigenschaft float scheint das Blockverhalten zu verursachen.
quelle
Diese Antwort gilt möglicherweise nur für bestimmte Umstände. Wenn Sie eine Höhe für Ihre Elemente festlegen, wird dies durch das Spalten-Styling berücksichtigt. Dadurch wird alles, was in dieser Höhe enthalten ist, in einer Reihe gehalten.
Ich hatte eine Liste wie die op, aber sie enthielt zwei Elemente, Elemente und Schaltflächen, um auf diese Elemente zu reagieren. Ich behandelte sie wie eine Tabelle
<ul> - table
,<li> - table-row
,<div> - table-cell
setzte die UL in einem 4 - Spalten - Layout. Die Spalten wurden manchmal zwischen dem Element und seinen Schaltflächen aufgeteilt. Der Trick, den ich benutzte, bestand darin, den Div-Elementen eine Linienhöhe zu geben, um die Schaltflächen abzudecken.quelle