Добавьте центрированный текст к середине <hr /> -подобной строки

219

Мне интересно, какие параметры есть в строгом xhtml 1.0, чтобы создать строку с обеих сторон текста примерно так:

Первый раздел
----------------------- Следующий раздел -----------------------
Раздел второй

Я думал о некоторых модных вещах, как это:

<div style="float:left; width: 44%;"><hr/></div>
<div style="float:right; width: 44%;"><hr/></div>
Next section

Или в качестве альтернативы, потому что вышеописанные проблемы с выравниванием (как вертикальным, так и горизонтальным):

<table><tr>
<td style="width:47%"><hr/></td>
<td style="vertical-align:middle; text-align: center">Next section</td>
<td style="width:47%"><hr/></td>
</tr></table>

Это также имеет проблемы с выравниванием, которые я решаю с этим беспорядком:

<table><tr>
<td style="border-bottom: 1px solid gray; width: 47%">&nbsp;</td>
<td style="vertical-align:middle;text-align:center" rowspan="2">Next section</td>
<td style="border-bottom: 1px solid gray; width: 47%">&nbsp;</td>
</tr><tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr></table>

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

Брайан М. Хант
источник
3
Вот еще одна тема с проблемой без лишних тегов - и решение! stackoverflow.com/questions/12648513/…
willoller
1
stackoverflow.com/questions/5214127/… по-прежнему является лучшим решением.
Полезный ответ здесь будет использовать CSS Grid.
Брайан М. Хант
Добавлен ответ (SCSS), который преобразует практически любой элемент в разделитель без заданного фона и позволяет установить: цвет и стиль обводки (сплошной, пунктирный, пунктирный) разделителя, положение текста (слева, справа, в центре), а также класс, который применяет это (по умолчанию .divider).
дао
Учитывая текущую поддержку flexbox, я думаю, что мой ответ может получить некоторую видимость.
MatTheCat

Ответы:

67

Я не знаю, было ли это выяснено, но flexbox предлагает довольно решение:

<div class="separator">Next section</div>

.separator {
    display: flex;
    align-items: center;
    text-align: center;
}
.separator::before, .separator::after {
    content: '';
    flex: 1;
    border-bottom: 1px solid #000;
}
.separator::before {
    margin-right: .25em;
}
.separator::after {
    margin-left: .25em;
}

Смотрите http://jsfiddle.net/MatTheCat/Laut6zyc/ для демонстрации.

Сегодня совместимость не так уж плоха (вы можете добавить все старые синтаксисы flexbox), и она изящно ухудшается.

MatTheCat
источник
Лучший ответ, учитывая поддержку flexbox в эти дни
akivajgordon
это хорошее решение
Smaillns
217

Как насчет:

<div style="width: 100%; height: 20px; border-bottom: 1px solid black; text-align: center">
  <span style="font-size: 40px; background-color: #F3F5F6; padding: 0 10px;">
    Section Title <!--Padding is optional-->
  </span>
</div>

Проверьте это JSFiddle .

Вы можете использовать vwили %сделать его отзывчивым .

Флетчер Мур
источник
2
Получить точное верхнее значение довольно сложно. Это не совсем -0,5em;
Mitar
идеальный. "Отзывчивый" тоже
JimXC
4
Смотрите мой ответ для решения, которое не требует, чтобы вы указали цвет фона или ширину.
MartinF
Смотрите мой ответ для отзывчивого, прозрачного bg, переменного стиля и высоты разделителя, переменной позиции текста. Может также применяться более одного раза для разных селекторов, для использования более одного стиля делителя в одном проекте с использованием SCSS. Работает с любым font-size.
дао
193

Способ решить эту проблему, не зная ширину и цвет фона, следующий:

Структура

<div class="strike">
   <span>Kringle</span>
</div>

CSS

.strike {
    display: block;
    text-align: center;
    overflow: hidden;
    white-space: nowrap; 
}

.strike > span {
    position: relative;
    display: inline-block;
}

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    height: 1px;
    background: red;
}

.strike > span:before {
    right: 100%;
    margin-right: 15px;
}

.strike > span:after {
    left: 100%;
    margin-left: 15px;
}

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

