Línea antes y después del título sobre la imagen [duplicado]

Resuelto JUO asked hace 10 años • 2 respuestas

Quiero crear una línea antes y después de un título centrado . La línea y el texto deben tener un fondo transparente para poder posicionarlos sobre un fondo irregular. La línea no debe tener 100% de ancho, así:

Texto centrado con línea antes y después sobre una imagen.

El texto del título puede cambiar:

  • Se desconoce el ancho del título.
  • El título puede abarcar varias líneas.

h1 {
  text-align: center;
  border-bottom: 1px solid #000;
}
<h1>Today</h1>
Expandir fragmento

JUO avatar May 11 '14 00:05 JUO
Aceptado

Puedes hacer una línea a ambos lados del título con 2 pseudo elementos y bordes:

  • Esto funciona sobre un fondo transparente (las líneas y el título tienen fondos transparentes).
  • La longitud de la línea se adaptará al ancho del título para que siempre comiencen y terminen en la misma posición independientemente de la longitud del título.
  • El título puede abarcar varias líneas mientras que las líneas izquierda y derecha permanecen centradas verticalmente ( tenga en cuenta que debe envolver el título en una <span>etiqueta para que esto funcione. Vea la demostración ).

Título con línea antes y después sobre una imagen.

@import url(http://fonts.googleapis.com/css?family=Open+Sans:300);
 body {
  background-image: url(http://i.imgur.com/EzOh4DX.jpg);
  background-repeat: no-repeat;
  background-size: 100% auto;
  font-family: 'Open Sans', sans-serif;
}
h1 {
  width: 70%;
  margin: .7em auto;
  overflow: hidden;
  text-align: center;
  font-weight:300;
  color: #fff;
}
h1:before, h1:after {
  content: "";
  display: inline-block;
  width: 50%;
  margin: 0 .5em 0 -55%;
  vertical-align: middle;
  border-bottom: 1px solid;
}
h1:after {
  margin: 0 -55% 0 .5em;
}
span {
  display: inline-block;
  vertical-align: middle;
}
<h1>Today</h1>
<h1>Today news</h1>
<h1><span>Today<br/>news</span></h1>
Expandir fragmento

web-tiki avatar May 10 '2014 17:05 web-tiki

Aquí hay otro enfoque mediante el uso de la pantalla Flexbox. La flex-growpropiedad especifica cómo se debe distribuir el espacio libre entre los elementos cuando su tamaño total es menor que el tamaño del contenedor.

Por defecto no widthse especifica en los elementos que producen las líneas y no tienen content(lo que significa que están básicamente vacíos y no ocupan espacio). Sin embargo, la flex-growconfiguración de estos elementos haría que el espacio sobrante (espacio total del contenedor - espacio del texto) se distribuya equitativamente entre ellos. Esto hace que parezca que la línea va de un extremo al otro, excepto donde está el texto.

Línea sólida a cada lado del contenido:

En el siguiente fragmento, se utiliza un degradado de arriba a abajo para producir el efecto de tener una línea sólida a cada lado del contenido.

Mostrar fragmento de código

ingrese la descripción de la imagen aquí


Línea con efecto de degradado a ambos lados del contenido:

En el siguiente fragmento, se utiliza un degradado fino de izquierda a derecha para producir el efecto de una línea que va de un color sólido cerca del contenido a transparente en el otro lado.

Mostrar fragmento de código

ingrese la descripción de la imagen aquí

Nota: En el fragmento he usado spanelementos adicionales para las líneas porque IE11 no parece admitir flex-growpseudoelementos. De lo contrario, también se puede lograr lo mismo con un pseudoelemento.


El inconveniente de este enfoque es la compatibilidad del navegador con esta función, que es bastante baja en este momento. Es posible que también deba adoptar algunas personalizaciones específicas del navegador que se detallan en mi respuesta aquí , que es similar a esta.

En la actualidad, esto no aporta nada adicional a la respuesta de web-tiki, pero es solo otra opción posible. Este enfoque sería más útil en casos como el siguiente :

Mostrar fragmento de código

ingrese la descripción de la imagen aquí

Harry avatar Jun 09 '2015 15:06 Harry