Cách tạo một div trống chiếm không gian


104

Đây là trường hợp hệ thống lưới 960 của tôi:

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

Đây là tập hợp các div của tôi, được sử dụng làm cấu trúc bảng.

CSS cho biết như sau:

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

Đừng bận tâm đến cái tên Thụy Điển. Tôi muốn các div hiển thị ngay cả khi chúng không có giá trị.

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

Như vậy, trong trường hợp này không có 'Namn' và 'Avn.Namn' trong hai cột. Tuy nhiên, khi chạy điều này trong chrome, chúng bị xóa và không còn đẩy các div khác theo thứ tự float:left. Vì vậy, nếu tôi có các danh mục trong cùng div ở trên, thì các giá trị sẽ được đặt dưới danh mục sai.

Câu trả lời:


64

nó hoạt động nếu bạn loại bỏ trôi nổi. http://jsbin.com/izoca/2/edit

với float nó chỉ hoạt động nếu có một số nội dung, ví dụ: &nbsp;


5
Một câu trả lời khác nói rằng đặt một chiều cao tối thiểu sẽ làm cho nó hoạt động khi được thả nổi, và chắc chắn trong trường hợp của tôi, điều đó đã hoạt động. Nếu điều đó luôn đúng (hiện tại, vào năm 2016) thì câu trả lời này là sai. Bạn chỉ có thể thêm min-height: 1px; chiều rộng: 140px; mà không cần phải xóa float hoặc thêm nội dung.
Nick Rice

Đã thử element.text("&nbsp;");trong jQuery và &nbsp;xuất hiện trên trang.
Lori

54

Hãy thử thêm &nbsp;vào các mục trống.

Tôi không hiểu tại sao bạn không sử dụng <table>ở đây? Họ sẽ tự động làm những việc này.


9
Đã đồng ý. Nếu đó là dữ liệu dạng bảng, hãy sử dụng bảng - đó là mục đích của chúng.
Dan Diplo

5
Sau ngần ấy thời gian, mọi người vẫn cho rằng <table>== BAD.
hạ cánh

4
Việc sử dụng &nbsp;, giải pháp phổ biến như hiện nay, có thể gây ra sự cố trong một số trường hợp. Giống như khi bạn gạch đầu dòng ( text-decoration: line-through;) văn bản, nét sẽ hiển thị trên &nbsp;, trong khi những gì bạn thực sự muốn chỉ là một div trống.
Izhaki

1
@Pekka 웃, không phải lúc nào cũng có thể "sử dụng bảng". Tôi có cùng một vấn đề này ("Cách tạo một div trống chiếm không gian") cho một thiết kế đáp ứng trong đó tôi tạo một bảng ngang thành một bảng dọc khi chiều rộng ngắn. Tôi đã sử dụng các bảng ...
ANeves

@ANeves một bảng sẽ luôn đặt đúng chiều rộng trong trường hợp này, phải không? Tôi không chắc mình theo dõi ....
Pekka

25

Cập nhật nhẹ cho câu trả lời @ no1cobla. Điều này ẩn khoảng thời gian. Giải pháp này hoạt động trong IE8 +.

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

5
Nếu bạn muốn sử dụng điều này như một dự phòng để làm việc chỉ khi bạn yếu tố rỗng add cái gì đó như:.class:after:empty
Miguel Garrido

1
@Miguel Garrido - Tôi đã phải sử dụng .class: blank: sau đó để hoạt động.
thứ hai,

24

Một giải pháp đơn giản cho các div di động trống là thêm:

  • chiều rộng (hoặc chiều rộng tối thiểu)
  • chiều cao tối thiểu

bằng cách này, bạn có thể giữ chức năng float và buộc nó lấp đầy không gian khi trống.

Tôi sử dụng kỹ thuật này trong các cột bố cục trang, để giữ mọi cột ở vị trí của nó ngay cả khi các cột khác trống.

Thí dụ:

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

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

4
min-heightlà giải pháp tốt nhất
Vall3y

