2011-01-31 39 views
46

Uso unos pocos colores en mi hoja de estilo CSS. Por ejemplo¿Es posible definir constantes en css?

#testdiv{ 
    background: #123456; 
} 

¿Es posible definir ese color por su nombre para que pueda hacer referencia a ella en la hoja CSS como esto

#testdiv{ 
    background: COLORNAME; 
} 
+1

Si utiliza un marco como SASS, obtendrá esta característica junto con otras características brillantes. – Coderchu

+0

Sí, ahora se llaman [Propiedades personalizadas CSS] (https://mobile.htmlgoodies.com/html5/css/a-guide-to-using-css-variables.html) – gbjbaanb

Respuesta

14

Es probablemente una mejor práctica para definir una clase CSS y volver a usarlo en cada elemento que desea asignar el color a la vez de la codificación a una elemento específico

así:

.darkBackground { 
    background: #123456; 
} 

.smallText { 
    font-size:8pt; 
} 

También ayuda a saber que un elemento puede tener varias clases aplican para que pueda romper con sus valores de los elementos "constantes" en clases separadas y aplicar más de una si es necesario.

<div id="myDiv1" class="darkBackground smallText"></div> 
<div id="myDiv2" class="darkBackground bigText"></div> 
+32

No soy muy aficionado a tu ejemplo. Creo que las clases CSS se usan mejor para clasificar la estructura del documento html. Una clase llamada darkBackground no describe la estructura del documento y crea un acoplamiento conceptual del documento con algún aspecto de la apariencia, que es exactamente de lo que se supone que CSS nos aleja. Si un futuro desarrollador necesita cambiar a fondos claros, posiblemente tendrá que editar montones de html para usar la clase "lightBackground" o desafiar el significado de sus clases editando la regla "darkBackground" para hacer referencia a un color claro. – csj

+0

@csj Siéntase libre de editar mi respuesta con un mejor ejemplo si le gusta – JohnFx

+9

A decir verdad, su ejemplo aborda el problema fundamental experimentado por el op y otros: css no proporciona constantes (las razones de eso son un debate completamente diferente) Lidiar con esto parece reducirse a 3 opciones: 1. (su sugerencia) use clases de CSS para identificar el estilo en lugar de la estructura. 2. (la respuesta de probabilityzero) usa alguna forma de generador css programático del lado del servidor. 3. Renunciar, aceptar la molestia y aceptar el paradigma css como está. Dado que su respuesta fue aceptada sin oposición y tengo una preferencia de 2 o 3, pensé que agregaría mis 2 centavos. Cheers – csj

58

No con CSS sencillo, pero hay algunas extensiones de CSS que se podía uso, como SASS o less-css.

He aquí un ejemplo de menos css:

@color: #4D926F; 

#header { 
    color: @color; 
} 
h2 { 
    color: @color; 
} 
+29

Es increíble que las constantes no tengan sido agregado a CSS3 todavía. El desarrollo web es en la edad media. –

+0

@ AlikElzin-kilaka Me sentí así durante años, pero después de usar less-css por un tiempo y experimentar la multitud de características que trae a la mesa, dejé de preocuparme por los déficits que percibía que tenía CSS. – csj

1

Uso SASS o less.

Hoy en día, el uso de preprocesadores como el anterior es una práctica común para un mejor flujo de trabajo de desarrollo front-end.

Te ayuda a ser más organizado y las características como variables o mixins son algunas de las razones que vale la pena tener en cuenta.

14

Hay un couple of proposals para esto, por lo que podría suceder pronto, pero hasta ahora no se ha estandarizado nada.

El problema con el uso de clases CSS para esto es que no son de ayuda si desea utilizar el mismo valor para diferentes propiedades, por ejemplo, si desea utilizar un valor de color particular para un borde en un elemento y un color de fondo en otro.

+1

IMO, esta debería ser la respuesta correcta. Además, no puede hacer una clase CSS como 'customers-process-step-color-1' y aplicarla automáticamente a pseudo elementos como': before'. Tienes que configurar el color a ': before' directamente. –

