Как разместить два элемента рядом друг с другом? - PullRequest
324 голосов
/ 27 апреля 2011

Рассмотрим следующий код :

#wrapper {
    width: 500px;
    border: 1px solid black;
}
#first {
    width: 300px;
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}
<div id="wrapper">
    <div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
    <div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>

Я бы хотел, чтобы два div были рядом друг с другом внутри div-обертки.В этом случае высота зеленого div должна определять высоту оболочки.

Как я могу добиться этого с помощью CSS?

Ответы [ 11 ]

403 голосов
/ 27 апреля 2011

Float один или оба внутренних дел.

Плавающий один делитель:

#wrapper {
    width: 500px;
    border: 1px solid black;
    overflow: hidden; /* will contain if #first is longer than #second */
}
#first {
    width: 300px;
    float:left; /* add this */
    border: 1px solid red;
}
#second {
    border: 1px solid green;
    overflow: hidden; /* if you don't want #second to wrap below #first */
}

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

Плавающие оба деления:

#wrapper {
    width: 500px;
    border: 1px solid black;
    overflow: hidden; /* add this to contain floated children */
}
#first {
    width: 300px;
    float:left; /* add this */
    border: 1px solid red;
}
#second {
    border: 1px solid green;
    float: left; /* add this */
}
108 голосов
/ 17 января 2014

Имея два div,

<div id="div1">The two divs are</div>
<div id="div2">next to each other.</div>

, вы также можете использовать свойство display:

#div1 {
    display: inline-block;
}

#div2 {
    display: inline-block;
}

jsFiddle пример здесь .

Если div1 превышает определенную высоту, div2 будет расположен рядом с div1 внизу.Чтобы решить эту проблему, используйте vertical-align:top; на div2.

jsFiddle пример здесь .

28 голосов
/ 27 апреля 2011

Вы можете размещать элементы рядом друг с другом, используя свойство float CSS:

#first {
float: left;
}
#second {
float: left;
}

Вам нужно убедиться, что div-обертка допускает плавающее выражение с точки зрения ширины, полей и т. Д.установлены правильно.

16 голосов
/ 27 апреля 2011

вот решение:

#wrapper {
    width: 500px;
    border: 1px solid black;
    overflow: auto; /* so the size of the wrapper is alway the size of the longest content */
}
#first {
    float: left;
    width: 300px;
    border: 1px solid red;
}
#second {
    border: 1px solid green;
    margin: 0 0 0 302px; /* considering the border you need to use a margin so the content does not float under the first div*/
}

ваше демо обновлено;

http://jsfiddle.net/dqC8t/1/

15 голосов
/ 22 мая 2015

Опция 1

Используйте float:left на обоих div элементах и ​​задайте% ширины для обоих элементов div с общей общей шириной 100%.

Используйте box-sizing: border-box; для плавающих элементов div.Значение border-box заставляет отступы и границы в ширину и высоту, а не расширяет их.

Используйте clearfix на <div id="wrapper">, чтобы очистить плавающие дочерние элементы, которые сделают div-модуль-обертку масштабированным до правильной высоты.

.clearfix:after {
   content: " "; 
   visibility: hidden;
   display: block;
   height: 0;
   clear: both;
}

#first, #second{
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

#wrapper {
    width: 500px;
    border: 1px solid black;
}
#first {
    border: 1px solid red;
    float:left;
    width:50%;
}
#second {
    border: 1px solid green;
    float:left;
    width:50%;
}

http://jsfiddle.net/dqC8t/3381/

Опция 2

Используйте position:absolute для одного элемента и фиксированную ширину для другого элемента.

Добавить позицию: относительно элемента <div id="wrapper">, чтобы дочерние элементы были абсолютно позиционированы относительно элемента <div id="wrapper">.

