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;
}

Ответ 5

Я делаю все возможное, чтобы избежать использования поплавков... но - при необходимости я выровняю по центру по вертикали, используя следующие строки:

position: relative;
top: 50%;
transform: translateY(-50%);

Ответ 6

Единственное падение моих модификаций - у вас есть высота набора div... Я не знаю, была ли эта проблема для вас или нет.

http://cssdesk.com/kyPhC