Я пытаюсь создать несколько CSS-классов многократного использования для большей согласованности и меньшего количества помех на моем сайте, и я застрял при попытке стандартизировать одну вещь, которую я часто использую.
У меня есть контейнер <div>
, для которого я не хочу устанавливать высоту (потому что он будет варьироваться в зависимости от того, где на сайте он находится), и внутри него есть заголовок <div>
, а затем неупорядоченный список элементов, и все с CSS, примененным к их.
Это выглядит примерно так:
Я хочу , чтобы неупорядоченный список , чтобы занять оставшуюся комнату в контейнере <div>
, зная , что заголовок <div>
является 18px
высоким. Я просто не знаю, как указать высоту списка как «результат 100%
минус 18px
».
Я видел этот вопрос, заданный в паре других контекстов на SO, но я подумал, что стоит спросить еще раз для моего конкретного случая. Кто-нибудь есть какие-либо советы в этой ситуации?
Ответы:
Я понимаю, что это старый пост, но, учитывая, что он не был предложен, стоит упомянуть, что если вы пишете для CSS3-совместимых браузеров, вы можете использовать
calc
:Стоит отметить, что не все браузеры в настоящее время поддерживают стандартную функцию CSS3 calc (), поэтому может потребоваться реализация специфических для браузера версий этой функции, например:
источник
lessc --strict-math=on
чтобы меньше вычислять выражение внутриcalc
- просто проблема, с которой я столкнулся и потратил много времени (по состоянию на Less 2.0.0)100%-18px
,100%- 18px
и100% -18px
не работает в браузерах я тестировал с.Для немного другого подхода вы можете использовать что-то вроде этого в списке:
Это работает до тех пор, пока родительский контейнер имеет
position: relative;
источник
position: relative;
меня сбил с толку.absolute
в дочернем контейнере, это не может бытьrelative
.absolute
слишком), и его также необходимо установить на 100% высоты.Я использую Jquery для этого
затем я привязываю изменение размера окна, чтобы пересчитать его при каждом изменении размера окна браузера (если размер контейнера изменился с изменением размера окна)
источник
Не определяйте высоту в процентах, просто установите
top=0
иbottom=0
, вот так:источник
height:100%
иdisplay:block
. В противном случае это было бы очень элегантное решение. Интересно, чтоmargin:auto
также не удается центрировать объект фиксированной ширины по вертикали, даже если он отлично работает по горизонтали.Предполагая высоту заголовка 17px
Список css:
Заголовок css:
источник
ul { margin-top: -17px; }
overflow:hidden;
на содержащий элементoverflow:auto;
на нужный элемент.Это сработало для меня!
источник
calc()
центрировать его во время выполнения. Но во многих случаях это не должно быть проблемой. Следует также помнить, что использование множества отрицательных значений для полей, отступов и смещений может привести к путанице при дальнейшей отладке кода, поэтому постарайтесь не усложнять ситуацию.Попробуйте размер коробки. Для списка:
Для заголовка:
Конечно, родительский контейнер должен иметь что-то вроде:
источник
Еще один способ достижения той же цели: гибкие коробки . Сделайте контейнер гибким блоком столбца, и тогда вы будете иметь полную свободу, позволяя некоторым элементам иметь фиксированный размер (поведение по умолчанию) или заполнять / уменьшать пространство контейнера (с помощью flex-grow: 1 и flex- термоусадочные: 1).
Смотрите https://jsfiddle.net/2Lmodwxk/ (попробуйте расширить или уменьшить окно, чтобы заметить эффект)
Примечание: вы также можете использовать сокращенное свойство:
источник
Я попробовал некоторые другие ответы, и ни один из них не работал так, как я хотел. Наша ситуация была очень похожа, когда у нас был заголовок окна, а размер окна можно было изменять с помощью изображений в теле окна. Мы хотели заблокировать соотношение сторон для изменения размера без необходимости добавлять в расчеты, чтобы учесть фиксированный размер заголовка, и чтобы изображение по-прежнему заполняло тело окна.
Ниже я создал очень простой фрагмент, который показывает, что мы в итоге сделали, и, кажется, хорошо работает в нашей ситуации и должен быть совместим с большинством браузеров.
В нашем элементе окна мы добавили поле размером 20px, которое способствует позиционированию относительно других элементов на экране, но не влияет на «размер» окна. Затем заголовок окна позиционируется абсолютно (что удаляет его из потока других элементов, поэтому он не вызывает смещение других элементов, таких как неупорядоченный список), а его верхняя часть позиционируется на -20px, что размещает заголовок внутри поля окна. Наконец, наш элемент ul добавляется в окно, и высота может быть установлена на 100%, что заставит его заполнить тело окна (исключая поле).
источник
Спасибо, я решил мою с вашей помощью, немного подправив, так как я хочу, чтобы div 100% ширина 100% высоты (меньше высота нижней панели) и никакой прокрутки на теле (без рубки / скрытия полос прокрутки).
Для CSS:
Для HTML:
Это сработало, о да, я поставил значение немного больше на div.adjoted для bottom, чем для высоты нижнего бара, в противном случае появляется вертикальная полоса прокрутки, я настроен на ближайшее значение.
Это различие заключается в том, что один из элементов в динамической области добавляет дополнительную нижнюю дыру, от которой я не знаю, как избавиться ... это видео-тег (HTML5), обратите внимание, я поставил этот видео-тег с этим CSS ( так что нет причин для того, чтобы сделать нижнюю яму, но это так):
Объективно: иметь видео, которое занимает 100% браузера (и динамически изменяет размер при изменении размера браузера, но без изменения соотношения сторон), за исключением нижнего пространства, которое я использую для div с некоторыми текстами, кнопками и т. Д. (И валидаторами) W3C & CSS конечно).
РЕДАКТИРОВАТЬ: Я нашел причину, видео тег похож на текст, а не элемент блока, поэтому я исправил это с помощью этого CSS:
Обратите внимание
display:block;
на тег видео.источник
Я не уверен, работает ли это в вашей конкретной ситуации, но я обнаружил, что заполнение внутреннего элемента div будет перемещать содержимое внутри элемента div, если содержащийся элемент div имеет фиксированный размер. Вам придется либо плавать, либо абсолютно позиционировать элемент заголовка, но в противном случае я не пробовал это для div с переменным размером.
источник