У меня есть 2 элемента: один в левой части и один в правой части моей страницы. Тот, что слева, имеет фиксированную ширину, и я хочу, чтобы тот, что справа, заполнил оставшееся пространство.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
источник
источник
Ответы:
Это, кажется, для достижения того, что вы собираетесь.
источник
Проблема, которую я нашел с ответом Баушли, состоит в том, что если правая колонка длиннее левой, она просто обернется вокруг левой и возобновит заполнение всего пространства. Это не то поведение, которое я искал. После поиска множества «решений» я нашел учебное пособие (теперь ссылка не работает) по созданию трехколоночных страниц.
Автор предлагает три различных способа: один фиксированной ширины, один с тремя переменными столбцами и один с фиксированными внешними столбцами и средней шириной переменной ширины. Гораздо более элегантно и эффективно, чем другие примеры, которые я нашел. Значительно улучшилось мое понимание макета CSS.
В основном, в простом случае выше, плавают первый столбец влево и задайте ему фиксированную ширину. Затем дайте столбцу справа левое поле, которое немного шире первого столбца. Вот и все. Выполнено. Код Аллы Баушли:
Вот демо-версия в стеке фрагментов и jsFiddle
На примере Бушли левый столбец содержит другой столбец справа. Как только левый столбец заканчивается, правый снова начинает заполнять все пространство. Здесь правый столбец просто выравнивается дальше по странице, а левый столбец занимает большой жирный край. Нет необходимости взаимодействия потоков.
источник
Решение исходит из свойства display.
По сути, вам нужно сделать так, чтобы два div действовали как ячейки таблицы. Таким образом, вместо использования
float:left
вам придется использоватьdisplay:table-cell
оба div-элемента, а для динамической ширины div вы также должны установитьwidth:auto;
. Оба элемента должны быть помещены в контейнер шириной 100% соdisplay:table
свойством.Вот CSS:
И HTML:
ВАЖНО: Для Internet Explorer вам нужно указать свойство float в динамическом div ширины, иначе пространство не будет заполнено.
Я надеюсь, что это решит вашу проблему. Если вы хотите, вы можете прочитать полную статью, которую я написал об этом в моем блоге .
источник
В наши дни вы должны использовать
flexbox
метод (может быть адаптирован для всех браузеров с префиксом браузера).Дополнительная информация: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
источник
Поскольку это довольно популярный вопрос, я склонен поделиться хорошим решением с использованием BFC.
Пример кодепа следующего здесь .
В этом случае
overflow: auto
запускает контекстное поведение и заставляет правый элемент расширяться только до доступной оставшейся ширины, и он естественным образом расширяется до полной ширины, если.left
исчезает. Очень полезный и чистый трюк для многих макетов пользовательского интерфейса, но, возможно, сначала трудно понять, «почему он работает».источник
auto
может вызвать это в зависимости от его содержимого. Вы также можете использовать любое другое значение переполнения, чтобы получить тот же эффект, которыйhidden
может работать лучше для вашего случая.Если вам не нужна совместимость со старыми версиями некоторых браузеров (например, IE
108 или менее), вы можете использоватьcalc()
функцию CSS:источник
Ответ @ Boushley был самым близким, однако есть одна проблема, которая не была решена. Право DIV занимает всю ширину браузера; содержимое занимает ожидаемую ширину. Чтобы лучше увидеть эту проблему:
http://jsfiddle.net/79hpS/
Содержимое находится в правильном месте (в Firefox), однако ширина неверна. Когда дочерние элементы начинают наследовать ширину (например, таблицу с
width: 100%
), им присваивается ширина, равная ширине браузера, из-за чего они переполняются справа от страницы и создают горизонтальную полосу прокрутки (в Firefox) или не плавают и толкаются вниз ( в хроме).Вы можете легко это исправить , добавив
overflow: hidden
в правую колонку. Это дает вам правильную ширину как для содержимого, так и для div. Кроме того, таблица получит правильную ширину и заполнит оставшуюся доступную ширину.Я попробовал некоторые другие решения выше, они не работали полностью с некоторыми крайними случаями и были просто слишком сложны, чтобы их исправлять. Это работает, и это просто.
Если есть какие-либо проблемы или проблемы, не стесняйтесь поднимать их.
источник
overflow: hidden
действительно исправляет это, спасибо. (Отмеченный ответ неверен, кстати, поскольку наright
самом деле занимает все доступное пространство на родительском, вы можете увидеть это во всех браузерах при проверке элементов)overflow: hidden
помещает правый столбец в собственный контекст форматирования блока. Блочные элементы занимают все доступное им горизонтальное пространство. Смотрите: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
Атрибут является ключевым. Как вы говорите, он перестает#right
расширяться снизу#left
. Это очень аккуратно решает проблему, с которой я столкнулся при использовании изменяемого размера jQuery UI - с#right
установленным атрибутом overflow и#left
установленным изменяемым размером у вас есть простая подвижная граница. См. Jsfiddle.net/kmbro/khr77h0t .Вот небольшое исправление для принятого решения, которое предотвращает попадание правого столбца под левый столбец. Заменены
width: 100%;
сoverflow: hidden;
хитрым решением, если кто не знал об этом.http://jsfiddle.net/MHeqG/2600/
[править] Также проверьте пример для трехколоночной разметки: http://jsfiddle.net/MHeqG/3148/
источник
Если вы пытаетесь заполнить оставшееся пространство во flexbox между двумя элементами, добавьте следующий класс в пустой div между двумя, которые вы хотите разделить:
источник
использование
display:flex
источник
Кажется, ответ Баушли - лучший способ устроить это, используя поплавки. Однако не без его проблем. Вложенные плавающие элементы в расширенном элементе не будут вам доступны; это сломает страницу.
Показанный метод в основном «подделывает», когда дело доходит до расширяющегося элемента - он на самом деле не плавающий, он просто играет с плавающими элементами фиксированной ширины, используя свои поля.
Тогда проблема именно в том, что расширяющийся элемент не является плавающим. Если вы попытаетесь использовать вложенные плавающие элементы в раскрывающемся элементе, эти «вложенные» плавающие элементы на самом деле вообще не будут вложенными; когда вы попытаетесь засунуть
clear: both;
под свои «вложенные» всплывающие элементы, вы в конечном итоге также очистите поплавки верхнего уровня.Затем, чтобы использовать решение Boushley, я хотел бы добавить, что вы должны разместить div, такой как: .fakeFloat {height: 100%; ширина: 100%; плыть налево; } и поместите это прямо в расширенный div; все содержимое расширенного div должно идти внутри этого элемента fakeFloat.
По этой причине я бы рекомендовал использовать таблицы в этом конкретном случае. Плавающие элементы на самом деле не предназначены для того, чтобы выполнять расширение, которое вам нужно, в то время как решение с использованием таблицы тривиально. Обычно приводятся аргументы в пользу того, что плавающее отображение более подходит для макетов, а не для таблиц ... но вы все равно не используете здесь плавающее, вы имитируете его - и этот тип опровергает назначение стилистического аргумента для этого конкретного случая, в мое скромное мнение.
источник
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Я попробовал вышеупомянутые решения для левой жидкости, и фиксированное правое, но ни одно из них не сработало (я знаю, что вопрос для обратного, но я думаю, что это актуально). Вот что сработало:
источник
У меня была похожая проблема, и я нашел решение здесь: https://stackoverflow.com/a/16909141/3934886
Решение для колонок с фиксированным центром и жидкостной стороны.
Если вы хотите фиксированный левый столбец, просто измените формулу соответственно.
источник
Вы можете использовать свойства Grid CSS, это наиболее понятный, чистый и интуитивно понятный способ структурирования ваших блоков.
источник
Интересно, что никто не использовал
position: absolute
сposition: relative
Итак, другое решение будет:
HTML
CSS
Пример Jsfiddle
источник
/ * * css * /
/ * * html * /
источник
У меня есть очень простое решение для этого! // HTML
// CSS
Ссылка: http://jsfiddle.net/MHeqG/
источник
У меня была похожая проблема, и я нашел следующую, которая работала хорошо
CSS:
HTML:
Этот метод не переносится, когда окно сокращается, но автоматически расширяет область содержимого. Он сохранит статическую ширину для меню сайта (слева).
А для автоматического расширения поля содержимого и демонстрации левой вертикальной рамки (меню сайта):
https://jsfiddle.net/tidan/332a6qte/
источник
Попробуйте добавить позицию
relative
, удалитьwidth
иfloat
свойства с правой стороны, затем добавитьleft
иright
свойство со0
значением.Кроме того, вы можете добавить
margin left
правило со значением, основанным на ширине левого элемента (+ несколько пикселей, если вам нужно пространство между ними) чтобы сохранить его положение.Этот пример работает для меня:
источник
Попробуй это. Это сработало для меня.
источник
Я работал над этой проблемой в течение двух дней, и у меня есть решение, которое может сработать для вас и всех, кто пытается сделать отзывчивую фиксированную ширину левой, а правая сторона заполняет оставшуюся часть экрана, не оборачиваясь вокруг левой стороны. Предполагаю, что я намерен сделать страницу адаптивной в браузерах и на мобильных устройствах.
Вот код
Вот моя скрипка, которая может работать для вас так же, как и для меня. https://jsfiddle.net/Larry_Robertson/62LLjapm/
источник
Правила для предметов и контейнеров;
Используйте пробел: nowrap; для текстов в последних пунктах для их неструктурирования.
Элемент X% | Элемент Y% | Элемент Z%
Общая длина всегда = 100%!
если
тогда
Элемент X = 70%
Элемент X является доминирующим (первые элементы доминируют в макете таблицы CSS)!
Попробуйте max-content; свойство для div внутри для распространения div в контейнере:
}
источник
Самое простое решение - использовать маржу. Это также будет отзывчивым!
источник
Самое простое решение - просто сделать ширину левого div равной 100% - ширину правого div плюс любой отступ между ними.
https://codepen.io/tamjk/pen/dybqKBN
источник
Я столкнулся с этой же проблемой, пытаясь расположить некоторые элементы управления jqueryUI . Хотя общая философия сейчас "использовать
DIV
вместоTABLE
», я обнаружил, что в моем случае использование TABLE работает намного лучше. В частности, если вам нужно прямое выравнивание внутри двух элементов (например, вертикальное центрирование, горизонтальное центрирование и т. Д.), Опции, доступные в TABLE, предоставляют простые, интуитивно понятные элементы управления для этого.Вот мое решение:
источник
<font>
,<b>
и т.д. HTML усовершенствованного прошлого меньше фокусироваться на презентации.overflow
.display:table
достижение желаемого внешнего вида не табличных данных, является чистым. Принуждение не табличных данных, таких как столбцы страниц или элементы управления формы, в таблицы HTML для управления макетом является нечистым.