Двойная линия

Чтобы создать двойную линию, используйте один из следующих параметров:

1) Исправлено пространство между строками

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    border-top: 4px double red;

Пример: http://jsfiddle.net/z8Hnz/103/

2) Пользовательский пробел между строками

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    height: 5px; /* space between lines */
    margin-top: -2px; /* adjust vertical align */
    border-top: 1px solid red;
    border-bottom: 1px solid red;
}

Пример: http://jsfiddle.net/z8Hnz/105/


SASS (SCSS) версия

Основываясь на этом решении, я добавил SCSS "со свойством цвета", если это может кому-то помочь ...

//mixins.scss
@mixin bg-strike($color) {

    display: block;
    text-align: center;
    overflow: hidden;
    white-space: nowrap; 

    > span {

        position: relative;
        display: inline-block;

        &:before,
        &:after {
            content: "";
            position: absolute;
            top: 50%;
            width: 9999px;
            height: 1px;
            background: $color;
        }

        &:before {
            right: 100%;
            margin-right: 15px;
        }

        &:after {
            left: 100%;
            margin-left: 15px;
        }
    }
}

пример использования:

//content.scss
h2 {
    @include bg-strike($col1);
    color: $col1;
}
MartinF
источник
Эта версия работает лучше, если вы используете изображение для линии - или, по крайней мере, легче редактировать и оставаться отзывчивым
tehlivi
Очень хорошая работа! Можете ли вы использовать свое волшебство, чтобы создать двойную линию? (В противном случае я просто прибегну к использованию крошечного повторяющегося фонового изображения.)
wloescher
3
Отличный фрагмент! Спасибо :)
plong0
2
Это лучший ответ, потому что он будет работать без настройки фона, и когда вам нужно установить прозрачный фон
Динеш Дабхи
1
Первый пример просто потрясающий! Congrats! Это должен быть правильный ответ!
Луис Эдуардо
87

Вы можете сделать это с помощью :: before и :: after, не зная ширины контейнера или цвета фона, и добиться большей стилизации разрывов строк. Например, это можно изменить, чтобы сделать двойные линии, пунктирные линии и т. Д.

JSFiddle

CSS и использование HTML:

.hr-sect {
	display: flex;
	flex-basis: 100%;
	align-items: center;
	color: rgba(0, 0, 0, 0.35);
	margin: 8px 0px;
}
.hr-sect::before,
.hr-sect::after {
	content: "";
	flex-grow: 1;
	background: rgba(0, 0, 0, 0.35);
	height: 1px;
	font-size: 0px;
	line-height: 0px;
	margin: 0px 8px;
}
<div class="hr-sect">CATEGORY</div>

Версия SCSS:

.hr-sect {
    display: flex;
    flex-basis: 100%;
    align-items: center;
    color: rgba(0, 0, 0, 0.35);
    margin: 8px 0;

    &:before, &:after {
        content: "";
        flex-grow: 1;
        background: rgba(0, 0, 0, 0.35);
        height: 1px;
        font-size: 0;
        line-height: 0;
        margin: 0 8px;
    }
}
всеведение
источник
1
Элегантное решение, хотя и с одной оговоркой: если текста не будет, у вас все равно будет разрыв между строками.
Farside
13
Честно говоря, это самое чистое решение в этой теме: проблема без текста может быть упущена из виду, так как вы всегда захотите разделитель с текстом.
Роберт
51

Попробуй это:

.divider {
	width:500px;
	text-align:center;
}

.divider hr {
	margin-left:auto;
	margin-right:auto;
	width:40%;

}

.left {
	float:left;
}

.right {
	float:right;
}
<div class="divider">
    <hr class="left"/>TEXT<hr class="right" />
</div>

Предварительный просмотр на jsFiddle .

Диодей - Джеймс Макфарлейн
источник
4
Он отлично работает и использует <hr />, так что может быть не так с этим ответом? Я ничего не говорю.
Кирби
4
+1 Не нужно связываться с цветом фона или использовать теги непреднамеренно. Недостатком является то, что .divider hrширина зависит от длины текста. Предложение: .dividerи .divider hrширина должна быть указана в emединицах. Чтобы получить hrширину, используйте ( .dividerширина минус число символов) / 2.
Кельвин
13
Это не лучшее решение. Что делать, если у вас нет уверенности в ширине текста. Все будет разрушено, когда текст будет длиннее.
Ивона Трубка
Это самый лучший и самый простой ответ
ha9u63ar
1
40% здесь не так. Если текст будет длиннее, он будет выровнен неправильно
TomSawyer
21

