Как вставлять разрывы строк в HTML-документы с помощью CSS

Я пишу веб-службу и хочу вернуть данные как XHTML. Поскольку это данные, а не разметка, я хочу, чтобы они были очень чистыми - никаких лишних <div> или <span>. Однако для удобства разработчиков я также хотел бы сделать возвращаемые данные разумно удобочитаемыми в браузере. Для этого я думаю, что хороший способ сделать это - использовать CSS.

Я специально хочу вставить разрывы строк в определенных местах. Я знаю display: block, но он не работает в той ситуации, с которой я сейчас пытаюсь справиться - form с полями <input>. Что-то вроде этого:

<form>
  Thingy 1: <input class = "a" type = "text" name = "one" />
  Thingy 2: <input class = "a" type = "text" name = "two" />
  Thingy 3: <input class = "b" type = "checkbox" name = "three" />
  Thingy 4: <input class = "b" type = "checkbox" name = "four" />
</form>

Я бы хотел, чтобы каждая метка отображалась в той же строке, что и соответствующее поле ввода. Я пробовал это:

input.a:after { content: "\a" }

Но это, похоже, ничего не дало.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
40
0
77 629
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Один из вариантов - указать шаблон XSLT в вашем XML, который (некоторые) браузеры будут обрабатывать, позволяя вам включать представление с разметкой, CSS, цветами и т. д., Которые не должны влиять на потребителей веб-службы.

Находясь в XHTML, вы можете просто добавить некоторые отступы вокруг элементов с помощью CSS, например.

форма input.a {margin-bottom: 1em}

Используйте javascript. Если вы используете библиотеку jQuery, попробуйте что-нибудь вроде этого:

$("input.a").after("<br/>")

Или что вам нужно.

Никогда не полагайтесь на javascript, чтобы сделать то, что может легко сделать html / css, потому что нет постепенного ухудшения.

Loren Segal 15.09.2008 23:53

Всегда нужно полагаться на js, IF-AND-ONLY-IF, ваш код генерируется какой-либо другой структурой или библиотекой. В противном случае мы можем разместить любые html-теги где захотим :)

sura2k 21.06.2013 21:51

Я согласен с Джоном Милликиным. Вы можете добавить теги <span> или что-то еще вокруг каждой строки с определенным классом CSS, а затем при необходимости сделать их display: block. Единственный другой способ, который я могу придумать, - это сделать <input> встроенным блоком и заставить его выдавать «очень большие» padding-right, что приведет к переносу встроенного содержимого.

Даже в этом случае лучше всего логически сгруппировать данные в теги <span> (или аналогичные), чтобы указать, что эти данные принадлежат друг другу (а затем позволить CSS выполнить позиционирование).

следующее даст вам новые строки. Это также приведет к появлению дополнительных пробелов впереди ... вам придется испортить отступ в исходном тексте, удалив табуляцию.

form { white-space: pre }
Ответ принят как подходящий

Лучше всего обернуть все ваши элементы в элементы меток, а затем применить CSS к меткам. Псевдоклассы: before и: after не полностью поддерживаются согласованным образом.

Теги ярлыков имеют множество преимуществ, включая повышенную доступность (на нескольких уровнях) и многое другое.

<label>
    Thingy one: <input type = "text" name = "one">;
</label>

затем используйте CSS для элементов метки ...

label {display:block;clear:both;}

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

Craig Andera 18.09.2008 15:43

Тем лучше, чтобы программное обеспечение имело согласованные индикаторы запуска и остановки.

Kzqai 29.09.2011 23:08

(Вам не нужно for = "one", когда вы оборачиваете метку вокруг элемента ввода.)

Jan Aagaard 18.12.2012 12:14

Отбросьте for = "one" и id = "one", это совершенно не нужно и мешает, потому что для него уже определен name.

rvighne 22.01.2014 06:15

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

eyurdakul 30.01.2014 22:28

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

Я бы порекомендовал вам настроить это так:

<form>
  <ul>
    <li><label>Thingy 1:</label><input class = "a" type = "text" name = "one" /></li>
    <li><label>Thingy 1:</label><input class = "a" type = "text" name = "one" /></li>
 </ul>
