Me gustaría usar condiciones en mi CSS.
La idea es que tengo una variable que reemplazo cuando se ejecuta el sitio para generar la hoja de estilo correcta.
¡Lo quiero para que de acuerdo con esta variable cambie la hoja de estilo!
Parece que:
[if {var} eq 2 ]
background-position : 150px 8px;
[else]
background-position : 4px 8px;
Se puede hacer esto? ¿Cómo haces esto?
css
stylesheet
conditional-statements
Haim Evgi
fuente
fuente
Respuestas:
No en el sentido tradicional, pero puede usar clases para esto, si tiene acceso al HTML. Considera esto:
y en su archivo CSS:
Esa es la forma CSS de hacerlo.
Luego están los preprocesadores CSS como Sass . Puede usar condicionales allí, que se verían así:
Las desventajas son que está obligado a preprocesar sus hojas de estilo y que la condición se evalúa en tiempo de compilación, no en tiempo de ejecución.
Una característica más nueva de CSS propiamente dicha son las propiedades personalizadas (también conocidas como variables CSS). Se evalúan en tiempo de ejecución (en los navegadores que los admiten).
Con ellos podrías hacer algo en la línea:
Finalmente, puede preprocesar su hoja de estilo con su idioma del lado del servidor favorito. Si está usando PHP, entregue un
style.css.php
archivo, que se parece a esto:En este caso, sin embargo, tendrá un impacto en el rendimiento, ya que el almacenamiento en caché de dicha hoja de estilo será difícil.
fuente
A continuación se muestra mi respuesta anterior, que sigue siendo válida, pero hoy tengo un enfoque más obstinado:
Una de las razones por las que CSS apesta tanto es exactamente que no tiene sintaxis condicional. CSS es en sí completamente inutilizable en la pila web moderna. Use SASS por un momento y sabrá por qué digo eso. SASS tiene sintaxis condicional ... y MUCHAS otras ventajas sobre CSS primitivo también.
Respuesta anterior (aún válida):
¡No se puede hacer en CSS en general!
Tienes los condicionales del navegador como:
Pero nadie le impide usar Javascript para alterar el DOM o asignar clases dinámicamente o incluso concatenar estilos en su respectivo lenguaje de programación.
A veces envío clases css como cadenas a la vista y las hago eco en el código así (php):
fuente
Puede usar
calc()
en combinación convar()
para imitar condicionales:concepto
fuente
Puede crear dos hojas de estilo independientes e incluir una de ellas según el resultado de la comparación
En uno de los puedes poner
En el otro
Creo que la única verificación que puede realizar en CSS es el reconocimiento del navegador:
CSS condicional
fuente
Me sorprende que nadie haya mencionado las pseudoclases de CSS, que también son una especie de condicionales en CSS. Puede hacer algunas cosas bastante avanzadas con esto, sin una sola línea de JavaScript.
Algunas pseudoclases:
Ejemplo:
fuente
Configure el servidor para analizar archivos css como PHP y luego defina la variable variable con una declaración PHP simple.
Por supuesto, esto supone que estás usando PHP ...
fuente
@import url('dynamic.css.php')
.Puedes usar not en lugar de if like
fuente
Hasta donde yo sé, no hay if / then / else en css. Alternativamente, puede usar la función javascript para alterar la propiedad de posición de fondo de un elemento.
fuente
Otra opción más (basada en si desea que la instrucción if se evalúe dinámicamente o no) es usar el preprocesador C, como se describe aquí .
fuente
(Sí, hilo antiguo. Pero apareció en la parte superior de una búsqueda de Google, por lo que otros también podrían estar interesados)
Supongo que la lógica if / else podría hacerse con javascript, que a su vez puede cargar / descargar dinámicamente hojas de estilo. No he probado esto en navegadores, etc. pero debería funcionar. Esto te ayudará a comenzar:
http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml
fuente
Esta es una pequeña información adicional a la respuesta de Boldewyn anterior.
Agregue un código php para hacer el if / else
fuente
Puede agregar div contenedor para todo el alcance de su condición.
Agregue el valor de la condición como una clase al contenedor div. (puede configurarlo mediante la programación del lado del servidor - php / asp ...)
Ahora puede usar la clase contenedora como una variable global para todos los elementos en el div usando un selector anidado, sin agregar la clase a cada elemento.
fuente
Puede usar javascript para este propósito, de esta manera:
fuente
CSS es un paradigma muy bien diseñado y muchas de sus características no se utilizan mucho.
Si por condición y variable te refieres a un mecanismo para distribuir un cambio de algún valor a todo el documento, o bajo el alcance de algún elemento, entonces así es como se hace:
De esta forma, distribuye el impacto de la variable en todos los estilos CSS. Esto es similar a lo que proponen @amichai y @SeReGa, pero más versátil.
Otro truco de este tipo es distribuir el ID de algún elemento activo en todo el documento, por ejemplo, nuevamente al resaltar un menú: (se usa la sintaxis de Freemarker)
Claro, esto solo es práctico con un conjunto limitado de elementos, como categorías o estados, y no conjuntos ilimitados como productos de tienda electrónica, de lo contrario, el CSS generado sería demasiado grande. Pero es especialmente conveniente al generar documentos estáticos sin conexión.
Un truco más para hacer "condiciones" con CSS en combinación con la plataforma de generación es este:
fuente
Si está abierto a usar jquery, puede establecer declaraciones condicionales usando javascript dentro del html:
Esto cambiará el color del texto de
.class
a verde si el valor de Variable es mayor que0
.fuente
solo haz esto en html usando un operador ternario, no si no
class = "{{condición? 'class1': 'class2'}}"
o
[ngClass] = "condición? 'class1': 'class2'"
fuente
Puede usar php si escribe css en la etiqueta
fuente