2011-12-29 22 views
11

¿Hay alguna manera de configurar el border-color en CSS para que sea el mismo que el color de texto?Establecer color de borde CSS a color de texto

Por ejemplo, tener una clase que agrega un borde punteado inferior, pero dejando el color de dicho borde para que coincida con el color del texto de la misma manera que el color text-decoration:underline es el color del texto (color propiedad) ?

+1

Un inversa de esta pregunta se ha hecho: [? ¿Por qué heredar CSS color del borde de la propiedad de color de la fuente] (http://stackoverflow.com/questions/34667409/why-does-css-border-color-inherit-from-the-fonts-color-property) – BoltClock

Respuesta

38

En realidad, obtienes este comportamiento de forma gratuita; es mencionado en el spec:

Si el color del borde de un elemento no se especifica con una propiedad frontera, los agentes de usuario deben utilizar el valor de la propiedad 'color' del elemento que el valor calculado para el color del borde.

Así que todo lo que tiene que hacer es omitir el color cuando se utiliza el border propiedad resumida:

.dotted-underline { 
    border-bottom: dotted 1px; 
} 

O utilice únicamente los border-style y border-width propiedades, y no border-color:

.dotted-underline { 
    border-bottom-style: dotted; 
    border-bottom-width: 1px; 
} 

O bien, en browsers that support la nueva palabra clave CSS3 currentColor, especifique que como valor para border-color (u seful para anular border-color declaraciones existentes):

.dotted-underline { 
    border-bottom-color: currentColor; 
    border-bottom-style: dotted; 
    border-bottom-width: 1px; 
} 

El color que la frontera adquiere will be the same as the text color by default.

+1

No puedo encontrar esa regla en la nueva especificación: http://www.w3.org/TR/css3-background/ - podría ser que se ha eliminado en favor de 'currentColor' ... –

+0

Lo encontré. La especificación establece que el valor inicial de las propiedades 'border - * - color' es' currentColor' (que corresponde a la regla de CSS 2.1). –

+0

@ Šime Vidas: En realidad es el mismo comportamiento. Todo lo que hace el módulo CSS3 es proporcionar una palabra clave que represente el color utilizado actualmente. – BoltClock

1

Deberá configurar estos colores para que sean del mismo color.

Si quiere que su CSS sea más programático y SECO, debería usar algo como LESS. Puede ahorrarte mucho trabajo, por lo que solo debes declarar ese color una vez.

+0

¡Esto no es lo que él pidió! ¿Qué sucede si no conoce el color del elemento, sobre el que desea establecer el borde? No hay necesidad de preprocesadores CSS aquí. (Lamentablemente no puedo votar aún) –

6

Este:

border-bottom: 1px dotted currentColor; 

De la especificación:

currentcolor El valor de la propiedad ‘color’. El valor calculado de la palabra clave 'currentColor' es el valor calculado de la propiedad 'color'. Si la palabra clave 'currentColor' se establece en la propiedad 'color' en sí, se trata como 'color: inherit'.

Ver aquí: http://www.w3.org/TR/css3-color/#currentcolor

(no funciona en IE8 aunque)


Actualización: Por lo tanto, parece que establecer explícitamente el valor del color no es necesario, ya que la el valor predeterminado ya es es el valor de la propiedad color.

Por lo tanto, esto funciona muy bien:

border-bottom: 1px solid; 
+0

+1 La buena noticia es que está relacionado con el comportamiento CSS1 y 2 de usar el valor 'color' como el valor inicial para' border-color' si no se especifica, y eso es muy bien soportado por todos los navegadores. – BoltClock

Cuestiones relacionadas