Почему происходит перенос между последовательными блоками, несмотря на пробелы в блоке?

Предположим, вы хотите создать форму с метками для ввода и сделать ее каким-то образом отзывчивой, отображая как можно больше полей ввода вместе с их метками в каждой строке. Для этого я подумал об автоматическом переносе пробелов: нет пробела между метками и полями ввода, но пробел между каждой группой.

<body>
    <form>
        <label for="aa">AA</label><input type="text" name="aa" id="aa" />
        <label for="bb">BB</label><input type="text" name="bb" id="bb" />
        <label for="cc">CC</label><input type="text" name="cc" id="cc" />
        <label for="dd">DD</label><input type="text" name="dd" id="dd" />
        <label for="ee">EE</label><input type="text" name="ee" id="ee" />
        <label for="ff">FF</label><input type="text" name="ff" id="ff" />
    </form>
</body>

Как видите, между каждой «группой» метка + ввод есть пробел из-за разрыва строки. Но это, похоже, не подходит для автоматической упаковки, поскольку кажется, что упаковка выполняется между входами и метками почти всегда. Я хочу обернуть пространство, а не между меткой и вводом!

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

Заранее спасибо за помощь!


person Thomas P.    schedule 30.06.2015    source источник


Ответы (4)


Простой способ без дополнительной разметки - использовать float и clear.

label,
input {
    float: left;
}

label {
    clear: left;
}

Демо

person Guy    schedule 30.06.2015
comment
OP четко заявил, что он хочет переносить каждую метку + ввод, но без дополнительной разметки. Может быть, он не это ищет, но это то, о чем спрашивали. - person Guy; 01.07.2015
comment
хотите сделать его каким-то образом отзывчивым, отображая как можно больше полей ввода вместе с их ярлыками в каждой строке. Этот метод отображает только один набор в строке. - person Jacob; 01.07.2015
comment
Он также заявляет: Я хочу обернуть пространство, а не между меткой и полем ввода! - person Guy; 01.07.2015
comment
Я уверен, что ОП прояснит, когда он вернется, и мы сможем найти решение, которое ему нужно. - person Guy; 01.07.2015
comment
Извините за непонятный вопрос, этот ответ действительно не соответствует моим потребностям. Я хочу получить результат других ответов (отображать столько меток + ввода в одной строке, а не ОДИН ввод + метка в строке) без использования div, но это, похоже, невозможно. - person Thomas P.; 01.07.2015

OP хочет, чтобы метка элементов + ввод обернулась как один элемент, хотя это не так. Поэтому при изменении размера окна не нужно разделять метку и ввод в отдельные строки. Я не знаю, как это сделать, не заключив их в другой элемент, например: https://jsfiddle.net/goscuon5/

div { display: inline-block; }

Или вы можете использовать элемент со свойством по умолчанию display: inline-block;

Я не думаю, что иначе возможно.

person Patrick Hamil    schedule 30.06.2015
comment
это был и мой ответ. - person guergana; 30.06.2015
comment
У вас они не будут отображаться в одной строке, этот ответ будет, и я думаю, что OP хотел этого поведения. Если нет, то ваш ответ работает. - person Patrick Hamil; 30.06.2015
comment
Хорошо. В нем говорится: «Скажем, вы хотите создать форму с метками для ввода и хотите сделать ее каким-то образом отзывчивой, отображая столько входов вместе с их метками в каждой строке». Он хочет отобразить как можно больше входных данных в одной строке. - person guergana; 01.07.2015
comment
Верный. Это мой ответ. Одна строка, но она объединяет метку + ввод вместе, как хотел OP. Ваш код добавляет их все в их СОБСТВЕННУЮ строку, а не в ОДНУ строку. - person Patrick Hamil; 01.07.2015
comment
это делает .. Я добавил CSS вне фрагмента. но теперь я его интегрировал. Наши ответы были такими же. - person guergana; 01.07.2015
comment
Действительно, ваши ответы сейчас такие же. Я хотел добиться этого результата без дополнительной разметки, но это не представляется возможным, поэтому я воспользуюсь этим. - person Thomas P.; 01.07.2015

Собственно, этого можно достичь, заключив теги ввода внутрь меток и добавив к меткам правило CSS:

label{
  white-space:nowrap;
  }
<body>
    <form>
        <label for="aa">AA<input type="text" name="aa" id="aa" /></label>
        <label for="bb">BB<input type="text" name="bb" id="bb" /></label>
        <label for="cc">CC<input type="text" name="cc" id="cc" /></label>
        <label for="dd">DD<input type="text" name="dd" id="dd" /></label>
        <label for="ee">EE<input type="text" name="ee" id="ee" /></label>
        <label for="ff">FF<input type="text" name="ff" id="ff" /></label>
    </form>
</body>

person Thomas P.    schedule 01.07.2015

person    schedule
comment
Иногда работа и реализация не связаны. - person divy3993; 01.07.2015
comment
Хм. Ничего не реализовал. Похоже, здесь есть люди, которые еще не участвуют в работе, чтобы беспокоить других. - person guergana; 01.07.2015
comment
Это решение выводит точно так же, как опубликованный код OP. - person Guy; 01.07.2015
comment
Не совсем. Ярлыки сгруппированы здесь с входами ... Я думаю, что лучше, если он прояснит, чего он пытается достичь. - person guergana; 01.07.2015
comment
Моя цель - добиться этого результата без дополнительной разметки, но, поскольку это не представляется возможным, я воспользуюсь этим. - person Thomas P.; 01.07.2015
comment
Слава богу, ты ответил. Здесь мы спорили. - person guergana; 01.07.2015