2016-12-14 4 views
0

На изображении ниже вы можете увидеть 3-й коробки высота отличается от первых 2. Это потому, что в тексте внутри длиннее, чем первый 2.Дайте всем DIVS одинаковую высоту и ширину с динамическими данными

enter image description here

Можно ли сохранить высоту и ширину ящиков одинаковыми с различной длиной текста. Текст также должен быть центрирован, а более длинный текст должен содержать несколько строк.

Ссылка на CodePen.

http://codepen.io/anon/pen/LbgKEb

<form> 
    <div id="test"><label><input class="test" type="checkbox" /> This is a practice</label></div> 
    <div id="test"> <label><input class="test" type="checkbox" /> This si another practice</label></div> 
    <div id="test"> <label><input class="test" type="checkbox" /> Practice practice practice</label></div> 

</form> 
+0

Я бы посмотрел на использование flexbox! – Benneb10

+2

@ Benneb10 Когда значения 'width' и' height' уже определены, я не перехожу к этому переполняющему flexbox! –

+0

Обратите внимание, что каждое индивидуальное значение для 'id' может происходить только один раз для каждого документа. – connexo

ответ

3

Не дублировать ID с. Это преступление. Используйте vertical-align: middle, чтобы решить вашу проблему.

label { 
 
    text-align:center; 
 
    vertical-align: middle; 
 
} 
 

 
.test { 
 
    border: 1px solid red; 
 
    width: 150px; 
 
    height: 200px; 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
} 
 

 
input[type="checkbox"].test { 
 
    display: none; 
 
}
<form> 
 
    <div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test" type="checkbox" />This is a practice</label> 
 
    </div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test" type="checkbox" />This si another practice</label> 
 
    </div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test" type="checkbox" />Practice practice practice</label> 
 
    </div> 
 
    </div> 
 
</form>

Просмотр

Preview

Примечание: Когда width и height уже определены, я не хожу по этой overkilling Flexbox! Если кто-то советует использовать flexbox.

Если вам нужно, чтобы вертикальное выравнивание было центрированным, а не inline-block, используйте table-cell, и он исправляет его.

label { 
 
    text-align:center; 
 
    vertical-align: middle; 
 
} 
 

 
.test { 
 
    border: 1px solid red; 
 
    width: 150px; 
 
    height: 200px; 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
    text-align: center; 
 
} 
 

 
input[type="checkbox"].test-input { 
 
    display: none; 
 
}
<form> 
 
    <div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test-input" type="checkbox" />This is a practice</label> 
 
    </div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test-input" type="checkbox" />This si another practice</label> 
 
    </div> 
 
    <div class="test"> 
 
     <label> 
 
     <input class="test-input" type="checkbox" />Practice practice practice</label> 
 
    </div> 
 
    </div> 
 
</form>

Просмотр

udpated

+0

OP запросил вертикальный текст центра. – connexo

+0

@connexo Я могу добавить материал для центрирования текста. Нет проблем. –

+0

Любопытно, как вы планируете достичь этого, настаивая на 'display: inline-block;'. – connexo

3

Вы можете использовать CSS Flexbox с применением только одно свойство display: flex;, используйте align-items: center, чтобы сделать его выравнивания по вертикали центр & justify-content: center чтобы сделать его горизонтально центром. Как:

.test-holder { 
 
    display: flex; 
 
    justify-content: center; 
 
} 
 

 
label { 
 
    text-align:center; 
 
    vertical-align: middle; 
 
} 
 

 
.test { 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    border: 1px solid red; 
 
    width: 150px; 
 
    height: 200px; 
 
} 
 

 
input[type="checkbox"].test { 
 
    display: none; 
 
}
<form> 
 
    <div class="test-holder"> 
 
    <div class="test"><label><input class="test" type="checkbox" /> This is a practice</label></div> 
 
    <div class="test"> <label><input class="test" type="checkbox" /> This is another practice</label></div> 
 
    <div class="test"> <label><input class="test" type="checkbox" /> Practice practice practice</label></div> 
 
    </div> 
 
</form>

Надеется, что это помогает!

+0

Обратите внимание, что OP использует фиксированные размеры. Теперь нам не нужен макет flexbox. ':)' Просто рассказываю, как я прокомментировал то же самое в вопросе, как и в своем ответе. Похоже, ты не заметил. –

+0

Пока это не полное решение, так как оно не центрирует текст по вертикали или по горизонтали. Кроме того, я бы не использовал '.test' как для' div', так и для флажка. – connexo

+0

@connexo Теперь он выровнен. –

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