Заполнение XHTML / CSS на встроенном элементе с разрывом строки

#xhtml #inline #css

#xhtml #встроенный #css

Вопрос:

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

Это то, что я имею в виду:

http://jsfiddle.net/4Gs2E/

Справа от тега и слева от with должно быть заполнение размером 20 пикселей, но его нет. Единственный другой способ, которым я могу увидеть, как это работает, — это создать новый элемент для каждой строки, но этот контент будет динамически генерироваться и не будет находиться в контейнере фиксированной ширины, поэтому я не вижу, чтобы это сработало. Есть ли какой-либо другой способ сделать это в css без какого-либо javascript?

Я хочу, чтобы конечный результат выглядел так: http://jsfiddle.net/GNsw3 /

но без каких-либо дополнительных элементов

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

Возможно ли это?

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

текущий http://jsfiddle.net/4Gs2E/2 /

как я хочу, чтобы это выглядело http://jsfiddle.net/GNsw3/1 /

Комментарии:

1. Ваш «Конечный результат» выглядит для меня одинаково (Chrome).

2. проверьте мое редактирование, должно сделать его более понятным

Ответ №1:

В некоторых случаях вы можете использовать box-shadow для обходного пути.

Переместите правую и левую padding части элемента к его родительскому элементу и добавьте две box-shadow буквы s.

Результат: http://jsfiddle.net/FpLCt/1 /

Поддержка браузером для box-shadow : http://caniuse.com/css-boxshadow

Обновить:

Для этой проблемы также есть новое свойство css box-decoration-break . В настоящее время он поддерживается только opera, но, надеюсь, скоро это будет реализовано в других браузерах.

Надеюсь, это поможет

Ответ №2:

Нашел решение для вас, но оно не очень 🙂

Поскольку вы не можете настроить таргетинг на <br> элемент с помощью css, вы должны использовать javascript. Вот как вы можете добиться желаемого с помощью jQuery:


// Add two spaces before and after any <br /> tag
$('br').replaceWith('amp;nbsp;amp;nbsp;<br />amp;nbsp;amp;nbsp;');

Играйте с количеством amp;nbsp; элементов, чтобы получить заполнение с обоих концов.

Вот обновленная демонстрация скрипки: http://jsfiddle.net/4Gs2E/8 /

Ответ №3:

Может быть, вы можете использовать float: left вместо display: inline :

http://jsfiddle.net/GolezTrol/4Gs2E/1/

Комментарии:

1. да, плавающий левый элемент в любом случае устанавливает элемент в встроенный блок в этом примере, где текст длиннее: jsfiddle.net/xXhbL/1 фон должен обтекать только текст, а не блок

2. Теперь я вижу. Боюсь, тогда это невозможно без добавления дополнительных элементов. Но это не должно быть так сложно. На самом деле, единственное, что вам нужно, это заменить <br> на </h1><h1> . Стилизацию можно выполнить в отдельной таблице стилей, что в любом случае было бы хорошей идеей.

Ответ №4:

Обычно это реализуется путем обертывания каждого слова в собственное SPAN , имеющее границу.

Ответ №5:

Я просто хотел сделать css-анимированное меню для себя. Я нашел обходной путь, чтобы обернуть ваш элемент ВСТРОЕННОГО БЛОКА (при необходимости измените css, давайте назовем его span с таким атрибутом для целей этого решения) в элемент блока. Затем я использую поля диапазона, поскольку это было заполнение для окружающего div.

 div.menuopt {
    margin: 10px;
    padding: 0px;
    padding-left: 0px;
    overflow: hidden;
    width: 500px;
    height: 150px;
    background: grey;
}
span.menuopt {
    display: inline-block;
    margin: 0px;
    padding: 0px;
    margin-left: 150px;
    margin-top: 10px;
    font-size: 25px;
}
  

Пример:
http://jsfiddle.net/ApbQS /

надеюсь, это кому-нибудь поможет