</form>

Тогда CSS становится намного проще.

Не забудьте указать атрибуты label "for", если вы их опустите, нет смысла использовать метку в первую очередь, поскольку она никак не связана с элементом ввода.

Eric DeLabar 17.09.2008 00:22

Чтобы продолжить, вы также можете вложить элемент ввода (или выбрать и т. д.) Внутрь метки и безопасно опустить атрибут «for».

BrewinBombers 01.12.2009 23:38

Сарказм на ТАК ... мне не нравится.

rvighne 22.01.2014 06:26

Элементы управления формы обрабатываются браузерами особым образом, поэтому многие вещи не обязательно работают должным образом. Одна из этих вещей - сгенерированный контент - он не работает для элементов управления формой. Вместо этого оберните этикетки в <label> и используйте label:before { content: '\a' ; white-space: pre; }. Вы также можете сделать это, перемещая все и добавляя clear: left к элементам <label>.

когда у меня были громкие слова white-space: pre-line или нет white-space: pre-wrap, я не уверен в кроссбраузерности :)

zanona 11.03.2012 19:49

Почему \ является символом новой строки (я вижу, что он работает, но не могу найти никаких документов по этому поводу).

SamGoody 28.06.2012 01:42

@SamGoody упоминается в этом документе W3C w3.org/wiki/CSS/Properties/white-space, хотя они не говорят, почему они выбрали \ A вместо \ N или \ R ...

Alexis Wilke 04.11.2012 03:56

Обратная косая черта, за которой следует шестнадцатеричное число, интерпретируется как ссылка на символ. A - это десятый символ Unicode, который является символом перевода строки.

Jim 09.02.2013 02:39

Решение, которое я искал. Спасибо

Marco Mangia 27.09.2013 16:13

@AlexisWilke Чтобы добавить к тому, что объяснил Джим: A = 10 в шестнадцатеричном формате (например, 0xA) и символ 10 Unicode - это новая строка. Они не выбрали явно \a вместо \n.

rvighne 22.01.2014 06:26

Элемент CSS clear, вероятно, - это то, что вы ищете для получения разрывов строк. Что-то рядом:

#login form input { clear: both; }

гарантирует, что никакие другие плавающие элементы не останутся по обе стороны от ваших полей ввода.

Ссылка

<form>
   <label>Thingy 1: <input class = "a" type = "text" name = "one" /></label>
   <label>Thingy 2: <input class = "a" type = "text" name = "two" /></label>
   <label>Thingy 3: <input class = "b" type = "checkbox" name = "three" /></label>
   <label>Thingy 4: <input class = "b" type = "checkbox" name = "four" /></label>
</form>

и следующий css

form label { display: block; }

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

CSS

<style type = "text/css">
  .lb {
    display:block;
    clear:both;
  }
</style>

HTML

<form>
  <span class = "lb">Thingy 1: <input class = "a" type = "text" name = "one" /></span>
  <span class = "lb">Thingy 2: <input class = "a" type = "text" name = "two" /></span>
  <span class = "lb">Thingy 3: <input class = "b" type = "checkbox" name = "three" /></span>
  <span class = "lb">Thingy 4: <input class = "b" type = "checkbox" name = "four" /></span>
</form>

Идея правильная, но элемент «метка» более семантически верен.

Eric DeLabar 17.09.2008 00:24

Кроме того, вся разница между <span> и <div> в том, что промежутки - это встроенные элементы, а div - это блочные элементы. Если вы собираетесь таким образом злоупотреблять промежутками, просто используйте div.

Visionary Software Solutions 26.09.2011 23:57

<style type = "text/css">
label, input { float: left; }
label { clear:left; }
</style>

<form>
    <label>thing 1:</label><input />
    <label>thing 2:</label><input />
</form>

Параметры javascript все усложняют. Сделайте так, как предлагали Джон Галлоуэй или daniels0xff.

Это не настоящий ответ, а комментарий.

viam0Zah 06.11.2009 14:04

Когда я писал это больше года назад, комментариев не было.

Doug Moore 04.12.2009 17:23

Другие вопросы по теме