Я только что столкнулся с той же проблемой, вот один из способов ее решения:

<table width="100%">
  <tr>
    <td><hr /></td>
    <td style="width:1px; padding: 0 10px; white-space: nowrap;">Some text</td>
    <td><hr /></td>
  </tr>
</table>

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

Вы можете попробовать это здесь: http://jsfiddle.net/88vgS/

Роберт Кайич
источник
Не решает проблему ОП. Это создает две строки с текстом между ними. Он хочет, чтобы строка была разорвана частично и содержала текст в разорванном разделе, затем строка продолжается.
Дракорат
2
Это на самом деле делает то, что просит ОП. Вы можете увидеть это на jsfiddle.net/88vgS
Роберт Кайч
Кроме того, что является строкой, разделенной на части, с текстом на разделенной части, если не двумя строками с текстом между ними?
Роберт Кайч
Вы должны добавить соответствующие теги TR. Я думаю, что это на мгновение смутило меня. Первоначально я думал, что почему-то это было три строки, а не три столбца. Правильная разметка, вероятно, не заставила бы меня видеть это таким образом. Несмотря на это, это определенно выполнимое решение.
Дракорат
1
Но при этом используются таблицы, это НЕ РАЗРЕШЕНО! Ох, шучу. У GRIDS есть свое место, почти все другие XML-структуры GUI признают это и используют их повсюду (например, WPF / XAML). Спасибо за решение, приятель! Это заслуживает более 3 голосов. Я подозреваю, что отвращение людей к ненавистным столам будет препятствием.
Николас Петерсен
10

ОБНОВИТЬ: это не будет работать, используя HTML5

Вместо этого, проверьте этот вопрос для получения дополнительной техники: вызов CSS, могу ли я сделать это, не вводя больше HTML?


Я использовал line-height:0для создания эффекта в шапке моего сайта guerilla-alumnus.com

<div class="description">
   <span>Text</span>
</div>

.description {
   border-top:1px dotted #AAAAAA;
}

.description span {
   background:white none repeat scroll 0 0;
   line-height:0;
   padding:0.1em 1.5em;
   position:relative;
}

Еще один хороший метод на http://robots.thoughtbot.com/

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

