SORU
16 EKİM 2011, Pazar


Nasıl sütun önlemek elemanı içinde için mola?

Düşünün aşağıdaki HTML:

<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>

ve aşağıdaki CSS:

.x {
    -moz-column-count: 3;
    column-count: 3;
    width: 30em;
}

Bu haliyle, Firefox şu anda bu benzer şekilde aşağıdaki gibi oluşturur:

 Number one     Number three          bit longer
 Number two     Number four is a     Number five

Dördüncü maddenin ikinci ve üçüncü sütun arasındaki bölünmüş dikkat edin. Bunu nasıl engellerim?

İstenen işleme gibi bir şey daha olabilir:

 Number one     Number four is a
 Number two      bit longer
 Number three   Number five

ya

 Number one     Number three         Number five
 Number two     Number four is a
                  bit longer

Düzenleme:Genişliği sadece istenmeyen görüntüsünü göstermek için belirtilen. Tabii ki gerçek bir durumda, sabit genişlik.

CEVAP
16 EKİM 2011, Pazar


Bunu yapmak için doğru yolu break-inside CSS property ile

.x li {
    break-inside: avoid-column;
}

Ne yazık ki, hiçbir tarayıcı şu anda bunu destekler. Krom, aşağıdaki kullanma şansım oldu, ama hiçbir şey Firefox (See Bug 549114) için işe gelemedim:

.x li {
    -webkit-column-break-inside: avoid;
}

Gerekirse Firefox için geçici bir tabloda olmayan sonu içerik sarmak için ama eğer bunu önleyebilirsiniz Eğer, gerçekten korkunç gerçekten bir çözümdür.

GÜNCELLEME

Hata raporu yukarıda belirtilen göre, Firefox 20, öğenin içinde sütun sonları kaçıyor ama kod parçacığının hala listelerle çalışma gösterir değil: için bir mekanizma olarak page-break-inside: avoid destekler

.x {
    -moz-column-count: 3;
    -webkit-column-count: 3;
    column-count: 3;
    width: 30em;
}

.x ul {
    margin: 0;
}

.x li {
    -webkit-column-break-inside: avoid;
    -moz-column-break-inside:avoid;
    -moz-page-break-inside:avoid;
    page-break-inside: avoid;
    break-inside: avoid-column;
}
<div class='x'>
    <ul>
        <li>Number one, one, one, one, one</li>
        <li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
        <li>Number three</li>
    </ul>
</div>

Başkalarına söz olarak, overflow: hidden display: inline-block yapabilirsiniz ama bu kurşunların asıl soruya gösterilen kaldırır. Çözüm hedeflerinize bağlı olarak değişir.

GÜNCELLEME 2Firefox display:table display:inline-block kesilmesini engeller beri güvenilir ama non-semantik bir çözüm kendi listesinde her madde sarın ve stil kuralı orada geçerli olacaktır:

.x {
    -moz-column-count: 3;
    -webkit-column-count: 3;
    column-count: 3;
    width: 30em;
}

.x ul {
    margin: 0;
    -webkit-column-break-inside: avoid; /* Chrome, Safari */
    page-break-inside: avoid;           /* Theoretically FF 20  */
    break-inside: avoid-column;         /* IE 11 */
    display:table;                      /* Actually FF 20  */
}
<div class='x'>
    <ul>
        <li>Number one, one, one, one, one</li>
    </ul>
    <ul>
        <li>Number two, two, two, two, two, two, two, two, two, two, two, two</li>
    </ul>
    <ul>
        <li>Number three</li>
    </ul>
</div>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Css

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google

    Google

    18 EYLÜL 2005
  • SuicideSheeep

    SuicideSheee

    8 Ocak 2012
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008