Як зробити порожній дів займає місце


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>

Це мій набір дівок, використовуваний як структура таблиці.

CSS говорить наступне:

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

Не заважайте шведській назві. Я хочу, щоб діви показали, хоча вони не мають цінностей.

<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". Однак, виконуючи це в хромі, вони видаляються та більше не натискають інші діви в порядку float:left. Тож якщо я маю категорії в тих самих дівах вище, то значення будуть розміщені під неправильною категорією.

Відповіді:


64

він працює, якщо ви видалите плаваючий. http://jsbin.com/izoca/2/edit

з floats він працює лише у тому випадку, якщо є якийсь вміст, наприклад &nbsp;


5
Інша відповідь говорить, що встановлення мінімальної висоти змусить її працювати, коли пливе, і, звичайно, у моєму випадку, що спрацювало. Якщо це завжди вірно (зараз, у 2016 році), то ця відповідь неправильна. Ви можете просто додати мінімальну висоту: 1px; до ширини: 140px; без необхідності видаляти флоат або додавати вміст.
Нік Райс

Пробується element.text("&nbsp;");в jQuery і &nbsp;з’являється на сторінці.
Лорі

54

Спробуйте додати &nbsp;до порожніх елементів.

Я не розумію, чому ти тут не використовуєш <table>? Вони будуть робити такі речі автоматично.


9
Домовились. Якщо це табличні дані, використовуйте таблицю - ось для чого вони призначені.
Dan Diplo

5
Зрештою цей час люди все ще припускають <table>== BAD.
салюс

4
Використання &nbsp;, як популярного рішення, може викликати проблеми в деяких сценаріях. Як і коли ви закреслюєте text-decoration: line-through;текст ( ), обведення відображатиметься &nbsp;, тоді як те, що ви насправді хочете, - це просто порожня поділка.
Іжакі

1
@Pekka 웃, "не завжди можна використовувати таблиці". У мене є ця сама проблема ("Як змусити порожній діл зайняти місце") для чуйного дизайну, коли я перетворюю горизонтальну таблицю у вертикальну таблицю, коли ширина невелика. Я вже використовую таблиці ...
ANeves

@ANeves таблиця завжди буде правильно розміщувати ширину, хоча ні, ні? Не впевнений, що я слідую ....
Pekka

25

Трохи оновіть відповідь @ no1cobla. Це приховує період. Це рішення працює в IE8 +.

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

5
Якщо ви хочете використовувати це як резервний варіант роботи, коли елемент порожній, додайте щось на зразок:.class:after:empty
Мігель Гаррідо

1
@ Мігель Гаррідо - мені довелося використовувати .class: empty: після того, щоб працювати.
другийперсон

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, щоб побачити проблему). Тому & nbsp; є більш загальним рішенням. Також вміст: "." виправляє задачу про нульову висоту.
Джон Генкель

1
Мінімальна висота = 1px не дорівнює 0! це буде 1 px, якщо ви хочете висоти за замовчуванням, ви можете просто сказати min-height = 100px та min width = 100px, div завжди буде 100x100, ніяк не буде 0
Engineeroholic

І використовувати "& nbsp" - це дуже погана практика, що робити, якщо у вас великий веб-сайт з багатьма файлами, і кожен файл має 10K HTML-рядки? якщо я буду дотримуватися вашого підходу, я в кінцевому підсумку покладу "& 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

За допомогою вбудованого блоку він поводитиметься як вбудований об'єкт. тож жодним поплавцям не потрібно було їх дістати поруч з одним на одному рядку. І справді, як сказав Ріто, поплавці потребують «тіла», як і їм потрібні розміри.

Я повністю згоден з Пеккою щодо використання таблиць. Усі, хто створює макети, використовуючи таблиці уникання Div, на зразок хвороби. Але використовуйте їх для табличних даних! Ось для чого вони і ментовані. І у вашому випадку я думаю, що вони вам потрібні :)

АЛЕ якщо ти дуже хочеш того, чого хочеш. Існує спосіб злому css. Те саме, що і float hack.

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

Додайте це, і ви також встановили: D (Примітка: не працює в IE, але це можна виправити)


1

Якщо їх потрібно плавати, ви завжди можете просто встановити мінімальну висоту в 1 пікс, щоб вони не руйнувалися.


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 }

Ключовим тут є розмір коробки та прокладка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.