Editar el grosor de línea del atributo 'subrayado' de CSS

117

Dado que puede subrayar cualquier texto en CSS así:

H4 {text-decoration: underline;}

¿Cómo puede también editar esa 'línea' que se dibuja, el color que obtiene en la línea se especifica fácilmente como 'color: rojo' pero cómo se edita la altura de la línea, es decir, el grosor?

BSMP
fuente
10
h4 {border-bottom: 10px solid #000;}
Pranav 웃
@PranavKapoor - ¡Bien! Eso es genial, muchas gracias. Sin embargo, ¿cómo configuro el ancho de este borde en 'automático' ahora para que solo bordee la etiqueta H4 y no todo el ancho del div contenedor?
Puede agregar display:inline-blockpara asegurarse de que el ancho esté establecido, sin embargo, usar un elemento dentro <h4>y diseñar el interior sería mejor. Comprueba mi respuesta a continuación.
Pranav 웃
1
@PranavKapoor - ¡de nuevo! Eres como un ninja CSS. Gracias hombre. Usé esta respuesta que dio en el comentario en lugar de su respuesta publicada a continuación. De esta manera creo que es mejor ya que no es necesario que envuelva su texto en otra etiqueta <u>. Controlas completamente esto desde el lado de CSS.
posible duplicado de Espesor del subrayado
Jukka K. Korpela

Respuestas:

91

Aquí hay una forma de lograrlo:

HTML:

<h4>This is a heading</h4>

<h4><u>This is another heading</u></h4>

CSS:

 u {
    text-decoration: none;
    border-bottom: 10px solid black;
  }​

Aquí hay un ejemplo: http://jsfiddle.net/AQ9rL/

Pranav 웃
fuente
91
... o varias líneas de texto
cfx
En ese caso, debe ajustar el texto de cada línea, antes y después del salto de línea, <span>y aplicar el borde inferior allí. Sin embargo, es una solución que podría ser dolorosa en escenarios no codificados.
Fabián
@cfx si puede, aún puede hacer esto con display: inline;(pero ya no sería un bloque de ningún tipo, podría ayudar a alguien)
jave.web
Me has alegrado el día. GRACIAS
Tessaracter
Esto hará que cambie el diseño. Un borde obligará a otros elementos a moverse, a diferencia de un guión bajo que no lo hará.
Joel Karunungan
51

Recientemente tuve que lidiar con FF, cuyos subrayados eran demasiado gruesos y demasiado alejados del texto en FF, y encontré una mejor manera de lidiar con eso usando un par de sombras de cuadro:

.custom-underline{
    box-shadow: inset 0 0px 0 white, inset 0 -1px 0 black
}

La primera sombra se coloca encima de la segunda y así es como puedes controlar la segunda variando el valor de 'px' de ambas.

Además: varios colores, grosor y posición de subrayado

Menos: no se puede usar en fondos no sólidos

Aquí hice un par de ejemplos: http://jsfiddle.net/xsL6rktx/

anvar
fuente
4
Qué ordenado. Una ventaja (para mí al menos) de este respecto al borde inferior es que el grosor de la "línea" crece hacia el texto, lo que hace que el espacio entre el texto y la línea sea menos grande.
Victor Häggqvist
Obtengo líneas verticales de medio píxel además del subrayado al hacer esto.
yeahdixon
Parece que en un momento fue una respuesta perfecta, pero obtengo líneas verticales muy finas a cada lado del elemento en Chrome 66
pequeño hombrecito
En lugar de blanco , usar transparente funcionaría en caso de cualquier fondo.
Jay Dadhania
Esta es la mejor respuesta. No es necesario modificar el HTML y la solución CSS pura que no alterará las posiciones como lo hacen los bordes.
Joel Karunungan
15

Muy fácil ... fuera del elemento "span" con letra pequeña y subrayado, y dentro del elemento "font" con un tamaño de letra mayor.

<span style="font-size:1em;text-decoration:underline;">
 <span style="font-size:1.5em;">
   Text with big font size and thin underline
 </span>
</span>

user4378029
fuente
8
Si reemplaza la <font>etiqueta obsoleta con una spanetiqueta, esta sería la única respuesta que realmente aborda la pregunta.
matteo
11

Otra forma de hacer esto es usando ": after" (pseudo-elemento) en el elemento que desea subrayar.

h2{
  position:relative;
  display:inline-block;
  font-weight:700;
  font-family:arial,sans-serif;
  text-transform:uppercase;
  font-size:3em;
}
h2:after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  right:0;
  margin:auto;
  background:#000;
  height:1px;

}
Patricio
fuente
10

