Agregue texto centrado a la mitad de una línea similar a <hr />

217

Me pregunto qué opciones tiene uno en xhtml 1.0 estricto para crear una línea en ambos lados del texto de la siguiente manera:

Seccion uno
----------------------- Siguiente sección -----------------------
Sección dos

He pensado en hacer algunas cosas elegantes como esta:

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

O alternativamente, porque lo anterior tiene problemas con la alineación (tanto vertical como horizontal):

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

Esto también tiene problemas de alineación, que resuelvo con este desastre:

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

Además de los problemas de alineación, ambas opciones se sienten "confusas", y estaría muy agradecido si hubiera visto esto antes y conociera una solución elegante.

Brian M. Hunt
fuente
3
Aquí hay otro hilo con un desafío sin etiquetas adicionales, ¡y una solución! stackoverflow.com/questions/12648513/…
willoller
1
stackoverflow.com/questions/5214127/… sigue siendo la mejor solución.
Una respuesta útil aquí emplearía CSS Grid.
Brian M. Hunt
Se agregó una respuesta (SCSS) que transforma casi cualquier elemento en un divisor sin establecer el fondo y permite la configuración: color y estilo de trazo (sólido, punteado, punteado) del divisor, posición del texto (izquierda, derecha, centro), así como la clase que aplica esto (por defecto .divider).
tao
Dado el soporte actual de flexbox , creo que mi respuesta podría ganar algo de visibilidad.
MatTheCat

Respuestas:

64

No sé si esto se ha resuelto, pero flexbox ofrece una buena solución:

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

Ver http://jsfiddle.net/MatTheCat/Laut6zyc/ para la demostración.

Hoy la compatibilidad no es tan mala (puede agregar todas las sintaxis antiguas de flexbox) y se degrada con gracia.

MatTheCat
fuente
La mejor respuesta teniendo en cuenta el soporte de flexbox en estos días
akivajgordon
esta es una buena solución
Smaillns
217

Qué tal si:

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

Mira este JSFiddle .

Puede usar vwo %para que responda .

Fletcher Moore
fuente
2
Obtener el valor máximo exacto es un poco difícil. No es exactamente -0.5em;
Mitar
Perfecto. "Responsive" también
JimXC
44
Vea mi respuesta para una solución que no requiere que especifique el color de fondo o el ancho.
MartinF
Vea mi respuesta para bg transparente, sensible, estilo variable y altura del divisor, posición variable del texto. También se puede aplicar más de una vez a diferentes selectores, por tener más de un estilo de divisor en el mismo proyecto, usando SCSS. Funciona con cualquiera font-size.
tao
193

La forma de resolver esto sin conocer el ancho y el color de fondo es la siguiente:

Estructura

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

Ejemplo: http://jsfiddle.net/z8Hnz/

Doble linea

Para crear una línea doble, use una de las siguientes opciones:

1) Espacio fijo entre líneas

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

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

2) espacio personalizado entre líneas

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

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


Versión SASS (SCSS)

Basado en esta solución, agregué SCSS "con propiedad de color" si pudiera ayudar a alguien ...

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

ejemplo de uso:

//content.scss
h2 {
    @include bg-strike($col1);
    color: $col1;
}
MartinF
fuente
Esta versión funciona mejor si está utilizando una imagen para la línea, o al menos es más fácil de editar y responde
tehlivi
¡Muy buen trabajo! ¿Puedes usar tu magia para crear una doble línea? (De lo contrario, recurriré al uso de una pequeña imagen de fondo repetitiva.)
wloescher
3
Gran fragmento! Gracias :)
plong0
2
Esta es la mejor respuesta porque funcionará sin establecer el fondo, y cuando tenga que establecer el fondo transparente
Dinesh Dabhi
1
¡El primer ejemplo es simplemente increíble! Felicidades! ¡Debería ser la respuesta correcta!
Luiz Eduardo
87

Puede lograr esto con :: before y :: after sin conocer el ancho del contenedor o el color de fondo, y para lograr un mayor estilo de los saltos de línea. Por ejemplo, esto se puede modificar para hacer líneas dobles, líneas punteadas, etc.

JSFiddle

Uso de CSS y 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>

Versión 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;
    }
}
Omnisciencia
fuente
1
Solución elegante, aunque tiene una advertencia: si no habrá texto, aún tendrá un espacio entre líneas.
Farside
13
Esta es la solución más limpia en este hilo para ser honesto, el problema sin texto puede pasarse por alto ya que siempre querría el divisor con texto.
Robert
51

Prueba esto:

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

Vista previa en vivo en jsFiddle .

