У меня есть два div рядом. Я бы хотел, чтобы высота их была одинаковой, и оставалась такой же, если один из них изменяет размеры. Я не могу понять это, хотя Идеи?
Чтобы прояснить мой запутанный вопрос, я бы хотел, чтобы оба блока всегда были одинакового размера, поэтому, если один из них увеличивается, потому что в него помещается текст, другой должен расти в соответствии с высотой.
<div style="overflow: hidden">
<div style="border:1px solid #cccccc; float:left; padding-bottom:1000px; margin-bottom:-1000px">
Some content!<br/>
Some content!<br/>
Some content!<br/>
Some content!<br/>
Some content!<br/>
</div>
<div style="border:1px solid #cccccc; float:left; padding-bottom:1000px; margin-bottom:-1000px">
Some content!
</div>
</div>
html
css
html-table
flexbox
NibblyPig
источник
источник
Ответы:
Flexbox
С flexbox это единственное объявление:
Для старых браузеров могут потребоваться префиксы, см. Поддержку браузера .
источник
flex-direction: column
: jsfiddle.net/sdsgW/1Это распространенная проблема, с которой многие сталкивались, но, к счастью, некоторые умные люди, такие как Эд Элиот в своем блоге , разместили свои решения в Интернете.
По сути, вы делаете оба div / столбца очень высокими, добавляя их,
padding-bottom: 100%
а затем «обманываете браузер», думая, что они не такие высокие, используяmargin-bottom: -100%
. Это лучше объяснил Эд Элиот в своем блоге, который также включает в себя множество примеров.источник
padding: 7px 10px
, еслиpadding-bottom
свойство установлено на 100%? (PSoverflow:hidden
мне тоже потребовалсяrow
)Это область, где у CSS никогда не было никаких решений - вы можете использовать
<table>
теги (или подделывать их, используяdisplay:table*
значения CSS ), поскольку это единственное место, где реализовано «держать кучу элементов одинаковой высоты».Это работает во всех версиях Firefox, Chrome и Safari, Opera по крайней мере с версии 8 и в IE с версии 8.
источник
table
вместоtable-row
?width
для вашихdisplay: table
элементов div, если только вы не добавите родительский элемент, который испортит все.Использование jQuery
Используя jQuery, вы можете сделать это в очень простом однострочном скрипте.
Использование CSS
Это немного интереснее. Техника называется Faux Columns . Более или менее вы фактически не устанавливаете фактическую высоту одинаковой, но вы настраиваете некоторые графические элементы, чтобы они выглядели одинаково.
источник
Я удивлен, что никто не упомянул (очень старый, но надежный) метод Absolute Columns: http://24ways.org/2008/absolute-columns/
На мой взгляд, он намного превосходит метод Faux Columns и метод One True Layout.
Основная идея заключается в том , что элемент с
position: absolute;
поместите против ближайшего родительского элемента , который имеетposition: relative;
. Затем вы растягиваете столбец, чтобы заполнить 100% высоты, назначая иtop: 0px;
иbottom: 0px;
(или любые пиксели / проценты, которые вам действительно нужны). Вот пример:источник
Вы можете использовать плагин Jquery Equal Heights, чтобы выполнить, этот плагин делает все div точно такой же высоты, как и другие. Если один из них растет, а другой тоже будет расти.
Вот пример реализации
Ссылка здесь
http://www.cssnewbie.com/equalheights-jquery-plugin/
источник
Вы могли бы использовать искусственные столбцы .
В основном он использует фоновое изображение в DIV, содержащем DIV, для имитации двух DIV одинаковой высоты. Использование этой техники также позволяет вам добавлять тени, скругленные углы, пользовательские границы или другие необычные узоры в ваши контейнеры.
Работает только с коробками фиксированной ширины.
Хорошо проверено и правильно работает в каждом браузере.
источник
Просто заметил эту тему во время поиска этого самого ответа. Я только что сделал небольшую функцию jQuery, надеюсь, это поможет, работает как шарм:
JAVASCRIPT
HTML
источник
CSS сетка
Современный способ сделать это (который также позволяет избежать объявления
<div class="row"></div>
-обертки вокруг каждых двух элементов) - использовать CSS-сетку. Это также дает вам возможность легко контролировать промежутки между строками / столбцами вашего элемента.источник
Этот вопрос задавался 6 лет назад, но все же стоит дать простой ответ с помощью макета flexbox .
Просто добавьте следующий CSS к отцу
<div>
, он будет работать.Первые две строки объявляют, что это будет отображаться как flexbox. И
flex-direction: row
сообщает браузерам, что его дочерние элементы будут отображаться в столбцах. Иalign-items: stretch
будет соответствовать требованию, чтобы все дочерние элементы растянулись до одинаковой высоты, если один из них станет выше.источник
I'd like both boxes to always be the same size, so if one grows because text is placed into it, the other one should grow to match the height.
который не упоминается в принятом ответе ... Я только что закончил здесь. Может быть, я должен был прокомментировать принятый ответ?align-items: stretch;
Flex не по умолчанию?Использование CSS Flexbox и минимальная высота работали для меня
Скажем, у вас есть контейнер с двумя элементами div, и вы хотите, чтобы эти два элемента div имели одинаковую высоту.
Вы должны установить « display: flex » для контейнера, а также « align-items: stretch »
Затем просто дайте ребенку divs минимальную высоту 100%
Смотрите код ниже
источник
Если вы не возражаете против того, чтобы один из
div
них был мастером и определял высоту для обоих,div
вот что:скрипка
Независимо от того, что
div
справа будет расширяться или сжиматься и переливаться, чтобы соответствовать высотеdiv
слева.Оба
div
должны быть непосредственными потомками контейнера и должны указывать их ширину в нем.Соответствующий CSS:
источник
Мне нравится использовать псевдоэлементы для достижения этой цели. Вы можете использовать его в качестве фона содержимого и позволить им заполнить пространство.
При таком подходе вы можете устанавливать поля между столбцами, границами и т. Д.
источник
Fiddle
HTML
CSS
источник
Я испробовал почти все упомянутые выше методы, но решение flexbox не будет работать правильно с Safari, а методы компоновки сетки не будут работать корректно со старыми версиями IE.
Это решение подходит для всех экранов и совместимо с различными браузерами:
Вышеупомянутый метод будет равен высоте ячеек, и для меньших экранов, таких как мобильный телефон или планшет, мы можем использовать
@media
метод, упомянутый выше.источник
Вы можете использовать JQuery для достижения этой цели легко.
CSS
JQuery
HTML
Вам нужно будет включить JQuery
источник
<div>
имеют динамический контент. Причина, по которой я говорю, заключается в том,<div class="right">
что если у вас будет больше контента, то возникает другая проблемаЯ знаю, что это было давно, но я все равно разделяю свое решение. Это трюк JQuery.
--- HTML
---- CSS
--- JQUERY
источник
Это плагин jQuery, который устанавливает одинаковую высоту для всех элементов в одной строке (путем проверки элемента offset.top). Поэтому, если ваш массив jQuery содержит элементы из более чем одной строки (разные offset.top), каждая строка будет иметь отдельную высоту на основе элемента с максимальной высотой в этой строке.
};
источник
источник
У меня возникла та же проблема, поэтому я создал эту маленькую функцию, используя jquery, так как в настоящее время jquery является частью каждого веб-приложения.
Вы можете вызвать эту функцию на странице готового события
Я надеюсь, что это работает для вас.
источник
Недавно я столкнулся с этим и мне не очень понравились решения, поэтому я попытался поэкспериментировать.
.mydivclass {inline-block; vertical-align: middle; width: 33%;}
источник
Что я сделал здесь, так это изменил высоту на минимальную высоту и присвоил ей фиксированное значение. если один из них будет изменен, другой останется на той же высоте. не уверен, что это то, что вы хотите
источник