#wrapper {
    width: 500px;
    border: 1px solid black;
    position:relative;
}
#first {
    border: 1px solid red;
    width:100px;
}
#second {
    border: 1px solid green;
    position:absolute;
    top:0;
    left:100px;
    right:0;
}

http://jsfiddle.net/dqC8t/3382/

Вариант 3

Используйте display:inline-block на обоих div элементах и ​​задайте% ширины для обоих элементов div с общей общей шириной 100%.

И снова (аналогично float:left пример) используйте box-sizing: border-box; на элементах div.Значение border-box заставляет отступы и границы в ширину и высоту, а не расширяет их.

ПРИМЕЧАНИЕ. * В элементах inline-block могут быть проблемы с пробелами, поскольку на них влияют пробелы в HTMLразметки.Больше информации здесь: https://css -tricks.com / боевые действия в пространстве-между-блок-элементами /

#first, #second{
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

#wrapper {
    width: 500px;
    border: 1px solid black;
    position:relative;
}

#first {
    width:50%;
    border: 1px solid red;
    display:inline-block;
}

#second {
    width:50%;
    border: 1px solid green;
    display:inline-block;
}

http://jsfiddle.net/dqC8t/3383/

Последний вариант - использовать новую опцию отображения с именем flex, но учтите, что в игру может войти совместимость с браузером:

http://caniuse.com/#feat=flexbox

http://www.sketchingwithcss.com/samplechapter/cheatsheet.html

14 голосов
/ 31 мая 2016

Попробуйте использовать модель flexbox. Это легко и кратко написать.

Live Jsfiddle

CSS:

#wrapper {
  display: flex;
  border: 1px solid black;
}
#first {
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}

Направление по умолчанию - строка. Таким образом, он выравнивается рядом друг с другом внутри #wrapper. Но не поддерживается IE9 или меньше, чем версии

6 голосов
/ 08 декабря 2015

Попробуйте использовать приведенные ниже изменения кода, чтобы поместить два элемента div друг перед другом

#wrapper {
  width: 500px;
  border: 1px solid black;
  display:flex;
}

JSFiddle link

4 голосов
/ 14 сентября 2018

Это очень легко - вы можете сделать это трудным путем

.clearfix:after {
   content: " "; 
   visibility: hidden;
   display: block;
   height: 0;
   clear: both;
}

#first, #second{
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

#wrapper {
    width: 500px;
    border: 1px solid black;
}
#first {
    border: 1px solid red;
    float:left;
    width:50%;
}
#second {
    border: 1px solid green;
    float:left;
    width:50%;
}
<div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
    <div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>

или простой способ

#wrapper {
  display: flex;
  border: 1px solid black;
}
#first {
    border: 1px solid red;
}
#second {
    border: 1px solid green;
}
<div id="wrapper">
    <div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
    <div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>

Существует также миллион других способов.
Но я бы выбрал простой способ.Я также хотел бы сказать вам, что многие ответы здесь неправильны, но оба способа, которые я показал, по крайней мере работают в HTML 5.

3 голосов
/ 16 июня 2016
  1. Добавьте float:left; свойство в обоих делениях.

  2. Добавить display:inline-block; свойство.

  3. Добавить display:flex; свойство в родительском div.

2 голосов
/ 13 июня 2018

Это правильный ответ CSS3. Надеюсь, это поможет вам как-то сейчас: D Я действительно рекомендую вам прочитать книгу: https://www.amazon.com/Book-CSS3-Developers-Future-Design/dp/1593272863 На самом деле, я сделал это решение, прочитав эту книгу сейчас. : D

#wrapper{
  display: flex;
  flex-direction: row;
  border: 1px solid black;
}
#first{
  width: 300px;
  border: 1px solid red;
}
#second{
  border: 1px solid green;
}
<div id="wrapper">
    <div id="first">Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.</div>
    <div id="second">When you post a new question, other users will almost immediately see it and try to provide good answers. This often happens in a matter of minutes, so be sure to check back frequently when your question is still new for the best response.</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...