Css вертикально выравнивает плавающие divs
Здравствуйте, у меня есть div (#wrapper), содержащий 2 divs, стоящих бок о бок. Я хотел бы, чтобы правый-div был выровнен по вертикали. Я попробовал вертикальное выравнивание: посередине на моей основной обертке, но он не работает. Это сводит меня с ума! Надеюсь, кто-то может помочь. Заранее благодарю за ваши ответы. Приветствия. Марк.
http://cssdesk.com/LWFhW
Мой HTML:
<div id="wrapper">
<div id="left-div">
<ul>
<li>One</li>
<li>Two</li>
</ul>
</div>
<div id="right-div">
Here some text...
</div>
</div>
Мой CSS:
#wrapper{
width:400px;
float:left;
height:auto;
border:1px solid purple;}
#left-div{
width:40px;
border:1px solid blue;
float:left;}
#right-div{
width:350px;
border:1px solid red;
float:left;}
ul{
list-style-type: none;
padding:0;
margin:0;}
Ответы
Ответ 1
Вам не повезло с плавающими элементами. Они не подчиняются вертикальному выравниванию,
вам нужно, display:inline-block
вместо этого:
http://cssdesk.com/2VMg8
BEWARE
Будьте осторожны с display: inline-block;
, поскольку он интерпретирует пустое пространство между элементами как реальное белое пространство. Он не игнорирует его, как display: block
делает.
Я рекомендую это:
Установите font-size
содержащего элемента на 0
(ноль) и reset font-size
на необходимое значение в таких элементах
ul {
margin: 0;
padding: 0;
list-style: none;
font-size: 0;
}
ul > li {
font-size: 12px;
}
См. демонстрацию здесь: http://codepen.io/HerrSerker/pen/mslay
CSS
#wrapper{
width:400px;
height:auto;
border:1px solid green;
vertical-align: middle;
font-size: 0;
}
#left-div{
width:40px;
border:1px solid blue;
display: inline-block;
font-size: initial;
/* IE 7 hack */
*zoom:1;
*display: inline;
vertical-align: middle;
}
#right-div{
width:336px;
border:1px solid red;
display: inline-block;
font-size: initial;
/* IE 7 hack */
*zoom:1;
*display: inline;
vertical-align: middle;
}
Ответ 2
Вы можете сделать это довольно легко с помощью таблицы отображения и отображения ячейки таблицы.
#wrapper {
width: 400px;
float: left;
height: auto;
display: table;
border: 1px solid green;
}
#right-div {
width: 356px;
border: 1px solid red;
display: table-cell;
vertical-align: middle;
}
РЕДАКТИРОВАТЬ: На самом деле быстро разобрался с CSS Desk для вас - http://cssdesk.com/RXghg
ДРУГОЕ РЕДАКТИРОВАНИЕ: Используйте Flexbox. Это будет работать, но довольно устарело - http://www.cssdesk.com/davf5
#wrapper {
display: flex;
align-items: center;
border:1px solid green;
}
#left-div {
border:1px solid blue;
}
#right-div {
border:1px solid red;
}
Ответ 3
Я понимаю, что это древний вопрос, однако я подумал, что было бы полезно опубликовать решение проблемы вертикального выравнивания поплавка.
Создав оболочку вокруг содержимого, которое вы хотите разместить, вы можете использовать псевдо-селеры:: after или:: before для вертикального выравнивания содержимого внутри обертки. Вы можете настроить размер этого контента, если хотите, не влияя на выравнивание. Единственный улов в том, что обертка должна заполнить 100% высоты своего контейнера.
http://jsfiddle.net/jmdrury/J53SJ/
HTML
<div class="container">
<span class="floater">
<span class="centered">floated</span>
</span>
<h1>some text</h1>
</div>
CSS
div {
border:1px solid red;
height:100px;
width:100%;
vertical-align:middle;
display:inline-block;
box-sizing: border-box;
}
.floater {
float:right;
display:inline-block;
height:100%;
box-sizing: border-box;
}
.centered {
border:1px solid blue;
height: 30px;
vertical-align:middle;
display:inline-block;
box-sizing: border-box;
}
h1 {
margin:0;
vertical-align:middle;
display:inline-block;
box-sizing: border-box;
}
.container:after, .floater:after, .centered:after, h1:after {
height:100%;
content:'';
font-size:0;
vertical-align:middle;
display:inline-block;
box-sizing: border-box;
}
Ответ 4
Возможное решение состоит в том, чтобы сделать обертку div
flex
выравнивая элементы по center
как указано в https://spin.atomicobject.com/2016/06/18/vertically-center-floated-elements-flexbox/.
Ответ 5
Я делаю все возможное, чтобы избежать использования поплавков... но - при необходимости я выровняю по центру по вертикали, используя следующие строки:
position: relative;
top: 50%;
transform: translateY(-50%);
Ответ 6
Единственное падение моих модификаций - у вас есть высота набора div... Я не знаю, была ли эта проблема для вас или нет.
http://cssdesk.com/kyPhC