Як зберегти CSS з плаваючою лінією в один рядок?


216

Я хочу мати два елементи в одному рядку, використовуючи float: leftдля елемента зліва.

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

Мета полягає в тому, щоб виріб справа не загортався, незважаючи ні на що .

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

що я хочу:

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

55
Як круто було б, якби StackOverlow додав невеликий віджет для малювання, щоб ми могли робити ці схеми за допомогою миші? Можливо, це більше підходить для сайтів, орієнтованих на дизайн, але все одно це буде чудово.
JoeCool

5
@JoeCool На сайті UX SE насправді вже є інструмент для створення макетів на ньому. meta.ux.stackexchange.com/questions/1291/…
frank hadder

Відповіді:


77

Загорніть ваші плаваючі <div>s в контейнер, <div>який використовує цей міні-браузерний хак міні-ширини:

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

Можливо, вам доведеться встановити "переповнення", але, можливо, ні.

Це працює, оскільки:

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

Це чудово працює для двох поплавців, але не трьох. Чи може це працювати на трьох ??
tylerthemiler

15
Єдина проблема полягає в тому, що він примушує фіксовану мінімальну ширину.
Matt Montag

6
Це не рішення, це лише мінімальна ширина, коли ваш вміст стає дуже маленьким (див. Запитання), тому нижче 100 пікселів у вас така сама проблема. Особливо для комірок таблиці це залишається проблемою.
Sanne

Абсолютно шокуюче - миттєво вирішили мою проблему. Я сперечався з цією проблемою у простому макеті завантажувального репліка з двома стовпцями з більшою кількістю хаків, ніж я можу назвати, але це спрацювало чудово. Дякую за пояснення, чому ця робота - захоплююча штука, головне.
nocarrier

Це може працювати з divs, але я щойно перевірив це за допомогою ul / li, і це не працює :(
AsGoodAsItGets

132

Іншим варіантом є, замість плаваючого, встановити властивість white-space nowrap до батьківського div:

.parent {
     white-space: nowrap;
}

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

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

Ось JSFiddle: https://jsfiddle.net/9g8ud31o/


4
Безумовно, найкраще рішення, яке я бачив. Це працює для мого випадку використання, але мені цікаво, наскільки добре воно підтримується. На щастя, використання поплавців для ВСЕ поступово стає в минулому.
Ryan Ore

1
Чи можете ви пояснити, як це працює? чи будь-які посилання принаймні?
Anirudhan J

4
@AnirudhanJ Це не надто складно. Inline-block робить елементи нормально потоковими з вбудованим текстом (але зберігає деякі можливості заповнення / полів блоку), і ви буквально просто говорите CSS, щоб не обгортав текст параметром white-space: nowrap (застосовуючи "нормальний "знову дитині, щоб уникнути її поширення на все)
Брайан,

Як же змусити div, що знаходиться праворуч, плавати праворуч від екрана? Це просто ставить два вбудовані блоки поруч один з одним, які не дозволяють розривати рядок.
addMitt

Ви також можете використовувати інтервал між літерами: -3px (або будь-яке інше значення, яке вам підходить ), щоб видалити простір між елементами вбудованого блоку. PS: краще прийнятої відповіді ;
Клавдіу

15

Оберніть ваші плаваючі машини в div з мінімальною шириною, більшою за комбіновану ширину + поле плавзаводів.

Не потрібні хаки або таблиці HTML.


10

Рішення 1:

дисплей: комірка таблиці (не широко підтримується)

Рішення 2:

таблиці

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


8

Інший варіант: не плавати правою колонкою; просто дайте йому ліве поле, щоб перемістити його за межі поплавця. Вам знадобиться хакер чи два, щоб виправити IE6, але це основна ідея.


4

Ви впевнені, що плаваючі елементи рівня блоку є найкращим рішенням цієї проблеми?

Часто із труднощами CSS на моєму досвіді виявляється, що причина, по якій я не бачу способу зробити те, що я хочу, полягає в тому, що я потрапив у бачення тунелю щодо своєї розмітки (думаючи, "як я можу зробити це елементи роблять це ? "), а не повертатися назад і дивитись, чого саме це мені потрібно досягти і, можливо, трохи переробити свій html, щоб полегшити це.


добре, він працює майже на все, і існуючий макет базується на ньому, я просто намагаюся вирішити проблему з розбиттям макета, коли ви занадто збільшуєте розмір тексту АБО змінюєте розмір вікна браузера менше 700px в ширину
Jiaaro

2

я б рекомендував використовувати таблиці для цієї проблеми. У мене подібне питання, і поки таблиця використовується лише для відображення деяких даних, а не для макета головної сторінки, це нормально.


2

Додайте цей рядок до селектора з плаваючим елементом

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

Це запобіжить додаванню заповнення та меж до ширини, тому елемент завжди залишається в рядку, навіть якщо у вас є напр. три елементи шириною 33,33333%


0

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


-3

Я обійшов це шляхом використання деяких jQuery. Причиною того, що я зробив це таким чином, було те, що А і В були відсотковою шириною.

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());
});

1
Фреймворк для CSS? Мені потрібно -jquery для ВСІХ пошукових запитів JavaScript, і через повне і повне ігнорування якості ми також повинні почати явний пошук CSS з -jquery? Робіть правильно, або взагалі не робіть.
Джон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.