Aggiungi testo centrato al centro di una linea simile a <hr />


218

Mi chiedo quali opzioni si hanno in xhtml 1.0 rigoroso per creare una linea su entrambi i lati del testo in questo modo:

Sezione prima
----------------------- Sezione successiva -----------------------
Sezione due

Ho pensato di fare cose fantasiose come questa:

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

O in alternativa, poiché quanto sopra ha problemi con l'allineamento (sia verticale che orizzontale):

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

Questo ha anche problemi di allineamento, che risolvo con questo casino:

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

Oltre ai problemi di allineamento, entrambe le opzioni sembrano "confuse" e sarei molto grato se ti capitasse di averlo visto prima e di conoscere una soluzione elegante.


3
Ecco un altro thread con una sfida senza tag extra e una soluzione! stackoverflow.com/questions/12648513/...
willoller

1
stackoverflow.com/questions/5214127/… è ancora la soluzione migliore.

Una risposta utile qui sarebbe utilizzare la griglia CSS.
Brian M. Hunt,

Aggiunta una risposta (SCSS) che trasforma quasi tutti gli elementi in un divisore senza impostare lo sfondo e consente l'impostazione: colore e stile del tratto (solido, punteggiato, tratteggiato) del divisore, posizione del testo (sinistra, destra, centro), nonché la classe che lo applica (per impostazione predefinita .divider).
Tao,

Dato l' attuale supporto per la flexbox, penso che la mia risposta possa guadagnare visibilità.
MatTheCat,

Risposte:


66

Non so se questo è stato capito, ma flexbox offre una soluzione:

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

Vedi http://jsfiddle.net/MatTheCat/Laut6zyc/ per la demo.

Oggi la compatibilità non è poi così male (puoi aggiungere tutte le vecchie sintassi del flexbox) e si degrada con garbo.


La migliore risposta considerando il supporto di flexbox in questi giorni
akivajgordon

questa è una bella soluzione
Smaillns

217

Che ne dite di:

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

Dai un'occhiata a questo JSFiddle .

Puoi usarlo vwo %renderlo reattivo .


2
Ottenere il valore esatto è un po 'difficile. Non è esattamente -0.5em;
Mitar,

Perfetto. Anche "Responsive"
JimXC

4
Vedi la mia risposta per una soluzione che non richiede di specificare il colore di sfondo o la larghezza.
MartinF,

Vedi la mia risposta per reattivo, bg trasparente, stile variabile e altezza del divisore, posizione variabile del testo. Può anche essere applicato più di una volta a diversi selettori, per avere più di uno stile di divisore nello stesso progetto, usando SCSS. Funziona con qualsiasi font-size.
Tao,

193

Il modo per risolverlo senza conoscere la larghezza e il colore di sfondo è il seguente:

Struttura

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

Esempio: http://jsfiddle.net/z8Hnz/

Doppia linea

Per creare una doppia linea, utilizzare una delle seguenti opzioni:

1) Spazio fisso tra le linee

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

Esempio: http://jsfiddle.net/z8Hnz/103/

2) Spazio personalizzato tra le linee

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

Esempio: http://jsfiddle.net/z8Hnz/105/


Versione SASS (SCSS)

Sulla base di questa soluzione, ho aggiunto SCSS "con proprietà color" se potesse aiutare qualcuno ...

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

esempio di utilizzo:

//content.scss
h2 {
    @include bg-strike($col1);
    color: $col1;
}

Questa versione funziona meglio se stai usando un'immagine per la linea - o almeno è più facile da modificare e rimanere reattivo
tehlivi

Ottimo lavoro! Puoi usare la tua magia per creare una doppia linea? (Altrimenti, userò solo una piccola immagine di sfondo ripetuta.)
wloescher,

3
Grande frammento! Grazie :)
plong0

2
Questa è la risposta migliore perché funzionerà senza impostare lo sfondo e quando devi impostare lo sfondo trasparente
Dinesh Dabhi,

1
Il primo esempio è semplicemente fantastico! Congratulazioni! Dovrebbe essere la risposta corretta!
Luiz Eduardo,

87

È possibile ottenere questo risultato con :: before e :: after senza conoscere la larghezza del contenitore o il colore di sfondo e per ottenere uno stile maggiore delle interruzioni di riga. Ad esempio, questo può essere modificato per creare doppie linee, linee tratteggiate, ecc.

JSFiddle

Utilizzo di CSS e 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>

Versione 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
Soluzione elegante, sebbene abbia un avvertimento: se non ci sarà testo, avrai comunque uno spazio tra le righe.
Farside,

13
Ad essere onesti, questa è la soluzione più pulita in questo thread, il problema senza testo può essere trascurato poiché vorrai sempre il divisore con il testo.
Robert,

51

Prova questo:

.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>

Anteprima dal vivo su jsFiddle .


4
Funziona perfettamente e usa <hr /> quindi cosa potrebbe esserci di sbagliato in questa risposta? Non dico niente.
Kirby,