Diodeus - James MacFarlane
fuente
44
Funciona perfectamente y usa <hr />, entonces, ¿qué podría estar mal con esta respuesta? No dije nada.
Kirby el
44
+1 No es necesario meterse con el color de fondo o usar etiquetas de manera no deseada. Una desventaja es que el .divider hrancho depende de la longitud del texto. Sugerencia: .dividery los .divider hranchos deben especificarse en emunidades. Para obtener el hrancho, use ( .dividerancho menos # de caracteres) / 2.
Kelvin el
12
No es la mejor solución. ¿Qué sucede si no tiene certeza sobre el ancho del texto? Todo se arruinará cuando el texto sea más largo.
Iwona Trąbka
Esta es la mejor y la respuesta más simple
ha9u63ar
1
40% está mal aquí. Si el texto es más largo, se alinearía mal
TomSawyer
21

Acabo de encontrar el mismo problema, aquí hay una forma de resolverlo:

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

Funciona sin establecer un fondo en el elemento de texto, es decir, se verá bien independientemente del fondo que haya detrás.

Puedes probarlo aquí: http://jsfiddle.net/88vgS/

Robert Kajic
fuente
No resuelve el problema del OP. Eso crea dos líneas con texto entre ellas. Él quiere una línea que se divide en parte y tiene texto en la sección rota, luego la línea continúa.
Dracorat
2
Realmente hace lo que el OP está pidiendo. Puedes verlo en jsfiddle.net/88vgS
Robert Kajic
Además, ¿qué es una línea discontinua a mitad de camino, con texto en la sección discontinua, si no dos líneas con texto entre ellas?
Robert Kajic
Deberías tirar las etiquetas TR apropiadas allí. Creo que eso es lo que me confundió por un momento. Originalmente pensé por alguna razón que estaba en tres líneas, no en tres columnas. El marcado correcto probablemente no me hubiera hecho verlo de esa manera. De todos modos, definitivamente es una solución viable.
Dracorat
1
Pero esto usa tablas, ¡eso NO ESTÁ PERMITIDO! Oh, solo bromeaba. GRIDS tiene su lugar, casi todos los demás marcos XML GUI lo reconocen y los usan en todas partes (por ejemplo, WPF / XAML). Gracias por la solución compañero! Esto merece más de 3 votos. Sin embargo, sospecho que la aversión de la gente a las mesas odiadas será un obstáculo.
Nicholas Petersen
10

ACTUALIZAR: Esto no funcionará con HTML5

En su lugar, consulte esta pregunta para obtener más técnicas: desafío CSS, ¿puedo hacer esto sin introducir más HTML?


Solía line-height:0crear el efecto en el encabezado de mi sitio 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;
}

Otro buen método está en http://robots.thoughtbot.com/

Utiliza una imagen de fondo y flota para lograr un efecto genial.

Willoller
fuente
1
Me gusta esto, se ve muy bien en su sitio, pero no pude hacerlo funcionar (sospecho que hay interferencia de jQuery css). :( Pero es realmente genial.
Brian M. Hunt
Creo que tu h1 está presionando el lapso hacia abajo.
imns
1
Este es un "hack" que emplea el comportamiento de representación diferente para DOCTYPE XTHML 1.0 Transitional. Si usa DOCTYPE html (para HTML5), NO funcionará.
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>
Aleksejs Mjaliks
fuente
6

Si puede usar CSS y está dispuesto a usar el alignatributo en desuso , un conjunto de campos con estilo / leyenda funcionará:

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

El propósito previsto de un conjunto de campos es agrupar lógicamente campos de formulario. Como señaló willoler, un text-align: centerestilo para no funcionará para legendelementos. align="center"está en desuso HTML pero debe centrar el texto correctamente en todos los navegadores.

Trey Hunner
fuente
Una explicación más detallada de lo que estaba buscando.
dclowd9901
Estoy bastante seguro de que <legend>adquiere los rasgos de visualización de una blocko inline-blockelemento, ya que puede ser acolchada y con margen, lo que significa text-align:centerno debe trabajar ...
dclowd9901
sí, las leyendas son geniales para la semántica: las uso para envolver grupos de radio pero son notoriamente obstinadas
Willoller
Corrija mi respuesta. Desafortunadamente, debido a la terquedad de ciertos navegadores en el diseño del legendelemento, align="center"es la única solución que pude encontrar que se centra de manera confiable a legend.
Trey Hunner
6

Rejilla 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;
}
dasfdsa
fuente
1
La vertical-centerclase ya no existe en bootstrap (4.3.1). ¿Podría por favor actualizar su respuesta para decir align-items-center?
Cameron Hudson
5

Podrías usar la posición relativa y establecer una altura en el padre

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

Heres una solución simple con css solamente, sin trucos de fondo ...

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

violín de ejemplo: https://jsfiddle.net/0Lkj6wd3/

Yftach
fuente
Gran solución y reutilizable, como una clase de utilidad.
Vignesh
3
<fieldset style="border:0px; border-top:1px solid black">
    <legend>Test</legend>
</fieldset>

Hack malvado ...

Dänu
fuente
1
No lo llamaría un hack, pero probaría que funciona en todos los navegadores que pretendes admitir.
Nick Larsen
fieldset no quiere ser usado así, ha sido pirateado en su lugar ;-)
Dänu
3

Subiendo una publicación de 2 años, pero así es como abordo estas situaciones usando solo un elemento y 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;
}

Y aquí hay un violín para comprobarlo: http://jsfiddle.net/sRhBc/ (imagen aleatoria de Google tomada para el borde).

El único inconveniente de este enfoque es que no es compatible con IE7.