-5

La forma estándar de hacerlo es PHP. Añadir declaraciones #define al comienzo de su archivo CSS, como

#define COLORNAME: #123456;

lugar de vincular al archivo CSS en la cabeza de su archivo HTML, ejecutar un script PHP en ese lugar. El script carga el archivo CSS, reemplaza todas las ocurrencias de COLORNAME por #123456 y transmite el texto parcheado al cliente usando echo o print.

Alternativamente, podría cargar el archivo fuente (también usando PHP), usar PHP para crear un archivo CSS una vez que todas las ocurrencias de #defines sean reemplazadas, y usar ese archivo en su HTML. Esto es más eficiente, ya que está haciendo la conversión solo una vez, en la carga, en lugar de cada vez que carga el archivo HTML.

-2

Usted puede tener constantes en un archivo CSS, declarándolos como esto:

*{ 
-my-lightBlue: #99ccff; 
-my-lightGray: #e6e6e6; 
} 

entonces usted puede utilizar en el archivo CSS como esto:

.menu-item:focused { 
    -fx-background-color: -my-lightBlue; 
} 

Después de que usted puede utilizar programáticamente como este:

progressBar.setStyle("-fx-accent: -my-lightBlue;"); 
+4

Eso solo se aplica a JavaFX css – Caleb

4

En CSS, puede declarar su constante en: root bloc:

:root { 
    --main-bg-color: #1596a7; 
} 

y usar con el método de var():

.panel-header { 
    background: var(--main-bg-color); 
    color: .... 
} 
4

Sí, el uso de clases es un buen enfoque, pero ahora es posible declarar variables en el CSS. Y las variables (especialmente las de color) son increíblemente útiles cuando declaras el mismo color (uno donde necesitas el valor hexadecimal, si usas un color integrado, realmente no importa tanto).

Y esto está usando CSS simple (y tbh, no tan elegante como usar SASS o menosCSS) pero funciona con propósitos de CSS simple. Primero, defina la variable real en el bloque :root. Puedes definirlo en, por ejemplo, también un bloque p (o cualquier otra cosa) pero solo estará disponible en ese bloque. Así que para asegurarse de que es accesible a nivel mundial, lo puso en el bloque de la raíz:

:root { 
    --custom-color: #f0f0f0; 
} 

Y el uso de la var método (sin el método var no se resolverá como una referencia real) a continuación, puede hacer referencia a ella más tarde:

p{ 
    color: var(--custom-color); 
} 

Desde el bloque :root es (al igual que todas las demás declaraciones CSS) un bloque totalmente funcional que hace referencia a los elementos, no se puede declarar algo como:

:root{ 
    color: #00ff00; 
} 

Eso haría referencia al atributo de color de cada elemento individual y lo configuraría (en este ejemplo) #00ff00. Cada nombre de variable se declara tiene que empezar con --, lo que significa que puede hacer:

:root{ 
    --color: #00ff00; 
} 

Y de nuevo, si se puede, usar algo como SASS o lessCSS. La capacidad de declararlos escribiendo @color = #fff * y haciendo referencia a @color * es mucho más fácil que lidiar con CSS simple y tener que usar la palabra clave var cada vez que quiera acceder a una propiedad personalizada.

Y se puede acceder CSS en línea con JS para obtener y/o alterar las propiedades:

//Inline CSS 
element.style.getPropertyValue("--custom-color"); 

// get variable from wherever 
getComputedStyle(element).getPropertyValue("--custom-color"); 

// set variable on inline style 
element.style.setProperty("--custom-color", "#f0f0f0"); 

NOTA!

Esta es una función recientemente agregada, así que browser compatibility is important to check. Especialmente merece la pena prestar especial atención a Firefox, ya que tiene una brecha entre la introducción de las declaraciones de variables en sí y el método var().

* con lessCSS Es @color, con SASS es $color

Cuestiones relacionadas