4
+1 Non è necessario pasticciare con il colore di sfondo o utilizzare i tag in modi non intenzionali. Uno svantaggio è che la .divider hrlarghezza dipende dalla lunghezza del testo. Suggerimento: .dividere le .divider hrlarghezze devono essere specificate in emunità. Per ottenere la hrlarghezza, utilizzare ( .dividerlarghezza meno il numero di caratteri) / 2.
Kelvin,

13
Non è la soluzione migliore. Che cosa succede se non si ha la certezza della larghezza del testo. Tutto sarà rovinato quando il testo sarà più lungo.
Iwona Trąbka,

Questa è la risposta migliore e più semplice
ha9u63ar,

1
Il 40% è sbagliato qui. Se il testo è più lungo, non sarebbe allineato
correttamente

21

Ho appena riscontrato lo stesso problema, ecco un modo per risolverlo:

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

Funziona senza impostare uno sfondo sull'elemento di testo, cioè sarà bello indipendentemente dallo sfondo.

Puoi provarlo qui: http://jsfiddle.net/88vgS/


Non risolve il problema del PO. Ciò crea due righe con il testo tra di loro. Vuole una linea che è interrotta a metà e ha del testo nella sezione spezzata, quindi la linea continua.
Dracorat,

2
In realtà fa ciò che l'OP chiede. Puoi vederlo su jsfiddle.net/88vgS
Robert Kajic il

Inoltre, che cos'è una linea interrotta a metà, con il testo nella sezione spezzata, se non due righe con il testo tra loro?
Robert Kajic,

Dovresti lanciare tag TR appropriati lì dentro. Penso che sia quello che mi ha confuso per un momento. Inizialmente pensavo per qualche motivo che fosse su tre righe, non su tre colonne. Un markup corretto probabilmente non mi avrebbe fatto vedere in quel modo. Indipendentemente da ciò, è sicuramente una soluzione praticabile.
Dracorat,

1
Ma questo utilizza tabelle, ovvero NON CONSENTITO! Oh, sto solo scherzando. I GRID hanno il loro posto, quasi tutti gli altri framework XML della GUI lo riconoscono e li usano ovunque (ad es. WPF / XAML). Grazie per la soluzione amico! Questo merita più di 3 voti positivi. Ho il sospetto che l'avversione della gente verso i tavoli odiati sarà un ostacolo.
Nicholas Petersen,

10

AGGIORNAMENTO: non funzionerà con HTML5

Invece, dai un'occhiata a questa domanda per ulteriori tecniche: sfida CSS, posso farlo senza introdurre più HTML?


Ho usato line-height:0per creare l'effetto nell'intestazione del mio sito 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;
}

Un altro buon metodo è attivo http://robots.thoughtbot.com/

Usa un'immagine di sfondo e galleggia per ottenere un effetto interessante


1
Mi piace, sembra fantastico sul tuo sito, ma non sono riuscito a farlo funzionare (sospetto che interferiscano con jQuery CSS). :( Ma è davvero bello.
Brian M. Hunt,

Penso che il tuo h1 stia spingendo la luce verso il basso.
imns,

1
Questo è un "hack" che utilizza il diverso comportamento di rendering per DOCTYPE XTHML 1.0 Transitional. Se usi DOCTYPE html (per HTML5), NON funzionerà.
Peter,

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

Se è possibile utilizzare CSS e si desidera utilizzare l' alignattributo deprecato , un fieldset / legenda in stile funzionerà:

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

Lo scopo previsto di un fieldset è di raggruppare logicamente i campi modulo. Come sottolineato da Willoler, uno text-align: centerstile per non funzionerà per gli legendelementi. align="center"è HTML deprecato ma dovrebbe centrare correttamente il testo in tutti i browser.


Una spiegazione più dettagliata di ciò che stavo cercando.
dclowd9901,

Sono abbastanza sicuro che <legend>assume i tratti di visualizzazione di un elemento blocko inline-block, in quanto può essere imbottito e marginato, il che significa che text-align:centernon dovrebbe funzionare ...
dclowd9901,

sì, le leggende sono ottime per la semantica - le uso per avvolgere i gruppi radio ma sono notoriamente testardi
Willoller,

Ho corretto la mia risposta. Sfortunatamente a causa della testardaggine di alcuni browser nello stile legenddell'elemento, align="center"è l'unica soluzione che ho potuto trovare che centra in modo affidabile a legend.
Trey Hunner,

6

Griglia Bootstrap:

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
La vertical-centerclasse non esiste più in bootstrap (4.3.1). Potresti per favore aggiornare la tua risposta per dire align-items-center?
Cameron Hudson,

5

Puoi semplicemente usare la posizione relativa e impostare un'altezza sul genitore

.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

Ecco una soluzione semplice con solo CSS, senza trucchi di sfondo ...

.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>

esempio violino: https://jsfiddle.net/0Lkj6wd3/


Ottima soluzione riutilizzabile, come una classe di utilità.
Vignesh,

3
<fieldset style="border:0px; border-top:1px solid black">
    <legend>Test</legend>
</fieldset>

Hack malvagio ...


1
Non lo definirei un hack, ma testerei che funzioni in tutti i browser che intendi supportare.
Nick Larsen,

fieldset non vuole essere usato in quel modo, è stato violato al suo posto ;-)
Dänu,

