Додайте по центру текст до середини рядка <h /> - як


217

Мені цікаво, які варіанти у 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).
дао

З огляду на поточну підтримку флешбоксу, я думаю, що моя відповідь могла б отримати певну видимість.
MatTheCat

Відповіді:


64

Я не знаю, чи вдалося це зрозуміти, але 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), і вона витончено погіршує.


Найкраща відповідь з приводу підтримки флешбоксу в наші дні
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,5ем;
Мітар

досконалий. "Чуйний" теж
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;
}

Ця версія працює краще, якщо ви використовуєте зображення для рядка - або принаймні легше редагувати та залишатись чуйним
tehlivi

Дуже приємна робота! Чи можете ви використовувати майстер для створення подвійної лінії? (Інакше я просто
вдадуся

3
Чудовий фрагмент! Дякую :)
plong0

2
Це найкраща відповідь, оскільки вона буде працювати без встановлення фону, а коли вам доведеться встановити прозорий фон
Дінеш Дабхі

1
Перший приклад просто приголомшливий! Вітаю! Це має бути правильна відповідь!
Луїз Едуардо

87

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

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.
Келвін

12
Це не найкраще рішення. Що робити, якщо у вас немає впевненості щодо ширини тексту. Усі будуть зруйновані, коли текст буде довше.
Iwona Trąbka

Це найкраща і найпростіша відповідь
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 має своє місце, майже всі інші графічні структури GUI XML визнають це та використовують їх скрізь (наприклад, 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/

Він використовує фонове зображення і плаває, щоб досягти класного ефекту


1
Мені це подобається, це чудово виглядає на вашому веб-сайті, але я не міг змусити його працювати (я підозрюю, що втручається jQuery css). :( Але це справді круто.
Брайан М. Хант

Я думаю, що ваш h1 штовхає проміжок вниз.
імнс

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;
}

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>


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/


Прекрасне і багаторазове рішення, як утиліта.
Вігнеш

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 мій перший пост, хоча це вже рік. Щоб уникнути проблем із забарвленням фону з обгортками, ви можете використовувати вбудований блок з 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

Я використовую a 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 }

Просто як це.


Ласкаво просимо до StackOverflow, Юрі. Замість a span, ви можете розглянути можливість використання a div. Він виконує ту саму мету, за винятком того, що це, природно, блок-елемент. :)
Нікс

@Nix Елемент блоку всередині вбудованого елемента? Ні, дякую, проліт - це хороший вибір
Джонатан Азулай

1
@MrAzulay h1- вбудований елемент. spanдобре для обертання речей, але причина , я вважаю за краще divв цьому випадку, тому що використання Youri CSS для установки spanв display:block;. Я не бачу сенсу перетворювати вбудований елемент у блок-елемент, коли є відповідні елементи блоку ( div), які легко доступні.
Нікс

@Nix Хіба це не дуже поширена справа? Хоча вкладати блоки всередину inline - це погана практика imo. Це хороший пост про це skypoetsworld.blogspot.se/2008/10/…
Джонатан Азулай

Ой, я помилково ввів свій останній коментар. Я погоджуюся, що ви не повинні розміщувати блок всередині вбудованого елемента, але h1насправді це елемент BLOCK. Вибачте за непорозуміння. І все-таки я не бачу сенсу перетворювати spanна блок-елемент, але досить справедливо.
Нікс

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>

Здається, добре працює.


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

DEMO PAGE

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; }

2

Це працювало для мене і не потребує кольору фону за текстом, щоб приховати лінію межі, натомість використовує власне тег hr. Ви можете пограти з шириною, щоб отримати різні розміри ліній 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>

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

Ви можете спробувати виконати a fieldsetі вирівняти елемент "легенда" (текст "наступного розділу") до середини поля лише border-topвстановленим. Я не впевнений у тому, як легенда розміщена відповідно до елемента fieldset. Я думаю, це може бути простоmargin: 0px auto виконати трюк.

приклад:

<fieldset>
      <legend>Title</legend>
</fieldset>

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;
 }

Польові набори слід використовувати лише з формами.
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>

Ви можете змінювати ширину в класах "сторона" та "середина", виходячи з довжини тексту в тезі "span". Переконайтесь, що ширина "середини" плюс 2 рази ширина "сторони" дорівнює 100%.


0

Чуйний, прозорий фон, змінна висота та стиль дільника, змінне положення тексту, регульована відстань між дільником та текстом. Також можна застосовувати кілька разів з різними селекторами для декількох стилів роздільника в одному проекті.
SCSS нижче.

Розмітка (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;
    }
}

скрипка тут .


Привіт, я дуже ціную ваш фрагмент коду. Якщо я розміщую текст із роздільником, відмінним від англійського (у моєму випадку - корейського), тексти переривають рядки у кожні дві літери. Не могли б ви зрозуміти, чому?
cadenzah

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>

Вам може знадобитися коригування властивості поля


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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.