willoller
источник
1
Мне это нравится, он отлично смотрится на вашем сайте, но я не смог заставить его работать (я подозреваю, что помехи от jQuery css). :( Но это действительно круто.
Брайан М. Хант
Я думаю, что ваш h1 толкает пролет вниз.
imns
1
Это «хак», который использует другое поведение рендеринга для DOCTYPE XTHML 1.0 Transitional. Если вы используете DOCTYPE html (для HTML5), он НЕ будет работать.
Питер
6
<div style="text-align: center; border-top: 1px solid black">
  <div style="display: inline-block; position: relative; top: -10px; background-color: white; padding: 0px 10px">text</div>
</div>
Алексей Мяликс
источник
6

Если вы можете использовать CSS и готовы использовать устаревший alignатрибут, будет работать стилизованный набор полей / легенда:

<style type="text/css">
fieldset { 
    border-width: 1px 0 0 0;
}
</style>

<fieldset>
<legend align="center">First Section</legend>
Section 1 Stuff
</fieldset>

<fieldset>
<legend align="center">Second Section</legend>
Section 2 Stuff
</fieldset>

Назначение набора полей - логически сгруппировать поля формы. Как указал Уиллер, text-align: centerстиль для legendэлементов не будет работать . align="center"HTML устарел, но он должен правильно центрировать текст во всех браузерах.

Трей Ханнер
источник
Более подробное объяснение того, что я собирался.
dclowd9901
Я почти уверен, что <legend>принимает на дисплей черты элемента blockили inline-block, так как он может быть дополнен и заштрихован, что означает, что он text-align:centerне должен работать ...
dclowd9901
да, легенды отлично подходят для семантики - я использую их для упаковки радиогрупп, но они заведомо упрямы
willoller
Я исправил свой ответ. К сожалению, из-за упрямства некоторых браузеров в стилизации legendэлемента, align="center"я могу найти единственное решение, которое надежно центрирует a legend.
Трей Ханнер
6

Сетка начальной загрузки:

HTML:

  <div class="row vertical-center">
    <div class="col-xs-5"><hr></div>
    <div class="col-xs-2" style="color: white"> Text</div>
    <div class="col-xs-5"><hr></div>
  </div>

CSS:

.vertical-center{
  display: flex;
  align-items: center;
}
dasfdsa
источник
1
Не vertical-centerкласс больше не существует в начальной загрузки (4.3.1). Не могли бы вы обновить свой ответ, чтобы сказать align-items-center?
Кэмерон Хадсон
5

Вы можете просто использовать положение относительно и установить высоту на родителя

.fake-legend {
  height: 15px;
  width:100%;
  border-bottom: solid 2px #000;
  text-align: center;
  margin: 2em 0;
}
.fake-legend span {
  background: #fff;
  position: relative;
  top: 0;
  padding: 0 20px;
  line-height:30px;
}
<p class="fake-legend"><span>Or</span>
</p>

sidonaldson
источник
5

Вот простое решение только с CSS, без фоновых трюков ...

.center-separator {
    display: flex;
  line-height: 1em;
  color: gray;
}

.center-separator::before, .center-separator::after {
    content: '';
    display: inline-block;
    flex-grow: 1;
    margin-top: 0.5em;
    background: gray;
    height: 1px;
    margin-right: 10px;
    margin-left: 10px;
  }

HTML:

  <div class="center-separator">
    centered text
  </div>

пример скрипки: https://jsfiddle.net/0Lkj6wd3/

Yftach
источник
Отличное и многоразовое решение, вроде служебного класса.
Вигнеш
3
<fieldset style="border:0px; border-top:1px solid black">
    <legend>Test</legend>
</fieldset>

Злой хак ...

Дан
источник
1
Я бы не назвал это хаком, но я бы проверил, работает ли он во всех браузерах, которые вы намереваетесь поддерживать.
Ник Ларсен
fieldset не хочет так использоваться, его взломали ;-)
Dänu
3

Поднятие 2-летнего поста, но вот как я подхожу к этим ситуациям, используя только один элемент и CSS.

​h1 {
    text-align: center;
}

h1:before,
h1:after {
    content: "";
    background: url('http://heritageonfifth.com/images/seperator.png') left center repeat-x;
    width: 15%;
    height: 30px;
    display: inline-block;
    margin: 0 15px 0 0;
}

h1:after{
    background-position: right center;
    margin: 0 0 0 15px;
}

А вот скрипка, чтобы проверить это: http://jsfiddle.net/sRhBc/ (случайное изображение от Google, взятое за границу).

Единственным недостатком этого подхода является то, что он не поддерживает IE7.

Лазарь Вукович
источник
3

Просто используйте

    hr
    {
        padding: 0;
        border: none;
        border-top: 1px solid #CCC;
        color: #333;
        text-align: center;
        font-size: 12px;
        vertical-align:middle;
    }
    hr:after
    {
        content: "Or";
        display: inline-block;
        position: relative;
        top: -0.7em;
        font-size: 1.2em;
        padding: 0 0.25em;
        background: white;
    }
Анит Гарг
источник
2

Woohoo мой первый пост, хотя это год. Чтобы избежать проблем с окраской фона в оболочках, вы можете использовать inline-block с hr (никто не сказал этого явно). Выравнивание текста должно центрироваться правильно, поскольку они являются встроенными элементами.

<div style="text-align:center">
    <hr style="display:inline-block; position:relative; top:4px; width:45%" />
       &nbsp;New Section&nbsp;
    <hr style="display:inline-block; position:relative; top:4px; width:45%" />
</div>
Джейкоб Блок
источник
2

Я использую h1с пролетом в середине.

Пример HTML:

<h1><span>Test archief</span></h1>

