Boş bir div nasıl yer kaplar


105

Bu benim 960 grid sistem durumum:

<div class="kundregister_grid_full">
    <div class="kundregister_grid_1">ID</div>
    <div class="kundregister_grid_1">Namn</div>
    <div class="kundregister_grid_1">Anv.Namn</div>
    <div class="kundregister_grid_1">Email</div>
    <div class="kundregister_grid_1">Roll</div>
    <div class="kundregister_grid_1">Aktiv</div>
</div>

Bu, tablo yapısı olarak kullanılan div setimdir.

CSS şunları söylüyor:

.kundregister_grid_1 {
    display: inline-block;
    float: left;
    margin: 0; 
    text-align: center;
}
.kundregister_grid_1 {
    width: 140px;
}

İsveççe isimlendirmeye aldırmayın. Değerleri olmasa bile div'lerin gösterilmesini istiyorum.

<div class="kundregister_grid_full">
 <div class="kundregister_grid_1">ID</div>
 <div class="kundregister_grid_1"></div>
 <div class="kundregister_grid_1"></div>
 <div class="kundregister_grid_1">Email</div>
 <div class="kundregister_grid_1">Roll</div>
 <div class="kundregister_grid_1">Aktiv</div>
</div>

Aynı şekilde, bu durumda iki sütunda 'Namn' ve 'Avn.Namn' yoktur. Ancak bunu Chrome'da çalıştırırken kaldırılırlar ve artık sıradaki diğer div'leri itmezler float:left. Dolayısıyla, yukarıdaki aynı divlerde kategorilerim varsa, değerler yanlış kategoriye yerleştirilir.

Yanıtlar:


65

kayan özelliğini kaldırırsanız çalışır. http://jsbin.com/izoca/2/edit

floats ile yalnızca bir miktar içerik varsa çalışır, örneğin &nbsp;


5
Başka bir cevap, bir minimum yükseklik koymanın, yüzdürüldüğünde çalışmasını sağlayacağını ve kesinlikle benim durumumda işe yaradığını söylüyor. Bu her zaman doğruysa (şimdi, 2016'da) o zaman bu yanıt yanlıştır. Sadece min-height: 1px ekleyebilirsiniz; genişliğe: 140px; şamandırayı kaldırmaya veya içerik eklemeye gerek kalmadan.
Nick Rice

JQuery'de element.text("&nbsp;");denendi ve &nbsp;sayfada görünüyor.
Lori

56

&nbsp;Boş öğelere eklemeyi deneyin .

<table>Yine de neden burada kullanmadığınızı anlamıyorum ? Bu tür şeyleri otomatik olarak yapacaklar.


9
Kabul. Tablo veriyse, bir tablo kullanın - bunun için bunlar.
Dan Diplo

5
Bunca zamandan sonra, insanlar hala <table>== KÖTÜ varsayıyorlar .
2014

4
&nbsp;Popüler bir çözüm olduğu kadar kullanmak , bazı senaryolarda sorunlara neden olabilir. text-decoration: line-through;Metnin üstünü çizdiğinizde ( ) olduğu gibi, kontur üzerinde görünecektir &nbsp;, oysa gerçekten istediğiniz şey yalnızca boş bir div.
Izhaki

1
@Pekka 웃, "tablo kullanmak" her zaman mümkün değildir. Genişlik kısa olduğunda yatay bir tabloyu dikey bir tabloya dönüştürdüğüm duyarlı bir tasarım için aynı sorunu yaşıyorum ("Boş bir div nasıl yer kaplar?"). Zaten tablo kullanıyorum ...
ANeves SE'nin kötü olduğunu düşünüyor

@ANeves bir tablo bu durumda her zaman genişliği doğru aralıklarla yerleştirir, yine de, hayır? Takip ettiğimden emin değilim ....
Pekka

25

@ No1cobla cevabına küçük güncelleme. Bu, dönemi gizler. Bu çözüm IE8 + 'da çalışır.

.class:after
{
    content: '.';
    visibility: hidden;
}

5
Bunu .class:after:empty
Miguel Garrido

1
@Miguel Garrido - Çalışması için .class: empty: sonra kullanmam gerekiyordu.
ikinci kişi

24

Boş kayan div'ler için basit bir çözüm eklemektir:

  • genişlik (veya minimum genişlik)
  • min-yükseklik

bu şekilde şamandıra işlevini koruyabilir ve boşken alanı doldurmaya zorlayabilirsiniz.

Bu tekniği, diğer sütunlar boş olsa bile her sütunu konumunda tutmak için sayfa düzeni sütunlarında kullanıyorum.

Misal:

.left-column
{
   width: 200px;
   min-height: 1px;
   float: left;
}

.right-column
{
    width: 500px;
    min-height: 1px;
    float: left;
}

4
min-heighten iyi çözüm
Vall3y

Minimum yükseklik yalnızca ile ilgili sorunu düzeltir width. Ancak, div'in sıfır yüksekliğe sahip olmasını engellemez. (Sorunu görmek için div arka planını ayarlamayı deneyin). Bu nedenle & nbsp; daha genel bir çözümdür. Ayrıca içerik: "." sıfır yükseklik sorununu düzeltir.
John Henckel

1
Bir min-yükseklik = 1px, 0'a eşit değildir! 1 piksel olacak, varsayılan yükseklik istiyorsanız, basitçe min-height = 100px ve min width = 100px diyebilirsiniz, div her zaman 100x100 olacaktır, hiçbir şekilde 0 olmayacaktır
Engineeroholic

Ve "& nbsp" kullanmak çok kötü bir uygulamadır, ya birçok dosya içeren büyük bir web siteniz varsa ve her dosyanın 10K html satırı varsa? Eğer yaklaşımınızı takip edersem, her dosyanın içine "& nbsp" yazacağım !! ne zaman kaybı !? ya kullanıcı tarafından oluşturulan bir içerik web siteniz varsa? örneğin bir kullanıcı boş yorum gönderiyor .. çözümünüze dayanarak yorumun boş olup olmadığını kontrol etmek için bir kod oluşturmalıyım, ardından "& nbsp" (iyi bir neden olmaksızın fazla karmaşık) eklemeliyim en iyi çözüm min-yükseklik ve min-genişliktir çünkü ileride daha fazla içerik
Engineeroholic

22

Sözde bir öğenin içine sıfır genişlikli bir boşluk karakteri eklemeniz yeterlidir

.class:after {
    content: '\200b';
}

Oooh, bu fikri beğeniyorum çünkü kullanıcının yanlışlıkla kopyalayıp yapıştırmayacağı anlamına geliyor, sözde öğeler varsayılan olarak seçilemiyor.
Domino

3

Bu tek yol:

.your-selector:empty::after {
    content: ".";
    visibility: hidden;
}

1
Ben tavsiye content: "\200b";bir için sıfır genişlik alanı . Ek avantaj, tarayıcının bu karakteri seçmemesidir (örneğin CTRL+A CTRL+C, yine aynı şekilde davranacaktır).
yyny

3

Yapabilirsin:

o Şuna ayarlayın .kundregister_grid_1:

  • width(veya width-min) ile height(veya min-height)
  • veya padding-top
  • veya padding-bottom
  • veya border-top
  • veya border-bottom

O ya da kullanım sözde elemanları : ::beforeya ::aftersahip:

  • {content: "\200B";}
  • veya {content: "."; visibility: hidden;}.

o Veya &nbsp;boş öğenin içine koyun , ancak bu bazen beklenmedik etkiler yaratabilir, örn. ile bütünlüğündetext-decoration: underline;


2

Neden css sınıfınıza sadece "min-genişlik" eklemiyorsunuz?



1

Satır içi bloğu kullanarak, satır içi bir nesne olarak davranacaktır. bu yüzden onları tek bir hatta yan yana getirmek için kayan nokta gerekmez. Ve gerçekten de Rito'nun dediği gibi, şamandıraların boyutlara ihtiyaç duydukları gibi bir "vücuda" ihtiyacı vardır.

Pekka'ya masa kullanımı konusunda tamamen katılıyorum. Div'leri kullanarak düzenler oluşturan herkes bir rahatsızlık gibi tablolardan kaçınır. Ancak bunları tablo verileri için kullanın! Onlar bunun için var. Ve senin durumunda onlara ihtiyacın olduğunu düşünüyorum :)

