Как создать текстовую строку в стиле заголовка в стиле заголовка?
Я пытаюсь создать текст заголовка, похожий на то, как ваш текст легенды по умолчанию появляется в полях; то есть, я хотел бы, чтобы строка, похожая на зачеркивание, приходила, но не через текст. Кажется, я не могу найти никакой информации о том, как я мог бы это сделать, и поскольку по многим другим вопросам Google всегда направлял меня на Qaru для ответов, я думал, что кто-то здесь может дать мне совет.
Для большей ясности. Я пытаюсь получить это влияние на текст заголовка:
<ударa > Центрированный текст заголовка ударa >
Есть ли способ сделать это?
Ответы
Ответ 1
Смотрите: http://jsfiddle.net/thirtydot/jm4VQ/
Если текст нужно обернуть, это не сработает. В IE7 строки не будет.
HTML:
<h2><span>Centered Header Text</span></h2>
CSS
h2 {
text-align: center;
display: table;
width: 100%;
}
h2 > span, h2:before, h2:after {
display: table-cell;
}
h2:before, h2:after {
background: url(http://dummyimage.com/2x1/f0f/fff&text=+) repeat-x center;
width: 50%;
content: ' ';
}
h2 > span {
white-space: nowrap;
padding: 0 9px;
}
Ответ 2
Я придумал быстрое, без изображения решение, которое, похоже, очень хорошо работает в IE 8+ и других браузерах, хотя изящно унизительно в IE 6/7:
<h1>CSS 2.1 EXAMPLE</h1>
h1 { position: relative; text-align: center; }
h1:first-line { background-color: white; }
h1:before {
position: absolute;
z-index: -1;
content: '';
left: 0px;
right: 0px;
height: 1px;
top: 50%;
background-color: black;
}
Однако он имеет следующие ограничения:
- Текст должен точно соответствовать общему цвету фона, иначе он будет выглядеть странным.
- Если вы хотите, чтобы в тексте было какое-либо дополнение, вам нужно использовать неразрывные пробелы по обе стороны от текста (см. демонстрацию).
- Заголовок текста всегда должен быть на одной строке (лучше всего работает, если фиксированная ширина).
Здесь демо: http://jsfiddle.net/AndyE/3tFQJ/
Ответ 3
Edit:
<h2><strike> </strike>Your Text Here<strike> </strike></h2>
Здесь вы можете сделать это с помощью нескольких простых тегов и неразрывных пробелов.
Я бы использовал изображение и назвал его днем, но это показалось мне полезным:
CSS
fieldset {
border-right: 0px;
border-left: 0px;
border-bottom: 0px;
width: 200px;
}
legend {
margin: 0 25%;
}
HTML
<fieldset>
<legend>My Text Here</legend>
</fieldset>
Это единственный способ выяснить, как это сделать с помощью css. Обратите внимание, что ширина фиксирована. Еще раз я бы этого не сделал сам.
![CSS Cat Does Not Approve]()
Ответ 4
Вот что я использую на клиентском сайте: http://jsfiddle.net/TPgE4/
Плюсы:
- Нет необходимости в изображениях - мгновенно отображает
- Используется прокладка для управления пространством с обеих сторон текста.
- Текст может быть выровнен по центру или выравниваться по левому/правому краю - просто добавьте, например,
margin-left: 8px
или margin-right: 8px
в определение стиля h2 span
, чтобы он выглядел хорошо.
Минусы:
- Требуется использование дополнительного тега, такого как
<span>...</span>
внутри тега заголовка
- Текст должен соответствовать одной строке для хорошего внешнего вида.
- Цвет фона в элементе
<span>
должен соответствовать окружающему цвету фона, поэтому, если у вас есть не сплошное фоновое изображение, градиент или узор, он не будет идеально соответствовать.
Ответ 5
Поздно вечеринке, но это мое решение: https://jsfiddle.net/g43pt908/
Требуется отсутствие изображений и не зависит от цвета фона.
HTML
<div class="hr-text">
<span>Some text</span>
</div>
CSS
.hr-text {
border-top: 1px solid #999;
text-align: center;
background-color: inherit;
}
.hr-text span {
display: inline-block;
position: relative;
height: 14px;
top: -12px;
font-size: 14px;
font-style: italic;
color: #666;
background-color: inherit;
padding: 0 10px;
}
Ответ 6
Если flexbox поддерживается всеми последними браузерами, и это составляет пять лет с тех пор, как автор IE писал об этом IE8, мне хотелось бы повеселиться, создав новое решение, используя это.
Множество примеров усложняется:
https://jsfiddle.net/0mL79b4h/1/
https://jsfiddle.net/0mL79b4h/2/
CSS
div {
display: flex;
align-items: center;
}
div:before,
div:after {
border: 1px solid #000000;
border-radius: 2px;
height: 2px;
display: block;
content: "";
flex: 1;
width: 100%;
}
h1 {
text-align: center;
margin: 8px;
}
HTML
<div>
<h1>Example Text</h1>
</div>
<div>
<h1>Multi-Line<br>Example Text</h1>
</div>
Плюсы:
- Использует flexbox!
- Супер простой HTML.
- Левая и правая стороны могут быть отрегулированы для асимметрии.
- Нулевые фоновые проблемы, отсутствие наследующих цветов и т.д.
- Ширина жидкости.
- Поддержка нескольких линий.
- Левый/центральный/правый/пользовательский выравнивание: просто отрегулируйте свойство flex отдельно для элементов до и после, более высокие номера будут выделять больше места для этой стороны. Удалите все целиком влево или вправо, чтобы выровнять его.
- Интересные эффекты, играя с стилем границы (я на самом деле выбрал круглую границу в этом примере). Установите высоту в 0px и используйте border-top вместо общей строки.
Минусы:
- Использует flexbox. Назовите меня ленивым, но в этом примере я не построил никакой обратной совместимости, поэтому он будет выглядеть странно в браузере, который поддерживает элементы psuedo, но не поддерживает flexbox, хотя последний раз я проверял, что это Chrome (Firefox и т.д.).), которые все автоматически обновляются в любом случае. Возможно, вы захотите использовать некоторые Modernizr.
Ответ 7
Я не уверен, что это подойдет вам...
h1:before, h1:after {
content: " ------------- ";
}
Ответ 8
Это не очень хороший ответ, но я все равно публикую его.
Смотрите: http://jsfiddle.net/rFmQg/
<h2><span>Centered Header Text</span></h2>
h2 {
background: url(http://dummyimage.com/2x1/f0f/fff&text=+) repeat-x center;
text-align: center
}
h2 span {
background: #fff;
padding: 0 9px
}
Мне это не нравится, потому что:
- Вы должны использовать изображение.
- Это. (оно работает только в том случае, если совпадают фоны)
Ответ 9
body { padding-top: 100px; }
div.parent {
text-align: center;
border-top: 1px solid #ccc;
}
div.parent div {
display: inline-block;
margin-top: -0.8em;
padding: 0 0.5em;
background: #fff;
}
<body>
<div class="parent">
<div>My Text Here</div>
</div>
</body>
Это решение ширины жидкости, которое соответствует вашему дизайну и должно быть в порядке в IE7 (хотя я признаю, что не проверял). Есть несколько недостатков:
- Вы теряете семантику fieldset/legend.
- Вы не можете поместить прозрачный фон в текст.
Если вам не нужно, чтобы это была ширина жидкости, решение onteria_, вероятно, будет вашим лучшим выбором.