Это не идеально, но лучшее решение, которое я нашел до сих пор, - это замаскировать его псевдоэлементом: after.Таким образом, нет необходимости в дополнительных элементах по всему тексту.
Например:
h1 {
/* A nice big spacing so you can see the effect */
letter-spacing: 1em;
/* we need relative positioning here so our pseudo element stays within h1's box */
position: relative;
/* centring text throws up another issue, which we'll address in a moment */
text-align: center;
/* the underline */
text-decoration: underline;
}
h1:after {
/* absolute positioning keeps it within h1's relative positioned box, takes it out of the document flow and forces a block-style display */
position: absolute;
/* the same width as our letter-spacing property on the h1 element */
width: 1em;
/* we need to make sure our 'mask' is tall enough to hide the underline. For my own purpose 200% was enough, but you can play and see what suits you */
height: 200%;
/* set the background colour to the same as whatever the background colour is behind your element. I've used a red box here so you can see it on your page before you change the colour ;) */
background-color: #990000;
/* give the browser some text to render (if you're familiar with clearing floats like this, you should understand why this is important) */
content: ".";
/* hide the dynamic text you've just added off the screen somewhere */
text-indent: -9999em;
/* this is the magic part - pull the mask off the left and hide the underline beneath */
margin-left: -1em;
}
<h1>My letter-spaced, underlined element!</h1>
И это все!
Вы также может использовать границы, если вы хотите более точно контролировать цвет, расположение и т. д., но для этого требуется добавить элемент span, если у вас нет фиксированной ширины.
Например, в настоящее время я работаю надсайт, который требует, чтобы элементы h3 имели межбуквенный интервал в 2 пикселя, центрированный текст и подчеркивание с дополнительным пространством между текстом и подчеркиванием.Мой CSS выглядит следующим образом:
h3.location {
letter-spacing: 2px;
position: relative;
text-align: center;
font-variant: small-caps;
font-weight: normal;
margin-top: 50px;
}
h3.location span {
padding-bottom: 2px;
border-bottom: 1px #000000 solid;
}
h3.location:after {
position: absolute;
width: 2px;
height: 200%;
background-color: #f2f2f2;
content: ".";
text-indent: -9999em;
margin-left: -2px;
}
, а мой HTML-код:
<h3><span>Heading</span></h3>
Примечания:
Это не на 100% симпатичный CSS, но, по крайней мере, означает, что выне нужно изменять и взламывать ваш HTML для достижения того же результата.
Мне еще не приходилось пробовать это на элементе с фоновым изображением, поэтому я еще не подумал о способе достиженияthis.
Центрирование текста заставляет браузер отображать текст не в том месте (после него учитывается текст + дополнительный интервал), поэтому все вытягивается влево.Добавление текстового отступа 0.5em (половину интервала букв 1em, который мы использовали в верхнем примере) непосредственно на элемент h1 (не псевдоэлемент: after) должно исправить это, хотя я не проверял этопока что.
Любые отзывы принимаются с благодарностью!
Neal