Пример CSS:

.archive h1 {border-top:3px dotted #AAAAAA;}
.archive h1 span { display:block; background:#fff; width:200px; margin:-23px auto; text-align:center }

Просто как тот.

Youri
источник
Добро пожаловать в StackOverflow, Юри. Вместо a span, вы можете использовать div. Он служит той же цели, за исключением того, что он, естественно, является блочным элементом. :)
Nix
@Nix Блокировать элемент внутри встроенного элемента? Нет, спасибо, span - хороший выбор
Джонатан Азулай
1
@MrAzulay h1- встроенный элемент. spanхорош для упаковки, но причина, по которой я предпочитаю a divв этом случае, заключается в том, что Youri использует CSS, чтобы установить spanдля display:block;. Я не вижу смысла превращать встроенный элемент в элемент блока, когда есть подходящие элементы блока ( div), легко доступные.
Nix
@Nix Разве это не обычное дело? В то время как размещение блоков внутри строки - плохая практика. Это хороший пост об этом skypoetsworld.blogspot.se/2008/10/…
Джонатан Азулай
Упс, я опечатался в своем последнем комментарии. Я согласен, что вы не должны размещать блок внутри встроенного элемента, но h1на самом деле это элемент BLOCK. Извините за путаницу. Тем не менее, я не вижу смысла превращать его spanв элемент блока, но достаточно справедливо.
Nix
2

Глядя на выше, я изменил:

CSS

.divider {
    font: 33px sans-serif;
    margin-top: 30px;
    text-align:center;
    text-transform: uppercase;
}
.divider span {
    position:relative;
}
.divider span:before, .divider span:after {
    border-top: 2px solid #000;
    content:"";
    position: absolute;
    top: 15px;
    right: 10em;
    bottom: 0;
    width: 80%;
}
.divider span:after {
    position: absolute;
    top: 15px;
    left:10em;
    right:0;
    bottom: 0;
}

HTML

<div class="divider">
    <span>This is your title</span></div>

Кажется, работает нормально.

user2673353
источник
2

Принятие решения @ kajic и размещение стиля в CSS:

<table class="tablehr">
  <td><hr /></td>
  <td>Text!</td>
  <td><hr /></td>
</table>

Затем CSS (но это зависит от CSS3 при использовании n-го селектора):

.tablehr { width:100%; }
.tablehr > tbody > tr > td:nth-child(2) { width:1px; padding: 0 10px; white-space: nowrap; }

Приветствия.

(PS В tbody и tr, Chrome, IE и Firefox по крайней мере автоматически вставляют tbody и tr, поэтому в моем примере, например, в @ kajic, они не были включены, чтобы сократить объем необходимой разметки html. Это решение был протестирован с новейшими версиями IE, Chrome и Firefox, начиная с 2013 года).

Николас Петерсен
источник
2

ДЕМО СТРАНИЦА

HTML

<header>
  <h1 contenteditable>Write something</h1>
</header>

CSS

header{ 
  display:table;
  text-align:center; 
}
header:before, header:after{ 
  content:'';
  display:table-cell; 
  background:#000; 
  width:50%;
  -webkit-transform:scaleY(0.3);
  transform:scaleY(0.3);
}
header > h1{ white-space:pre; padding:0 15px; }
VSync
источник
2

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

<div>
    <div style="display:inline-block;width:45%"><hr width='80%' /></div>
    <div style="display:inline-block;width: 9%;text-align: center;vertical-align:90%;text-height: 24px"><h4>OR</h4></div>
    <div style="display:inline-block;width:45%;float:right" ><hr width='80%'/></div>
</div>
user3898371
источник
2

Я сделал скрипку которая использует FlexBox, а также даст вам разные стили HR (двойная линия, символы в центре линии, тень, вставка, пунктир и т. Д.).

CSS

button {
    padding: 8px;
    border-radius: 4px;
    background-color: #fff;
    border: 1px solid #ccc;
    margin: 2px;
  }

  button:hover {
    cursor: pointer;
  }

  button.active {
    background-color: rgb(34, 179, 247);
    color: #fff;
  }

  .codeBlock {
    display: none;
  }

  .htmlCode, .cssCode {
    background-color: rgba(34, 179, 247, 0.5); 
    width: 100%;
    padding: 10px;
  }

  .divider {
    display: flex;
    flex-direction: row;
    flex-flow: row;
    width: 100%;
  }

  .divider.fixed {
    width: 400px;
  }

  .divider > label {
    align-self: baseline;
    flex-grow: 2;
    white-space: nowrap;
  }

  .divider > hr {
    margin-top: 10px;
    width: 100%;
    border: 0;
    height: 1px;
    background: #666;
  }

  .divider.left > label {
    order: 1;
    padding-right: 5px;
  }

  .divider.left > hr {
    order: 2
  }

  .divider.right > label {
    padding-left: 5px;
  }
  /* hr bars with centered text */
  /* first HR in a centered version */

  .divider.center >:first-child {
    margin-right: 5px;
  }
  /* second HR in a centered version */

  .divider.center >:last-child {
    margin-left: 5px;
  }
  /** HR style variations **/

  hr.gradient {
    background: transparent;
    background-image: linear-gradient(to right, #f00, #333, #f00);
  }

  hr.gradient2 {
    background: transparent;
    background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 0, 0.5), rgba(0, 0, 0, 0));
  }

  hr.dashed {
    background: transparent;
    border: 0;
    border-top: 1px dashed #666;
  }

  hr.dropshadow {
    background: transparent;
    height: 12px;
    border: 0;
    box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
  }

  hr.blur {
    background: transparent;
    border: 0;
    height: 0;
    /* Firefox... */
    box-shadow: 0 0 10px 1px black;
  }

  hr.blur:after {
    background: transparent;
    /* Not really supposed to work, but does */
    content: "\00a0";
    /* Prevent margin collapse */
  }

  hr.inset {
    background: transparent;
    border: 0;
    height: 0;
    border-top: 1px solid rgba(0, 0, 0, 0.1);
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);
  }

  hr.flared {
    background: transparent;
    overflow: visible;
    /* For IE */
    height: 30px;
    border-style: solid;
    border-color: black;
    border-width: 1px 0 0 0;
    border-radius: 20px;
  }

  hr.flared:before {
    background: transparent;
    display: block;
    content: "";
    height: 30px;
    margin-top: -31px;
    border-style: solid;
    border-color: black;
    border-width: 0 0 1px 0;
    border-radius: 20px;
  }

  hr.double {
    background: transparent;
    overflow: visible;
    /* For IE */
    padding: 0;
    border: none;
    border-top: medium double #333;
    color: #333;
    text-align: center;
  }

  hr.double:after {
    background: transparent;
    content: "§";
    display: inline-block;
    position: relative;
    top: -0.7em;
    font-size: 1.5em;
    padding: 0 0.25em;
  }