AMA gerçekten istediğini gerçekten istiyorsan. Bir css hack yolu var. Float hack ile aynı.

.kundregister_grid_1:after {  content: ".";  }

Bunu ekleyin ve siz de ayarlayın: D (Not: IE'de çalışmıyor, ancak bu düzeltilebilir)


1

Yüzdürülmeleri gerekiyorsa, her zaman minimum yüksekliği 1 piksel olarak ayarlayabilirsiniz, böylece daralmazlar.


0

Özel bir düzen etiketi kümesi oluştururken, bu soruna başka bir yanıt buldum. Burada özel etiket kümesi ve bunların CSS sınıfları sağlanır.

HTML

<layout-table>
   <layout-header> 
       <layout-column> 1 a</layout-column>
       <layout-column>  </layout-column>
       <layout-column> 3 </layout-column>
       <layout-column> 4 </layout-column>
   </layout-header>

   <layout-row> 
       <layout-column> a </layout-column>
       <layout-column> a 1</layout-column>
       <layout-column> a </layout-column>
       <layout-column> a </layout-column>
   </layout-row>

   <layout-footer> 
       <layout-column> 1 </layout-column>
       <layout-column>  </layout-column>
       <layout-column> 3 b</layout-column>
       <layout-column> 4 </layout-column>
   </layout-footer>
</layout-table>

CSS

layout-table
{
    display : table;
    clear : both;
    table-layout : fixed;
    width : 100%;
}

layout-table:unresolved
{
    color : red;
    border: 1px blue solid;
    empty-cells : show;
}

layout-header, layout-footer, layout-row 
{
    display : table-row;
    clear : both;   
    empty-cells : show;
    width : 100%;
}

layout-column 
{ 
    display : table-column;
    float : left;
    width : 25%;
    min-width : 25%;
    empty-cells : show;
    box-sizing: border-box;
    /* border: 1px solid white; */
    padding : 1px 1px 1px 1px;
}

layout-row:nth-child(even)
{ 
    background-color : lightblue;
}

layout-row:hover 
{ background-color: #f5f5f5 }

Buradaki anahtar Kutu Boyutlandırma ve Dolgu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.