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

同様に、この場合、2つの列に「Namn」と「Avn.Namn」はありません。ただし、これをChromeで実行すると、それらは削除され、順序で他のdivをプッシュしなくなりfloat:leftます。したがって、上記の同じdivにカテゴリがある場合、値は間違ったカテゴリに配置されます。

回答:


64

フローティングを外せば動作します。http://jsbin.com/izoca/2/edit

フロートでは、いくつかのコンテンツがある場合にのみ機能します。 &nbsp;


5
別の答えは、最小の高さを入力すると、浮いたときにそれが機能するようになる、そして確かに私自身の場合には機能したということです。それが常に当てはまる場合(現在、2016年)、この答えは間違っています。min-height:1px;を追加するだけです。幅:140px; フロートを削除したり、コンテンツを追加したりする必要はありません。
Nick Rice

element.text("&nbsp;");jQueryで試し&nbsp;て、ページに表示されます。
ロリ

54

&nbsp;空のアイテムに追加してみてください。

なぜ<table>ここを使わないのか分かりませんか?彼らはこの種のものを自動的に行います。


9
同意した。表形式のデータの場合は、表を使用してください-そのためです。
Dan Diplo

5
結局のところ、人々はまだ<table>==悪いと思います。
ソース14

4
&nbsp;一般的な解決策であるを使用すると、一部のシナリオで問題が発生する可能性があります。text-decoration: line-through;テキストを取り消し線()にするとストロークが表示され&nbsp;ますが、実際に必要なのは空白のdivだけです。
Izhaki 2015年

1
@Pekka웃、「テーブルを使用する」ことが常に可能であるとは限りません。幅が短い場合に横のテーブルを縦のテーブルにするレスポンシブデザインでも、同じ問題(「空のdivを作成する方法」)があります。私はすでにテーブルを使用しています...
ANeves 2016年

この場合、@ ANevesテーブルは常に幅のスペースを正しく配置しますが、違いますか?よくわからない....
Pekka

25

@ no1coblaの回答を少し更新。これは期間を隠します。このソリューションはIE8 +で動作します。

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

5
:あなたは要素のような空の追加何かあるときだけで仕事へのフォールバックとしてこれを使用したい場合は.class:after:empty
ミゲル・ガリード

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

min-height 、の問題のみを修正しwidthます。ただし、divの高さがゼロになるのを防ぐことはできません。(問題を確認するには、divの背景を設定してみてください)。したがって&nbsp; より一般的なソリューションです。また、コンテンツ:「。」高さゼロの問題を修正しました。
John Henckel

1
min-height = 1pxは0ではありません!それはあなたがデフォルトの高さをしたい場合は、単に最小高さ= 100pxに言うと最小幅= 100pxにすることができ、div要素は常にそれが0になります100x100の手立てもないだろう、1つのピクセルになります
Engineeroholic

また、「&nbsp」を使用することは非常に悪い習慣です。多くのファイルを含む大きなWebサイトがあり、各ファイルに10Kのhtml行がある場合はどうなりますか?私があなたのアプローチに従うなら、私はすべてのファイルのそれぞれの中に「&nbsp」を入れてしまいます!! なんと時間の無駄!ユーザーが作成したコンテンツのウェブサイトがある場合はどうなりますか?たとえば、ユーザーが空のコメントを送信する..ソリューションに基づいて、コメントが空かどうかを確認するコードを作成し、「&nbsp」を追加する必要があります(正当な理由なしに複雑すぎます)min-heightとmin-widthが最良のソリューションです私は一度それを書いて、将来さらにコンテンツを追加したとしても、それについて心配することはないからです
Engineeroholic

22

疑似要素内に幅0のスペース文字を追加するだけです

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

ああ、ユーザーが誤ってコピーアンドペーストしないことを意味するので、このアイデアが気に入っています。疑似要素はデフォルトでは選択できません。
ドミノ

3

これは1つの方法です。

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


2

cssクラスに「min-width」を追加しないのはなぜですか?



1

インラインブロックを使用すると、インラインオブジェクトとして動作します。したがって、フロートを1行に並べて配置する必要はありません。実際、Ritoが言ったように、フロートには寸法が必要なように「本体」が必要です。

テーブルの使用についてPekkaに完全に同意します。divを使用してレイアウトを作成するすべての人は、病気のようなテーブルを避けます。しかし、それらを表データに使用してください!それが彼らの狙いです。そしてあなたの場合、私はあなたがそれらを必要とすると思います:)

しかし、本当に欲しいものが本当に欲しいなら。CSSハック方法があります。フロートハックと同じです。

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

それを追加すると、:Dも設定されます(注:IEでは機能しませんが、修正可能です)。


1

フロートさせる必要がある場合は、min-heightを常に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 }

ここで重要なのは、ボックスのサイズとパディングです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.