#html #css
#HTML #css
Вопрос:
У меня есть два внутренних div, которые вложены внутри div-оболочки. Я хочу, чтобы два внутренних div были расположены один под другим. Но на данный момент они располагаются в одной строке.
#wrapper{
margin-left:auto;
margin-right:auto;
height:auto;
width:auto;
}
#inner1{
float:left;
}
#inner2{
float:left;
}
<div id="wrapper">
<div id="inner1">This is inner div 1</div>
<div id="inner2">This is inner div 2</div>
</div>
Комментарии:
1. Почему вы переместили их влево, если хотите, чтобы они были один под другим? Просто удалите свойства float и все в порядке.
Ответ №1:
Попробуйте очистить: слева на #inner2. Поскольку для них обоих установлено значение float, это должно привести к возврату строки.
#inner1 {
float:left;
}
#inner2{
float:left;
clear: left;
}
<div id="wrapper">
<div id="inner1">This is inner div 1</div>
<div id="inner2">This is inner div 2</div>
</div>
Ответ №2:
Если вы хотите, чтобы два div
элемента отображались один над другим, самый простой ответ — удалить float: left;
из объявления css, поскольку это приводит к тому, что они сворачиваются до размера их содержимого (или размера, определенного css) и, ну, всплывают друг против друга.
В качестве альтернативы, вы могли бы просто добавить clear:both;
к div
s, что заставит перемещаемое содержимое очистить предыдущие значения с плавающей точкой.
Ответ №3:
Установите для основного div
CSS что-нибудь вроде:
<style>
.wrapper{
display:flex;
flex-direction: column;
}
</style>
<div id="wrapper">
<div id="inner1">This is inner div 1</div>
<div id="inner2">This is inner div 2</div>
</div>
Дополнительные сведения о flexbox CSS см.:https://css-tricks.com/snippets/css/a-guide-to-flexbox /
Комментарии:
1. спасибо, только это сработало с
absolute
во внешнем div2. это лучшее решение, если мы хотим, чтобы элемент был на один ниже одного. Спасибо за этот ответ.
Ответ №4:
Поведение divs по умолчанию заключается в том, чтобы занимать всю ширину, доступную в их родительском контейнере.
Это то же самое, как если бы вы придали внутренним разделениям ширину 100%.
Перемещая divs, они игнорируют значения по умолчанию и изменяют их ширину, чтобы соответствовать содержимому. Все, что находится за ним (в HTML), размещается под div (на отображаемой странице).
Это причина, по которой они располагаются рядом друг с другом.
Свойство float CSS указывает, что элемент должен быть взят из обычного потока и размещен вдоль левой или правой стороны его контейнера, где текст и встроенные элементы будут обтекать его. Плавающий элемент — это элемент, в котором вычисленное значение float не равно none.
Источник:https://developer.mozilla.org/en-US/docs/Web/CSS/float
Избавьтесь от значения с плавающей точкой, и divs будут выровнены друг под другом.
Если этого не произойдет, у вас будет какой-то другой css для divs или дочерних элементов wrapper, определяющих плавающее поведение или встроенное отображение.
Если вы хотите сохранить значение float по какой-либо причине, вы можете использовать clear
во 2-м div для сброса плавающих свойств элементов перед этим элементом.
clear
имеет 5 допустимых значений: none | left | right | both | inherit
. Очистка от плавающих элементов (используемых для переопределения унаследованных свойств), левого или правого плавающих элементов или обоих плавающих элементов. Inherit означает, что он унаследует поведение родительского элемента
Кроме того, из-за поведения по умолчанию вам не нужно устанавливать ширину и высоту автоматически.
Это нужно только в том случае, если вы хотите задать жестко заданную высоту / ширину. Например, 80% / 800 пикселей / 500em / …
<div id="wrapper">
<div id="inner1"></div>
<div id="inner2"></div>
</div>
CSS — это
#wrapper{
margin-left:auto;
margin-right:auto;
height:auto; // this is not needed, as parent container, this div will size automaticly
width:auto; // this is not needed, as parent container, this div will size automaticly
}
/*
You can get rid of the inner divs in the css, unless you want to style them.
If you want to style them identicly, you can use concatenation
*/
#inner1, #inner2 {
border: 1px solid black;
}
Ответ №5:
Вам даже не нужно float:left;
Кажется, поведение по умолчанию заключается в том, чтобы отображать один под другим, если этого не происходит, это потому, что они наследуют некоторый стиль сверху.
CSS:
#wrapper{
margin-left:auto;
margin-right:auto;
height:auto;
width:auto;
}
</style>
HTML:
<div id="wrapper">
<div id="inner1">inner1</div>
<div id="inner2">inner2</div>
</div>
Комментарии:
1. как бы вы расположили его по центру?