빈 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'이 없습니다. 그러나 이것을 크롬에서 실행할 때 제거되고 더 이상 다른 div를 순서대로 푸시하지 않습니다 float:left. 따라서 위의 동일한 div에 카테고리가 있으면 값이 잘못된 카테고리에 배치됩니다.

답변:


64

플로팅을 제거하면 작동합니다. http://jsbin.com/izoca/2/edit

예를 들어 일부 콘텐츠가있는 경우에만 작동합니다. &nbsp;


5
또 다른 대답은 min-height를 넣으면 떠있을 때 작동하고 확실히 작동했던 내 경우에도 작동한다고 말합니다. 그것이 항상 사실이라면 (현재, 2016 년)이 대답은 잘못된 것입니다. min-height : 1px 만 추가 할 수 있습니다. 너비 : 140px; 플로트를 제거하거나 콘텐츠를 추가 할 필요가 없습니다.
Nick Rice

element.text("&nbsp;");jQuery에서 시도 &nbsp;하고 페이지에 나타납니다.
Lori

54

&nbsp;빈 항목에 추가해보십시오 .

그래도 왜 <table>여기를 사용하지 않는지 이해할 수 없습니까? 그들은 이런 종류의 일을 자동으로 할 것입니다.


9
동의합니다. 표 형식의 데이터 인 경우 표를 사용하십시오.
Dan Diplo

5
이 모든 시간이 지나도 사람들은 여전히 <table>== 나쁘다고 생각 합니다.
saluce 2014-04-15

4
를 그대로 사용하면 &nbsp;일부 시나리오에서 문제가 발생할 수 있습니다. 취소 text-decoration: line-through;선 ( ) 텍스트 와 마찬가지로 획은 위에 표시 &nbsp;되지만 실제로 원하는 것은 빈 div입니다.
Izhaki

1
@Pekka 웃, "테이블 사용"이 항상 가능한 것은 아닙니다. 너비가 짧을 때 가로 테이블을 세로 테이블로 만드는 반응 형 디자인의 경우 이와 동일한 문제 ( "빈 div를 만드는 방법")가 있습니다. 나는 이미 ... 테이블을 사용하고
ANeves

@ANeves이 경우 테이블은 항상 너비를 올바르게 배치합니다. 확실하지 나는 .... 따라
페카

25

@ no1cobla 답변에 대한 약간의 업데이트. 이것은 기간을 숨 깁니다. 이 솔루션은 IE8 +에서 작동합니다.

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

5
당신이 일을 대체로 사용하려면 요소를 단지 때와 같은 빈 추가 뭔가 :.class:after:empty
미구엘 가리

1
@Miguel Garrido-작동하려면 .class : empty : after를 사용해야했습니다.
인칭

24

부동 div에 대한 간단한 해결책 은 다음을 추가하는 것입니다.

  • 너비 (또는 최소 너비)
  • 최소 높이

이렇게하면 float 기능을 유지하고 비어있을 때 강제로 공간을 채울 수 있습니다.

페이지 레이아웃 열에서이 기술을 사용하여 다른 열이 비어 있어도 모든 열을 해당 위치에 유지합니다.

예:

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

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

4
min-height있는 최적의 솔루션
Vall3y

최소 - 높이 의 문제를 해결 width. 그러나 div의 높이가 0 인 것을 막지는 않습니다. (문제를 보려면 div 배경을 설정하십시오). 따라서 & nbsp; 보다 일반적인 솔루션입니다. 또한 내용 : "." 제로 높이 문제를 해결합니다.
John Henckel

1
min-height = 1px는 0이 아닙니다! 당신이 기본 높이가 단순히 분 - 높이 = 100 픽셀 및 최소 폭 = 100 픽셀, 사업부는 항상 0입니다 방법 100 × 100 수 없습니다 말할 수 원하는 경우는, 1 개 픽셀 것
Engineeroholic

"& nbsp"를 사용하는 것은 매우 나쁜 습관입니다. 많은 파일이있는 큰 웹 사이트가 있고 각 파일에 10K html 줄이있는 경우 어떻게해야합니까? 내가 당신의 접근 방식을 따를 경우 모든 파일에 "& nbsp"를 넣을 것입니다 !! 시간 낭비!? 사용자 제작 콘텐츠 웹 사이트가 있다면 어떨까요? 예를 들어 사용자가 빈 주석을 제출합니다 .. 귀하의 솔루션을 기반으로 주석이 비어 있는지 확인하는 코드를 작성한 다음 "& nbsp"(합당한 이유없이 복잡함)를 추가해야합니다. min-height 및 min-width가 최상의 솔루션입니다. 나는 미래에 더 많은 콘텐츠를 추가 할 경우에도 다시 한 번 못해 걱정이 약을 쓰기 때문에
Engineeroholic

22

의사 요소 안에 너비가 0 인 공백 문자를 추가하기 만하면됩니다.

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

우,이 아이디어는 사용자가 실수로 복사하여 붙여 넣지 않고 기본적으로 의사 요소를 선택할 수 없다는 것을 의미하므로이 아이디어가 마음에 듭니다.
도미노

3

이것은 한 가지 방법입니다.

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

1
너비content: "\200b";0 인 공간을 권장 합니다 . 추가 이점은 브라우저가이 문자를 선택하지 않는다는 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

인라인 블록을 사용하면 인라인 객체로 작동합니다. 그래서 한 줄에서 서로 옆에 두는 데 수레가 필요하지 않습니다. 그리고 실제로 Rito가 말했듯이 수레는 치수가 필요한 것처럼 "몸체"가 필요합니다.

나는 테이블 사용에 대해 Pekka와 전적으로 동의합니다. div의 회피 테이블을 사용하여 레이아웃을 구축하는 모든 사람은 마치 끔찍한 일입니다. 그러나 표 형식 데이터에 사용하십시오! 그것이 그들이 원하는 것입니다. 그리고 귀하의 경우에는 당신이 필요하다고 생각합니다 :)

하지만 정말로 원하는 것을 원한다면. CSS 해킹 방법이 있습니다. 플로트 해킹과 동일합니다.

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

여기서 핵심은 상자 크기 및 패딩입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.