Flexbox выравнивание с изображениями и текстом внутри одного контейнера
Я делаю макет флексбокса. Изображение сотрудника будет отображаться слева, а информация о сотруднике (имя, идентификатор сотрудника, отдел и т.д.) - справа от изображения в формате списка сверху вниз.
Мне нужно сделать это с помощью flexbox.
Вот ссылка на мой JSFiddle с тем, что я уже сделал:
http://jsfiddle.net/Hopped_Up_Designs/3teLbqqf
.flex-container {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row;
flex-direction: row;
-webkit-align-items: center;
align-items: center;
flex-wrap: wrap;
min-width: 320px;
max-width: 1220px;
}
.flex-item {
height: 120px;
width: 300px;
background-color: #e46119;
border: 1px solid #626262;
margin: 3px;
padding: 10px 0 0 10px;
}
span {
padding-left: 5px;
}
<div class="flex-container">
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
<div class="flex-item"><img src="http://placehold.it/100x100">
<span>Text fields will go here</span>
</div>
</div>
Ответы
Ответ 1
Самый ненавязчивый подход, который я нашел, заключался в том, чтобы добавить это:
.flex-item {
display:flex;
align-items: center;
}
.flex-item img{
flex-grow:0;
flex-shrink:0;
}
Если вы добавите несколько <span>
сразу после img, они будут продолжать отображаться в строке (например, float). Однако это может быть не то, что вы хотите. Один из вариантов может заключаться в том, чтобы установить каждый элемент в фиксированную ширину, но это нарушает дух flexbox.
Но если вы измените свою текстовую оболочку на один <div>
, я думаю, что все будет в порядке. <div>
будет отображаться как элемент уровня блока, пока вы не решите иначе.
<div class="flex-item">
<img src="http://placehold.it/100x100">
<div>
<ul>
<li>Text fields will go here</li>
<li>and here</li>
</ul>
</div>
</div>
Вот вилка вашей скрипки, где я это сделал. http://jsfiddle.net/Paceaux/7fcqkb50/1/
Ответ 2
Просто оберните свою информацию в контейнер, установленный на display: inline-block
:
HTML
<div class="flex-item">
<img src="http://placehold.it/100x100"/>
<div class="info-container">
<p>Field 1</p>
<p>Field 2</p>
<p>Field 3</p>
</div>
</div>
CSS
.info-container{
display: inline-block;
vertical-align: top;
padding: 0 0 0 5px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.info-container p{
padding: 0;
margin: 0 0 10px;
}
FIDDLE