Chiều cao tối thiểu chỉ khắc phục sự cố với width. Tuy nhiên, nó không ngăn div có chiều cao bằng không. (thử đặt nền div để xem vấn đề). Do đó & nbsp; là một giải pháp tổng quát hơn. Ngoài ra nội dung: "." khắc phục sự cố chiều cao bằng không.
John Henckel

1
Một min-height = 1px không bằng 0! nó sẽ là 1 px, nếu bạn muốn chiều cao mặc định bạn chỉ có thể nói min-height = 100px và min width = 100px, div sẽ luôn là 100x100 không có cách nào nó sẽ là 0
Engineeroholic

Và để sử dụng "& nbsp" là một việc làm rất tệ, nếu bạn có một trang web lớn với nhiều tệp và mỗi tệp có 10K dòng html thì sao? nếu tôi làm theo cách tiếp cận của bạn, tôi sẽ kết thúc việc đặt "& nbsp" bên trong mỗi tệp trong mỗi tệp !! thật là lãng phí thời gian!? điều gì sẽ xảy ra nếu bạn có một trang web nội dung do người dùng tạo? Ví dụ: người dùng gửi nhận xét trống .. dựa trên giải pháp của bạn, tôi phải xây dựng mã để kiểm tra xem nhận xét có trống không, sau đó thêm "& nbsp" (quá phức tạp mà không có lý do chính đáng) min-height và min-width là giải pháp tốt nhất bởi vì tôi sẽ viết nó một lần và lo lắng sẽ không về nó một lần nữa, ngay cả khi tôi thêm nội dung hơn trong tương lai
Engineeroholic

22

Chỉ cần thêm một ký tự khoảng trắng chiều rộng bằng không bên trong một phần tử giả

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

Ồ, tôi thích ý tưởng này vì nó có nghĩa là người dùng sẽ không vô tình sao chép và dán nó, các phần tử giả không được chọn theo mặc định.
Domino

3

Đây là một cách:

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

1
Tôi đề xuất content: "\200b";cho một không gian chiều rộng bằng không . Ưu điểm bổ sung là trình duyệt sẽ không chọn ký tự này (ví dụ: CTRL+A CTRL+Csẽ vẫn hoạt động như cũ).
yyny

3

Bạn có thể:

o Đặt .kundregister_grid_1thành:

  • width(hoặc width-min) với height(hoặc min-height)
  • hoặc là padding-top
  • hoặc là padding-bottom
  • hoặc là border-top
  • hoặc là border-bottom

o Hoặc sử dụng phần tử giả : ::beforehoặc ::aftervới:

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

o Hoặc đặt &nbsp;bên trong phần tử trống, nhưng điều này đôi khi có thể mang lại hiệu quả bất ngờ, vd. kết hợp vớitext-decoration: underline;


2

Tại sao không chỉ thêm "min-width" vào lớp css của bạn?



1

Với việc sử dụng khối nội tuyến, nó sẽ hoạt động như một đối tượng nội tuyến. vì vậy không cần phao để đặt chúng cạnh nhau trên một dòng. Và thực sự như Rito đã nói, phao cần một "cơ thể", giống như chúng cần kích thước.

Tôi hoàn toàn đồng ý với Pekka về việc sử dụng bảng. Tất cả những người xây dựng bố cục bằng cách sử dụng bảng tránh của div đều giống như đó là một sự chán nản. Nhưng hãy sử dụng chúng cho dữ liệu dạng bảng! Đó là những gì họ đề cập đến. Và trong trường hợp của bạn, tôi nghĩ bạn cần chúng :)

NHƯNG nếu bạn thực sự thực sự muốn những gì bạn muốn. Có một cách hack css. Giống như bản hack float.

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

Thêm cái đó và bạn cũng được thiết lập: D (Lưu ý: không hoạt động trong IE, nhưng có thể sửa được)


1

Nếu chúng cần được làm nổi, bạn luôn có thể đặt chiều cao tối thiểu là 1px để chúng không bị sụp đổ.


0

Trong việc xây dựng một bộ thẻ bố cục tùy chỉnh, tôi đã tìm thấy một câu trả lời khác cho vấn đề này. Được cung cấp ở đây là bộ thẻ tùy chỉnh và các lớp CSS của chúng.

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 }

Chìa khóa ở đây là kích thước hộp và đệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.