如何使一个空的div占用空间


104

这是我的960网格系统案例:

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

这是我的一组div,用作表结构。

CSS表示以下内容:

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

不要介意瑞典语的命名。我希望div显示,即使它们没有值。

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

像这样,在这种情况下,两列中都没有“ Namn”和“ Avn.Namn”。但是,当在chrome中运行时,它们将被移除,并且不再按顺序推动其他div float:left。因此,如果我在上述相同的div中具有类别,则值将置于错误的类别下。

Answers:


64

如果您删除浮动功能,它将起作用。http://jsbin.com/izoca/2/edit

使用浮点数时,仅当存在某些内容时才有效,例如 &nbsp;


5
另一个答案是说,最小高度可以使它在浮动时起作用,在我自己的情况下肯定可以起作用。如果这始终是正确的(现在是2016年),那么这个答案是错误的。您可以只添加min-height:1px; 到宽度:140px;无需删除浮动元素或添加内容。
尼克·赖斯

element.text("&nbsp;");在jQuery中尝试过并&nbsp;出现在页面上。
罗里

54

尝试添加&nbsp;到空项目。

不过,我不明白为什么您不使用<table>这里?他们将自动执行此类操作。


9
同意 如果是表格数据,请使用表格-这就是它们的用途。
Dan Diplo 2010年

5
在所有这些时间之后,人们仍然认为<table>==不好。
2014年

4
&nbsp;在某些情况下,使用流行的解决方案可能会引起问题。就像您删除(text-decoration: line-through;)文本时,笔划将显示&nbsp;,而您真正想要的只是一个空白的div。
Izhaki

1
@Pekka웃,并非总是可以“使用表”。对于响应式设计,我也遇到同样的问题(“如何使空的div占用空间”),在宽度短的情况下,我将水平表转换为垂直表。我已经在使用表格...
ANeves '16

@ANeves在这种情况下,表格将始终正确地间隔宽度,但是,不是吗?不确定我会遵循
...。– Pekka

25

稍微更新为@ no1cobla答案。这隐藏了期间。此解决方案在IE8 +中有效。

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

5
如果要在元素为空时使用它作为后备工作,请添加以下内容:.class:after:empty
Miguel Garrido

1
@Miguel Garrido-我必须使用.class:empty:after才能起作用。
第二人称

24

浮动 div的简单解决方案是添加:

  • 宽度(或最小宽度)
  • 最小高度

这样,您可以保留浮动功能,并在空时强制其填充空间。

我在页面布局列中使用此技术,即使其他列为空,也可以将每一列保持在其位置。

例:

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

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

4
min-height是最好的解决方案
Vall3y

最小高度只能通过解决此问题width。但是,这不会阻止div的高度为零。(尝试设置div背景以查看问题)。因此&nbsp; 是更通用的解决方案。内容也:“。” 解决了零高度问题。
约翰·亨克尔

1
最小高度= 1px不等于0!它将是1 px,如果您想使用默认高度,则可以简单地说:min-height = 100px和min width = 100px,div始终为100x100,它不会是0
Engineeroholic

并且使用“&nbsp”是非常不好的做法,如果您的网站很大,文件很多,每个文件都有10K html行,该怎么办?如果我能遵循您的方法,我最终将在每个文件的每个文件中都放入“&nbsp”!多么浪费时间!?如果您有一个用户生成的内容网站怎么办?例如,一个用户提交空评论..根据您的解决方案,我必须构建一个代码来检查评论是否为空,然后添加“&nbsp”(由于没有充分的理由而过于复杂)是最好的解决方案因为即使以后再添加更多内容,我也只会写一次而不会再担心它
Engineeroholic

22

只需在伪元素内添加零宽度空格字符

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

噢,我喜欢这个主意,因为它意味着用户不会意外地将其粘贴-粘贴,默认情况下无法选择伪元素。
多米诺骨牌

3

这是一种方法:

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

1
我建议content: "\200b";使用零宽度的空间。另一个优点是浏览器不会选择此字符(例如,CTRL+A CTRL+C仍然会表现相同)。
yyny

3

您可以:

o设置.kundregister_grid_1为:

  • width(或width-min)与height(或min-height
  • 要么 padding-top
  • 要么 padding-bottom
  • 要么 border-top
  • 要么 border-bottom

o或使用伪元素::before::after使用:

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

o或放入&nbsp;空元素内,但这有时会带来意想不到的效果,例如。与...结合text-decoration: underline;




1

使用inline-block时,它将充当嵌入式对象。因此不需要浮子就可以使它们在一行上彼此相邻。确实正如Rito所说,浮子需要一个“主体”,就像它们需要尺寸一样。

我完全同意Pekka关于使用表格的观点。每个使用div的回避表来构建布局的人都觉得这很麻烦。但是将它们用于表格数据!这就是他们的目的。在您的情况下,我认为您需要它们:)

但是,如果您真的很想要您想要的东西。有一种CSS破解方式。与浮动hack相同。

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

加上那个,你也设置了:D(注意:在IE中不起作用,但是可以修复)


1

如果需要浮动它们,则始终可以将最小高度设置为1px,这样它们就不会崩溃。


0

在构建一组自定义的布局标签时,我找到了这个问题的另一个答案。这里提供了自定义的标记集及其CSS类。

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

这里的关键是Box-Sizing和Padding。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.