Lazar Vuckovic
fuente
3

Solo usa

    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;
    }
Anit Garg
fuente
2

Woohoo mi primer post a pesar de que este tiene un año. Para evitar los problemas de color de fondo con los envoltorios, puede usar el bloqueo en línea con hr (nadie lo dijo explícitamente). La alineación de texto debe centrarse correctamente ya que son elementos en línea.

<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>
Jacob Block
fuente
2

Yo uso un h1con un lapso en el medio.

Ejemplo HTML:

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

Ejemplo CSS:

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

Simple como eso.

Youri
fuente
Bienvenido a StackOverflow, Youri. En lugar de a span, podrías considerar usar a div. Sirve para el mismo propósito, excepto que es naturalmente un elemento de bloque. :)
Nix
@Nix Elemento de bloque dentro del elemento en línea? No, gracias, el lapso es una buena opción
Jonathan Azulay
1
@MrAzulay h1es un elemento en línea. spanes agradable para la materia de embalaje, pero la razón por la que prefiero una diven este caso, se debe a que el uso Youri CSS para establecer el spana display:block;. No veo el punto de convertir un elemento en línea en un elemento de bloque, cuando hay elementos de bloque adecuados ( div) fácilmente disponibles.
Nix
@Nix ¿No es eso algo bastante común? Si bien poner bloques dentro de línea es una mala práctica imo. Esta es una buena publicación al respecto skypoetsworld.blogspot.se/2008/10/…
Jonathan Azulay
Vaya, escribí mal en mi último comentario. Estoy de acuerdo en que no debe colocar un bloque dentro de un elemento en línea, sino h1que en realidad es un elemento BLOCK. Perdón por la confusion. Aún así, no veo el punto de convertirlo spanen un elemento de bloque, pero lo suficientemente justo.
Nix
2

Mirando arriba, modifiqué a:

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>

Parece funcionar bien.

usuario2673353
fuente
2

Tomando la solución de @ kajic y poniendo el estilo en CSS:

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

Luego CSS (pero depende de CSS3 al usar el enésimo selector):

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

Salud.

(PD: en tbody y tr, Chrome, IE y Firefox al menos insertan automáticamente un tbody y tr, por lo que mi muestra, como @ kajic's, no los incluyó para mantener las cosas más cortas en el marcado html necesario. Esta solución fue probado con las versiones más recientes de IE, Chrome y Firefox, a partir de 2013).

Nicholas Petersen
fuente
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; }
vsync
fuente
2

Esto funcionó para mí y no requiere color de fondo detrás del texto para ocultar una línea de borde, en su lugar usa la etiqueta hr real. Puede jugar con los anchos para obtener diferentes tamaños de líneas 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>
usuario3898371
fuente
2

Hice un violín que usa FlexBox y también le dará diferentes estilos de HR (línea doble, símbolos en el centro de la línea, sombra, recuadro, guiones, etc.).

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>

O aquí hay un violín interactivo: http://jsfiddle.net/mpyszenj/439/

Jade
fuente
2

Puede intentar hacer una fieldsety alinear el elemento "leyenda" (el texto de la "siguiente sección") en la mitad del campo con solo border-topestablecer. No estoy seguro de cómo se coloca una leyenda de acuerdo con el elemento del conjunto de campos. Sin embargo, imagino que podría ser simple margin: 0px autohacer el truco.

ejemplo:

<fieldset>
      <legend>Title</legend>
</fieldset>
dclowd9901
fuente
1

Puedes lograr esto sin <hr />. Semánticamente, el diseño debe hacerse con los medios de CSS, en este caso es bastante posible.

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>

fuente
1

Siempre existe el viejo FIELDSET

 fieldset
 {
border-left: none;
border-right: none;
border-bottom: none;
 }
 fieldset legend
 {
text-align: center;
padding-left: 10px;
padding-right: 10px;
 }
Chet en C2IT
fuente
Los conjuntos de campos solo deben usarse con formularios.
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;
}
Nikhil Bhardwaj
fuente
0

Puede crear un bloque de envoltura con alguna imagen de fondo adecuada (y también establecer un color de fondo para su bloque de texto centrado).

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

Puede modificar el ancho en la clase "lado" y "medio" en función de la longitud de su texto en la etiqueta "span". Asegúrese de que el ancho del "medio" más 2 veces el ancho del "lado" sea igual al 100%.

Betty Lee
fuente
0

Fondo transparente receptivo, altura y estilo de divisor variables, posición variable del texto, distancia ajustable entre el divisor y el texto. También se puede aplicar varias veces con diferentes selectores para múltiples estilos de divisor en el mismo proyecto.
SCSS a continuación.

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

Sin text-positionque por defecto se centre.

Manifestación:

Y SCSS , para modificarlo rápidamente:

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

violín aquí .

tao
fuente
Hola, realmente aprecio tu fragmento de código. Si pongo un texto con un separador que no sea inglés (en mi caso, coreano), los textos rompen la línea en cada dos letras. ¿Podrías entender por qué?
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>

Es posible que deba ajustar la propiedad de margen

Srikrushna
fuente