3

Raccogliere un post di 2 anni, ma ecco come affronterò queste situazioni usando solo un elemento e 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;
}

Ed ecco un violino per verificarlo: http://jsfiddle.net/sRhBc/ (immagine casuale di Google presa per il confine).

L'unico inconveniente di questo approccio è che non supporta IE7.


3

Basta usare

    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 il mio primo post anche se questo è un anno. Per evitare i problemi di colorazione dello sfondo con i wrapper, è possibile utilizzare inline-block con hr (nessuno l'ha detto esplicitamente). L'allineamento del testo deve essere centrato correttamente poiché sono elementi incorporati.

<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

Io uso un h1 con una luce nel mezzo.

Esempio HTML:

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

Esempio CSS:

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

Semplice come quella.


Benvenuto in StackOverflow, Youri. Invece di a span, potresti considerare di usare a div. Ha lo stesso scopo, tranne per il fatto che è naturalmente un elemento a blocchi. :)
Nix,

@Nix Elemento di blocco all'interno dell'elemento inline? No grazie, span è una buona scelta
Jonathan Azulay,

1
@MrAzulay h1è un elemento inline. spanè bello per le cose di confezionamento, ma il motivo per cui preferisco un divin questo caso, è perché l'uso Youri CSS per impostare l' spana display:block;. Non vedo il punto di trasformare un elemento inline in un elemento di blocco, quando sono divprontamente disponibili elementi di blocco adeguati ( ).
Nix,

@Nix Non è una cosa abbastanza comune da fare? Mentre mettere blocchi in linea è una cattiva pratica imo. Questo è un buon post a riguardo skypoetsworld.blogspot.se/2008/10/…
Jonathan Azulay,

Ops, ho sbagliato a scrivere nel mio ultimo commento. Sono d'accordo che non dovresti posizionare un blocco all'interno di un elemento inline, ma in h1realtà è un elemento BLOCK. Dispiace per la confusione. Tuttavia, non vedo il punto di trasformare un spanelemento in un blocco, ma abbastanza giusto.
Nix,

2

Guardando sopra, ho modificato in:

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>

Sembra funzionare bene.


2

Prendendo la soluzione di @ kajic e inserendo lo stile nei CSS:

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

Quindi CSS (ma dipende da CSS3 nell'uso dell'ennesimo selettore):

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

Saluti.

(PS su tbody e tr, Chrome, IE e Firefox inseriscono almeno automaticamente un tbody e tr, motivo per cui il mio campione, come @ kajic's, non li ha inclusi in modo da ridurre le cose nel markup html necessario. Questa soluzione è stato testato con le versioni più recenti di IE, Chrome e Firefox, a partire dal 2013).


2

PAGINA DEMO

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

Questo ha funzionato per me e non richiede il colore di sfondo dietro il testo per nascondere una linea di confine, invece utilizza il tag hr effettivo. Puoi giocare con le larghezze per ottenere dimensioni diverse delle linee h.

<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

Ho creato un violino che utilizza FlexBox e ti fornirà anche diversi stili di risorse umane (doppia linea, simboli al centro della linea, ombreggiatura, inserto, tratteggiata, ecc.).

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>

Oppure ecco un violino interattivo: http://jsfiddle.net/mpyszenj/439/


2

Potresti provare a fare un fieldset, e ad allineare l'elemento "legenda" (il tuo testo "sezione successiva") al centro del campo con solo border-topset. Non sono sicuro di come sia posizionata una legenda in base all'elemento fieldset. Immagino che potrebbe essere solo un semplicemargin: 0px auto fare il trucco, però.

esempio :

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

1

Puoi farlo senza <hr />. Semanticamente, il design dovrebbe essere fatto con i mezzi dei CSS, in questo caso è del tutto possibile.

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

C'è sempre il buon vecchio CAMPO

 fieldset
 {
border-left: none;
border-right: none;
border-bottom: none;
 }
 fieldset legend
 {
text-align: center;
padding-left: 10px;
padding-right: 10px;
 }

I set di campi devono essere utilizzati solo con i moduli.
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>

Puoi modificare la larghezza nella classe "side" e "middle" in base alla lunghezza del testo nel tag "span". Assicurati che la larghezza del "mezzo" più 2 volte la larghezza del "lato" sia pari al 100%.


0

Sfondo reattivo e trasparente, altezza e stile variabili del divisore, posizione variabile del testo, distanza regolabile tra il divisore e il testo. Può anche essere applicato più volte con selettori diversi per più stili di divisori nello stesso progetto.
SCSS di seguito.

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

Senza di text-positiondefault, al centro.

demo:

E SCSS , per modificarlo rapidamente:

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

violino qui .


Ciao, apprezzo molto il tuo frammento di codice. Se inserisco un testo con divisore diverso dall'inglese (nel mio caso, coreano), i testi interrompono la linea in ogni due lettere. Potresti capire perché?
Cadenza,

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>

Potrebbe essere necessario modificare la proprietà del margine


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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.