CSS floats - как сохранить их на одной строке?

Я хочу иметь два элемента в одной строке, используя "float: left" для элемента слева.

У меня нет проблем с этим. Проблема в том, что я хочу, чтобы два элемента оставались на одной строке, даже если вы изменили размер браузера очень мало. Вы знаете... как это было с таблицами.

Цель состоит в том, чтобы держать элемент справа от упаковки независимо от того, что.

Итак, как я могу сказать браузеру с помощью CSS, что я предпочитаю растягивать содержащий div, чем обернуть его, чтобы div float: right; находился ниже float: left; div?

Пример: что я хочу:

                                             \
 +---------------+  +------------------------/
 | float: left;  |  | float: right;          \
 |               |  |                        /
 |               |  |content stretching      \   Screen Edge
 |               |  |the div off the screen  /  <---
 +---------------+  +------------------------\
                                             /

Ответ 1

Оберните свой плавающий <div> в контейнер <div>, который использует этот кросс-браузерный хаб:

.minwidth { min-width:100px; width: auto !important; width: 100px; }

Вам также может потребоваться установить "переполнение", но, вероятно, нет.

Это работает, потому что:

  • Объявление !important в сочетании с min-width заставляет все оставаться в одной строке в IE7 +
  • IE6 не реализует min-width, но имеет ошибку, так что width: 100px переопределяет объявление !important, в результате чего ширина контейнера составляет 100 пикселей.

Ответ 2

Другим вариантом является вместо float установить свойство white-space nowrap в родительский div:

.parent {
     white-space: nowrap;
}

и reset пробел и использовать встроенный блок отображения, поэтому div остаются в одной строке, но вы все равно можете дать ему ширину.

.child {
    display:inline-block;
    width:300px;
    white-space: normal;
}

Вот JSFiddle: https://jsfiddle.net/9g8ud31o/

Ответ 3

Оберните ваши поплавки в div с минимальной шириной больше, чем объединенная ширина + край плавающих элементов.

Никаких хаков или таблиц HTML не требуется.

Ответ 4

Решение 1:

display: table-cell (не поддерживается широко)

Решение 2:

таблицы

(Я ненавижу хаки.)

Ответ 5

Другая опция: не плавайте правую колонку; просто дайте ему левый край, чтобы переместить его за пределы поплавка. Вам понадобится взломать или исправить IE6, но это основная идея.

Ответ 6

Вы уверены, что плавающие элементы уровня блока - лучшее решение этой проблемы?

Часто с трудностями CSS в моем опыте выясняется, что причина, по которой я не вижу способа сделать то, что хочу, - это то, что я попал в туннельное видение относительно моей разметки (думая "как можно Я заставляю эти элементы делать это?" ) Вместо того, чтобы возвращаться и смотреть на то, что именно это мне нужно, и, возможно, немного переделать мой html, чтобы облегчить это.

Ответ 7

Я бы рекомендовал использовать таблицы для этой проблемы. у меня есть аналогичная проблема, и пока таблица просто используется для отображения некоторых данных, а не для макета главной страницы, это нормально.

Ответ 8

Добавьте эту строку в свой селектор перемещаемых элементов

.floated {
    float: left;
    ...
    box-sizing: border-box;
}

Это предотвратит добавление дополнений и границ к ширине, поэтому элемент всегда остается в строке, даже если у вас есть, например. три элемента с шириной 33.33333%

Ответ 9

Когда пользователь уменьшает размер окна по горизонтали, и это приводит к тому, что поплавки стекаются вертикально, удаляйте поплавки, а во втором div (это был float) используйте margin-top: -123px (ваше значение) и margin-left: 444px (ваш значение), чтобы расположить divs, когда они появились с поплавками. Когда это делается, когда окно сужается, правый div остается на месте и исчезает, когда страница слишком узкая, чтобы включить его.... что (для меня) лучше, чем иметь правый "div" div ниже левого div, когда окно браузера сужается пользователем.

Ответ 10

То, как я это обошлось, это использовать некоторый 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());
});