CSS - применяется дополнение к встроенному элементу через две строки
Мне нужно создать стиль, чтобы применить цвет фона и дополнение к элементу заголовка, в результате чего появился следующий предполагаемый внешний вид (макет Photoshop):
http://f.cl.ly/items/1h09010w1t1I1B1q0r43/Screen%20Shot%202011-08-27%20at%2014.49.48.png
Мой CSS выглядит следующим образом (отредактирован для отображения соответствующих правил)
h1 {
color: #fff;
line-height: 1.4;
background: #41a293;
padding: 2px 4px;
display:inline;
}
Это приводит к следующему результату:
http://f.cl.ly/items/3b3V0M0A0c262Z3m3k3D/Screen%20Shot%202011-08-27%20at%2014.52.24.png
Я получаю заполнение в начале элемента ('S') и в самом конце ('e'), но не там, где текст ломается. Разрыв происходит из-за ширины его родительского DIV. Это часто случается и необходимо.
Есть ли способ гарантировать, что элемент получает даже дополнение в точках, где текст ломается?
Большое спасибо
Dave
EDIT - я должен был также сказать, что текстовое содержимое будет отображаться через CMS (Wordpress).
Ответы
Ответ 1
Использование jQuery для обертывания каждого слова внутри вашего h1 в промежуток будет в значительной степени делать трюк. Я не знаю, как это влияет на SEO, хотя, если честно.
Это то, что я использую, когда мне нужно это сделать.
$("h1").each(function()
{
var headerContent = $(this).text().split(' ');
for (var i = 1; i < headerContent.length; i++)
{
headerContent[i] = '<span class="subhead">' + headerContent[i] + '</span>';
}
$(this).html(headerContent.join(' '));
}
);
http://jsfiddle.net/Cnuzh/
Я думаю, что на самом деле я получил это от ответа от аналогичного вопроса здесь, на stackoverflow некоторое время назад. Я напишу ссылку на оригинал автора, если это так. Я загляну в него завтра, но сначала мне нужна моя приятная теплая кровать ^^
Надеюсь, что это помогло,
WJ
Ответ 2
Если вы видите, что эффект видится только в браузерах WebKit/Blink, вы должны использовать
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
Что именно вы хотите, как здесь: http://jsfiddle.net/Cnuzh/13/
Ответ 3
если вы добавите
white-space:pre-wrap;
на ваш h1 он будет выглядеть следующим образом:
![enter image description here]()
По-прежнему пытаюсь понять способ добавления пространства до (i)!
EDIT: проверьте это:
http://jsfiddle.net/ahmad/6qVVD/10/
- По-прежнему нужен способ обернуть последнее слово с помощью jQuery -
Завершение последнего слова с помощью span с помощью jQuery
$('h1').each(function(index, element) {
var heading = $(element), word_array, last_word, first_part;
word_array = heading.html().split(/\s+/); // split on spaces
last_word = word_array.pop(); // pop the last word
first_part = word_array.join(' '); // rejoin the first words together
heading.html([first_part, ' <span>', last_word, '</span>'].join(''));
});
Рабочий пример: http://jsfiddle.net/6qVVD/12/
Как вы видите, он отлично работает
Ответ 4
Встроенные элементы не поддерживают прокладку и маржу хорошо, поэтому сделайте блок или встроенный блок (который не является перекрестным браузером)
Почему вы делаете это inline btw?
Ответ 5
Мой босс любит использовать эту функцию в своих проектах в последнее время, поэтому мне пришлось придумать некоторые решения. К счастью для большинства из тех, что мы делаем, они предназначены для титров на слайдерах, которые всегда будут на двух строках, поэтому я решил использовать до и после, чтобы вставить линию 10px перед каждой строкой текста. Не очень хорошая совместимость с браузером, которую я знаю, но работает нормально и не выглядит ужасно в IE.
Здесь немного jsFiddle, чтобы объяснить это:
http://jsfiddle.net/mP5vg/
Это единственное чистое решение для CSS, которое я мог найти.
P.S. Извините за мой грязный код.
Ответ 6
Демо здесь: http://jsfiddle.net/korigan/jzm3qu1q/1/
HTML
<div class="wrap">
<p class="highlight">
<span class="text">Amet assumenda atque eos excepturi harum ipsa</span>
</p>
</div>
CSS
.wrap {
width: 150px;
}
.highlight {
color: #fff;
display: inline;
background: blue;
font-size: 25px;
font-weight: normal;
line-height: 1.2;
}
.highlight .text {
padding: 4px;
box-shadow: 4px 0 0 blue, -4px 0 0 blue;
background-color: blue;
box-decoration-break: clone; /* For Firefox */
}
Ответ 7
EDIT: nvm, не заметила белую линию; не давали бы и nbsp; вместо регулярных пробелов?
дайте ему отображение встроенного блока, обязательно сделайте его отображаемым: inline для ie7
регулярныеЗабастовкa >
h1 { display:inline-block }
ie7 only
h1 { display:inline}
Ответ 8
Вот еще один трюк для этого:
Поместите <H1>
в другой div и дайте ему border-left, но перед этим удалите дополнение из <H1>
css
<div id="wrap">
<div class="fix">
<h1>Specialists in retirement income</h1>
</div>
</div>
CSS
body { background:#ddd; }
#wrap { width:400px; background:white; }
h1 {
color: #fff;
background: #41a293;
display: inline;
word-spacing:10px;
font: 30px/1.4 Arial, sans-serif;
white-space:pre-wrap;
}
.fix {
border-left:20px solid #41a293;
}
Смотрите fiddle
Ответ 9
Может быть, white-space:nowrap;
- это некоторое решение.
Ответ 10
В соответствии с этим потоком на WebmasterWorld, который является 2-летним BTW, это должно произойти в соответствии с рекомендации W3.
Попробуйте следующее: http://jsfiddle.net/laheab/6MhDU/
Просто дайте каждому слову свой собственный элемент <p>
, и вы все равно получите желаемый эффект.