2016-11-30 2 views
0

У меня есть следующий ниже код, который фокусируется на отображении таблицы.Проблемы с отображением таблицы в CSS и дальнейшие идеи

* { 
 
    box-sizing: border-box; 
 
} 
 

 
.mother { 
 
    width: 300px; 
 
    margin: 2em auto; 
 
    background: peachpuff; 
 
    display: table; 
 
} 
 

 
.child { 
 
    display: inline-table; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: cyan; 
 
    border: 1px solid #7a7a7a; 
 
}
<div class="mother"> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
</div>

Моя проблема заключается в том, что дочерние окна (.child) не полностью завернуты, в результате чего некоторые небольшие пробелы. Вопрос в том, из-за display: table или display: inline-table? Если да, то какие значения display следует использовать для предотвращения удаления пробелов?

Моя другая забота, когда я изменить значение display из .mother к table и .child к table-cell, что дочерние элементы не приспосабливает себя независимо от ширины родительского элемента. Например, если .mother имеет ширину 300 пикселей, а каждый ребенок имеет ширину 100 пикселей, каждая строка должна содержать только 3 дочерних элемента, чтобы идеально соответствовать длине родительского элемента. С display: flex его можно решить с помощью flex-wrap. Какую собственность я должен использовать в этой проблеме?

+0

Добавьте к своему .child это: vertical-align: top; –

ответ

1

Добавить font-size: 0 в родительский элемент.

* { 
 
    box-sizing: border-box; 
 
} 
 

 
.mother { 
 
    width: 300px; 
 
    margin: 2em auto; 
 
    background: peachpuff; 
 
    display: table; 
 
    font-size: 0; 
 
} 
 

 
.child { 
 
    display: inline-table; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: cyan; 
 
    border: 1px solid #7a7a7a; 
 
}
<div class="mother"> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
</div>

+0

Это хороший трюк, но что такое 'font-size' в отношении пробелов и макета? – jst16

+0

@ jst16 Они созданы из пробелов между тегами, 'font-size: 0' является одним из решений [здесь] (http://stackoverflow.com/q/5078239/2571493). – Nhan

+1

Я не знал, что 'font-size' может быть полезен не только для текстов и шрифтов. Спасибо – jst16

0

Да, это потому, что display:inline-table для детей. Это заставляет их вести себя как отдельные контейнеры на линейном уровне, завернутые в одну анонимную «ячейку» внешней таблицы.

К сожалению, в таблице таблиц CSS нет обертки строки таблицы. Единственный способ переместить ячейки в новую строку - использовать дополнительные обертки с display:table-row. А почему display:flex не подходит?

+0

является 'inline-table' для родителей или детей? – jst16

+1

Это для родителей. Он ведет себя так же, как 'table' внутри (со своими собственными строками и ячейками), но как' inline-block' снаружи. Это 'table', поскольку' inline-block' означает 'block'. –

+0

Итак, 'inline-block' хорошо? – jst16

0

* { 
 
    box-sizing: border-box; 
 
} 
 

 
.mother { 
 
    width: 300px; 
 
    margin: 2em auto; 
 
    background: peachpuff; 
 
    display: table; 
 
    font-size: 0; 
 
} 
 

 
.child { 
 
    display: inline-table; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: cyan; 
 
    border: 1px solid #7a7a7a; 
 
    margin: -5px -2px; 
 
}
<div class="mother"> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
</div>

Это немного Hacky, но это может решить вашу проблему.

+0

есть переполнение справа – jst16

+0

Я не понимаю, что вы говорите – bytanyar

+0

Удалите фон: персик и эта тень уходит. – bytanyar

Смежные вопросы