Я хочу, чтобы два элемента были в одной строке, используя float: left для элемента слева.
У меня нет проблем добиться этого в одиночку. Проблема в том, что я хочу, чтобы два элемента были оставаться в одной строке даже когда вы изменяете размер браузера очень маленьким. Знаете ... как это было со столами.
Цель состоит в том, чтобы элемент справа не оборачивался не важно что.
Как сообщить браузеру с помощью CSS, что я предпочитаю растянуть содержащий div, чем обертывать его, чтобы div float: right; находился ниже float: left;div?
что я хочу:
\
+---------------+ +------------------------/
| float: left; | | float: right; \
| | | /
| | |content stretching \ Screen Edge
| | |the div off the screen / <---
+---------------+ +------------------------\
/
@JoeCool На сайте UX SE уже есть инструмент для создания макетов. meta.ux.stackexchange.com/questions/1291/…






Оберните свои плавающие <div> в контейнер <div>, который использует этот кроссбраузерный хак с минимальной шириной:
.minwidth { min-width:100px; width: auto !important; width: 100px; }
Вам также нужно установить май "переполнение", но, вероятно, нет.
Это работает, потому что:
!important в сочетании с min-width заставляет все оставаться в той же строке в IE7 +min-width, но в нем есть ошибка, заключающаяся в том, что width: 100px переопределяет объявление !important, в результате чего ширина контейнера составляет 100 пикселей.Это отлично работает для двух поплавков, но не для трех. Может на троих работать ??
Единственная проблема заключается в том, что он устанавливает фиксированную минимальную ширину.
Это не решение, это просто минимальная ширина, когда ваш контент становится очень маленьким (см. Вопрос), поэтому ниже 100 пикселей у вас такая же проблема. Это остается проблемой, особенно с ячейками таблицы.
Совершенно шокирующий - моя проблема решена мгновенно. Я боролся с этой проблемой в простом двухколоночном макете начальной загрузки с большим количеством хаков, чем я могу назвать, но это сработало отлично. Спасибо за объяснение, почему эта работа - занятие увлекательное, дом такое.
Это может работать с div, но я только что протестировал его с ul / li, и он не работает :(
Если бы стандарт CSS был пересмотрен, чтобы исключить необходимость использования минимального / максимального размера, это был бы отличный день.
@MattM. не говоря уже о том, что работа с контентом произвольной длины не гарантируется.
вау, когда вам приходится полагаться на ошибку, чтобы гарантировать кроссбраузерную совместимость, вы знаете, что протокол пора обновлять.
Вы уверены, что плавающие элементы уровня блока - лучшее решение этой проблемы?
Часто с трудностями CSS на моем опыте выясняется, что причина, по которой я не вижу способа сделать то, что я хочу, заключается в том, что я застрял в туннельном видении в отношении моей разметки (думая: «как я могу сделать эти элементы делают это? ") вместо того, чтобы вернуться назад и посмотреть, чего именно мне нужно достичь, и, возможно, немного переработать свой html, чтобы облегчить это.
ну, он работает практически для всего, и существующий макет основан на нем, я просто пытаюсь исправить проблему с разрывом макета, когда вы слишком увеличиваете размер текста ИЛИ изменяете размер окна браузера менее 700 пикселей в ширину
Другой вариант: не перемещайте правую колонку; просто дайте ему левое поле, чтобы переместить его за пределы поплавка. Чтобы исправить IE6, вам понадобится один или два взлома, но это основная идея.
Решение 1:
display: table-cell (широко не поддерживается)
Решение 2:
столы
(Ненавижу хаки.)
я бы рекомендовал использовать таблицы для этой проблемы. У меня аналогичная проблема, и пока таблица используется только для отображения некоторых данных, а не для макета главной страницы, все в порядке.
Оберните ваши поплавки в div с минимальной шириной больше, чем объединенная ширина + поля для плавающих объектов.
Никаких хаков или HTML-таблиц не требуется.
Другой вариант - вместо плавающего установить свойство white-space nowrap для родительского div:
.parent {
white-space: nowrap;
}
и сбросьте пустое пространство и используйте отображение встроенного блока, чтобы блоки div оставались на одной строке, но вы все равно можете задать ширину.
.child {
display:inline-block;
width:300px;
white-space: normal;
}
Вот JSFiddle: https://jsfiddle.net/9g8ud31o/
Определенно лучшее решение, которое я видел. Он работает для моего варианта использования, но мне интересно, насколько хорошо он поддерживается. К счастью, использование поплавков для ВСЕГО постепенно уходит в прошлое.
Вы можете объяснить, как это работает? или хоть какие-то ссылки?
@AnirudhanJ Это не так уж сложно. Inline-block заставляет элементы перемещаться нормально со встроенным текстом (но сохраняет некоторые возможности заполнения / поля блока), и вы буквально просто говорите CSS не переносить текст с помощью опции white-space: nowrap (применяя «normal "снова ребенку, чтобы он не распространился на все)
Но как сделать так, чтобы div справа перемещался в правую часть экрана? Это просто помещает два встроенных блока рядом друг с другом, которые не разрывают строку.
вы также можете использовать межбуквенный интервал: -3 пикселя (или любое другое значение, которое вам подходит), чтобы удалить пространство между элементами встроенного блока. PS: лучше, чем принятый ответ;
Я решил использовать jQuery. Причина, по которой я сделал это таким образом, заключалась в том, что A и B были шириной в процентах.
HTML:
<div class = "floatNoWrap">
<div id = "A" style = "float: left;">
Content A
</div>
<div id = "B" style = "float: left;">
Content B
</div>
<div style = "clear: both;"></div>
</div>
CSS:
.floatNoWrap
{
width: 100%;
height: 100%;
}
jQuery:
$("[class~='floatNoWrap']").each(function () {
$(this).css("width", $(this).outerWidth());
});
Фреймворк для CSS? У меня есть -jquery для поиска ВСЕ JavaScript, и из-за полного и полного игнорирования качества мы должны начать явный поиск CSS с -jquery? Делай это правильно или не делай вообще.
Когда пользователь уменьшает размер окна по горизонтали и это приводит к тому, что числа с плавающей запятой складываются по вертикали, удалите числа с плавающей запятой, а во втором div (это было число с плавающей запятой) используйте margin-top: -123px (ваше значение) и margin-left: 444px (ваше значение), чтобы разместите блоки так, как они появились, с помощью поплавков. Когда это сделано таким образом, когда окно сужается, правый блок div остается на месте и исчезает, когда страница становится слишком узкой для его включения. ... что (для меня) лучше, чем когда правый div "прыгает" вниз ниже левого div, когда окно браузера сужается пользователем.
Добавьте эту строку в свой селектор плавающих элементов
.floated {
float: left;
...
box-sizing: border-box;
}
Это предотвратит добавление отступов и границ к ширине, поэтому элемент всегда останется в строке, даже если у вас, например, есть. три элемента шириной 33,33333%
Насколько круто было бы, если бы StackOverlow добавил небольшой виджет для рисования, чтобы мы могли создавать эти диаграммы с помощью мыши? Может быть более подходящим для ориентированных на дизайн сайтов SE ... но, тем не менее, это было бы круто.