HTML

<div class="divider left">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider right">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider center">
  <hr />
  <label>Welcome!</label>
  <hr />
</div>
<p>&nbsp;</p>
<div class="divider left fixed">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider right fixed">
  <hr />
  <label>Welcome!</label>
</div>
<p>&nbsp;</p>
<div class="divider center fixed">
  <hr />
  <label>Welcome!</label>
  <hr />
</div>

Или вот интерактивная скрипка: http://jsfiddle.net/mpyszenj/439/

нефрит
источник
2

Вы можете попытаться сделать fieldsetи выровнять элемент "legend" (текст "вашего следующего раздела") по центру поля с помощью только border-topset. Я не уверен в том, как легенда расположена в соответствии с элементом fieldset. Я думаю, это может быть простоmargin: 0px auto сделать трюк, хотя.

пример :

<fieldset>
      <legend>Title</legend>
</fieldset>
dclowd9901
источник
1

Вы можете сделать это без <hr />. Семантически дизайн должен быть выполнен с помощью CSS, в этом случае это вполне возможно.

div.header
{
  position: relative;
  text-align: center;
  padding: 0 10px;
  background: #ffffff;
}

div.line
{
  position: absolute;
  top: 50%;
  border-top: 1px dashed;
  z-index: -1;
}

<div class="header">
  Next section
  <div class="line">&nbsp;</div>
</div>

источник
1