Actualmente hay text-decoration-thicknessparte del Módulo de Decoración de Texto CSS Nivel 4 . Está en la etapa de "Borrador del editor", por lo que es un trabajo en progreso y sujeto a cambios. A partir de enero de 2020, solo es compatible con Firefox y Safari .

La propiedad de CSS de grosor de decoración de texto establece el grosor o ancho de la línea de decoración que se utiliza en el texto de un elemento, como una línea, un subrayado o una línea superior.

a {
  text-decoration-thickness: 2px;
}

Codepen: https://codepen.io/mrotaru/pen/yLyLOgr (solo Firefox)


También está text-decoration-color, que es parte del Módulo de Decoración de Texto CSS Nivel 3 . Esto es más maduro (recomendación candidata) y es compatible con la mayoría de los principales navegadores (las excepciones son Edge e IE). Por supuesto, no se puede usar para alterar el grosor de la línea, pero se puede usar para lograr un subrayado más "silenciado" (también se muestra en el código del lápiz).

Mihai Rotaru
fuente
Si el usuario está en Firefox, se puede acceder a todas las cosas de decoración de texto text-decoration. No sé si se planea incluir esto en todos ellos, pero si es así será muy bueno en el futuro. EDITAR: es un borrador de trabajo para respaldar estotext-decoration .
Stormblessed
9

Haré algo simple como:

.thickness-underline {
    display: inline-block;
    text-decoration: none;
    border-bottom: 1px solid black;
    margin-bottom: -1px;
}
  • Puede usar line-heighto padding-bottompara establecer la posición entre ellos
  • Puedes usar display: inlineen algún caso

Demostración: http://jsfiddle.net/5580pqe8/

Subrayado CSS

l2aelba
fuente
Desafortunadamente, margin-bottom no puede obtener valores negativos.
Soleshoe
5
@soleshoe Eso es incorrecto, puede tener un margen negativo en la parte inferior de un elemento.
Alex
7

los background-image también se puede utilizar para crear un subrayado.

Tiene que desplazarse hacia abajo background-positiony repetirse horizontalmente. El ancho de la línea se puede ajustar hasta cierto punto usando background-size(el fondo está limitado al cuadro de contenido del elemento).

.underline
{
    --color: green;
    font-size: 40px;
    background-image: linear-gradient(var(--color) 0%, var(--color) 100%);
    background-repeat: repeat-x;
    background-position: 0 1.05em;
    background-size: 2px 5px;
}
<span class="underline">
     Underlined<br/>
     Text
</span>

media pensión
fuente
6

a {
  text-decoration: none;
  position: relative;
}

a.underline {
  text-decoration: underline;
}

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
<h1><a href="#" class="underline">Default: some text alpha gamma<br>the quick brown fox</a></h1>
<p>Working:</p>
<h1><a href="#" class="shadow">Using Shadow: some text alpha gamma<br>the quick brown fox<br>even works with<br>multiple lines</a></h1>
<br>

Solución final: http://codepen.io/vikrant-icd/pen/gwNqoM

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
viCky
fuente
1
El problema es que los diferentes navegadores representan el subrayado de manera diferente.
Joel Karunungan
3

Gracias a la magia de las nuevas opciones de CSS, esto ahora es posible de forma nativa:

a {
  text-decoration: underline;
  text-decoration-thickness: 5px;
  text-decoration-skip-ink: auto;
  text-underline-offset: 3px;
}

Hasta el momento, el apoyo es relativamente deficiente . Pero eventualmente aterrizará en otros navegadores además de ff.

KSPR
fuente
2

Mi solución: https://codepen.io/SOLESHOE/pen/QqJXYj

{
    display: inline-block;
    border-bottom: 1px solid;
    padding-bottom: 0;
    line-height: 70%;
}

Puede ajustar la posición del subrayado con el valor de la altura de la línea, el grosor del subrayado y el estilo con el borde inferior.

Tenga cuidado de desactivar el comportamiento de subrayado predeterminado si desea subrayar un href.

suela
fuente