Там всегда старый добрый FIELDSET

 fieldset
 {
border-left: none;
border-right: none;
border-bottom: none;
 }
 fieldset legend
 {
text-align: center;
padding-left: 10px;
padding-right: 10px;
 }
Чет на C2IT
источник
Наборы полей должны использоваться только с формами.
tehlivi
1

HTML

<div style="display: grid; grid-template-columns: 1fr 1fr 1fr;" class="add-heading">
    <hr class="add-hr">
    <h2>Add Employer</h2>
    <hr class="add-hr">
</div>

CSS

.add-hr { 
    display: block; height: 1px;
    border: 0; border-top: 4px solid #000;
    margin: 1em 0; padding: 0; 
  }

.add-heading h2{
  text-align: center;
}
Никхил Бхардвадж
источник
0

CSS

.Divider {
width: 100%; height: 30px;  text-align: center;display: flex;
}
.Side{
width: 46.665%;padding: 30px 0;
}
.Middle{
width: 6.67%;padding: 20px 0;
}

HTML

<div class="Divider">
    <div class="Side"><hr></div>
    <div class="Middle"><span>OR</span></div>
    <div class="Side"><hr></div>
</div>

Вы можете изменить ширину в классе "side" и "middle" в зависимости от длины вашего текста в теге "span". Убедитесь, что ширина "середины" плюс 2 раза ширина "стороны" равна 100%.

Бетти Ли
источник
0

Отзывчивый, прозрачный фон, переменная высота и стиль разделителя, переменное положение текста, регулируемое расстояние между разделителем и текстом. Может также применяться несколько раз с разными селекторами для нескольких стилей делителей в одном проекте.
СССН ниже.

Разметка (HTML):

<div class="divider" text-position="right">Divider</div>

CSS :

.divider {
  display: flex;
  align-items: center;
  padding: 0 1rem;
}

.divider:before,
.divider:after {
  content: '';
  flex: 0 1 100%;
  border-bottom: 5px dotted #ccc;
  margin: 0 1rem;
}

.divider:before {
  margin-left: 0;
}

.divider:after {
  margin-right: 0;
}

.divider[text-position="right"]:after,
.divider[text-position="left"]:before {
  content: none;
}

Без text-position него по умолчанию центр.

Демо-версия:

И SCSS , чтобы изменить это быстро:

$divider-selector    : ".divider";
$divider-border-color: rgba(0,0,0,.21);
$divider-padding     : 1rem;
$divider-border-width: 1px;
$divider-border-style: solid;
$divider-max-width   : 100%;

#{$divider-selector} {
    display: flex;
    align-items: center;
    padding: 0 $divider-padding;
    max-width: $divider-max-width;
    margin-left: auto;
    margin-right: auto;

    &:before,
    &:after {
        content: '';
        flex: 0 1 100%;
        border-bottom: $divider-border-width $divider-border-style $divider-border-color;
        margin: 0 $divider-padding;
        transform: translateY(#{$divider-border-width} / 2)
    }

    &:before {
        margin-left: 0;
    }

    &:after {
        margin-right: 0;
    }

    &[text-position="right"]:after,
    &[text-position="left"]:before {
        content: none;
    }
}

скрипку здесь .

дао
источник
Привет, я действительно ценю твой фрагмент кода. Если я добавлю текст с разделителем, отличным от английского (в моем случае это корейский язык), тексты будут разбиваться на две буквы. Не могли бы вы выяснить, почему?
Каденция
0

.orSpan{
  position: absolute;
  margin-top: -1.3rem;
  margin-left:50%;
  padding:0 5px;
  background-color: white;
}
<div>
   <hr> <span class="orSpan">OR</span>
</div>

Вы можете требуется регулировать маржу недвижимость

Srikrushna
источник
0
<div class="divider-line-x"><span>Next section</span></div>
/***** Divider *****/

.divider-line-x {
    position: relative;
    text-align: center; 
    font-family: Arial; 
    font-weight: bold;
    font-size: 12px;    
    color: #333;
    border-bottom: 1px dashed #ccc;
}

.divider-line-x span {
    position: relative; 
    top: 10px;
    padding: 0 25px;    
    background: #fff;
}
Messin
источник