CSS
…
elementoAfectadoPorElEstilo { propiedad1ParaEseTipoDeElementos:valor; propiedad2ParaEseTipoDeElementos:valor; propiedad3ParaEseTipoDeElementos:valor; … propiedadnParaEseTipoDeElementos:valor; }
|
ul {color:red;} a {color:green; text-decoration: none;}
|
Portal web aprenderaprogramar.com
Didáctica y divulgación de la programación
- y en algunos casos, por ejemplo menús, queramos aplicar un estilo, y en otros casos, por ejemplo listas de elementos dentro de un artículo periodístico, queramos aplicar otro estilo. También es posible que deseemos que los elementos del menú sean links con texto verde y sin subrayado, pero queramos mantener el resto de links como texto azul con subrayado. Tal y como hemos hecho la definición de estilos no conseguimos hacer esto, ya que estamos modificando
/* Comentario en CSS estilos aprenderaprogramar.com*/
ul {color:red;}
a {color:green; text-decoration: none;}
|
…
|
DECLARACIÓN CSS
|
ARCHIVOS AFECTADOS
|
CSS SE APLICA A
|
En línea
|
Uno, aquel donde se realiza la declaración
|
Una línea de código.
|
Interna
|
Uno, aquel en cuya cabecera se realiza la declaración
|
Todos los elementos del archivo en los que resulte de aplicación el estilo
|
Externa
|
Todos los archivos que invoquen el archivo css
|
Todos los elementos de los archivos afectados en que resulte de aplicación el estilo
|
Propiedades que controlan el flujo del contenido en una caja.
Propiedades que controlan el tamaño de una caja.
Propiedades que controlan los márgenes de una caja.
Propiedades que controlan los rellenos de una caja
Otras propiedades
,
,
, , ,
- ,
,
,
, , ,
- ,
,
,
La cascada
Sección
- Importancia
- Especificidad
- Orden del código
Importancia
Sección
- Vemos que se han aplicado los valores de color y padding, pero no el de background-color ¿Porqué? En realidad deberían haberse aplicado las tres pues las reglas declaradas más tarde normalmente prevalecen sobre las anteriores.
- Sin embargo, ganan las reglas anteriores, pues los selectores de ID/clase son más específicos que los selectores de elemento (lo veremos en la siguiente sección).
- Ambos elementos pertenecen a la class better, pero el 2do tiene además la idwinning. Las IDs son más específicas que las clases (solo podemos tener un elemento para cada ID en una página, pero podemos tener varios elementos de la misma clase — los selectores ID son muy específicos en aquello que seleccionan), el fondo de color rojo y el borde de 1px negro se deberían aplicar al segundo elemento, y el primer elemento tomará el fondo gris, sin borde, como indica la clase.
- El 2do elemento toma el fondo rojo, pero no el borde. ¿Porqué? La declaración !important de la segunda regla — declarada después de (border: none) hará que esta declaración prevalezca sobre el valor del borde de la regla anterior, incluso aunque ID tenga una especificidad mayor.
- Declaraciones en el documento de estilos del usuario (como los estilos por defecto del navegador, usados cuando no hay otros estilos fijados)
- Declaraciones normales en el documento de estilos del usuario (establecidos por el propio usuario)
- Declaraciones normales en el documento de estilos del autor (los estilos establcidos por nosotros, los desarrolladores web)
- Declaraciones !Important en el documento de estilos del autor
- Declaraciones !Important en el documento de estilos del usuario
Especificidad
Sección
- Unidades de millar: Puntúa 1 en esta columna si la declaración está dentro de un atributo style (como las declaraciones que no tienen selectores, que su especificidad es siempre 1000). Sino puntúa 0.
- Centenas: Puntúa 1 en esta columna por cada selector ID contenido en el selector.
- Decenas: Puntúa 1 en esta columna para cada selector de clase, selector de atributo o de pseudo-clase contenidos en el selector.
- Unidades: Puntúa 1 en esta columna por cada selector de elemento o pseudo-elemento contenidos en el selector.
Selector
|
1000
|
100
|
10
|
1
|
Especif. Total
|
h1
|
0
|
0
|
0
|
1
|
0001
|
#important
|
0
|
1
|
0
|
0
|
0100
|
h1 + p::first-letter
|
0
|
0
|
0
|
3
|
0003
|
li > a[href=*"en-US"] > .inline-warning
|
0
|
0
|
2
|
2
|
0022
|
1 | 1 | 1 | 3 | 1113 |
Nota: Si varios selectores tienen la misma importancia y especificidad, ganará el que se declara más tarde en el código Source order.
Antes de avanzar, veamos un ejemplo en acción. Dado el siguiente HTML:
<div id="outer" class="container"> <div id="inner" class="container"> <ul> <li class="nav"><a href="#">Onea>li> <li class="nav"><a href="#">Twoa>li> ul> div> div>
Y el correspondiente CSS para el ejemplo:
/* specificity: 0101 */ #outer a { background-color: red; } /* specificity: 0201 */ #outer #inner a { background-color: blue; } /* specificity: 0104 */ #outer div ul li a { color: yellow; } /* specificity: 0113 */ #outer div ul .nav a { color: white; } /* specificity: 0024 */ div div li:nth-child(2) a:hover { border: 10px solid black; } /* specificity: 0023 */ div li:nth-child(2) a:hover { border: 10px dashed black; } /* specificity: 0033 */ div div .nav:nth-child(2) a:hover { border: 10px double black; } a { display: inline-block; line-height: 40px; font-size: 20px; text-decoration: none; text-align: center; width: 200px; margin-bottom: 10px; } ul { padding: 0; } li { list-style-type: none; }
El resultado que obtenemos de este código es como sigue:
¿Qué ha pasado aquí? Primero, solo nos interesan las primeras siete reglas del ejemplo, y como comprobaremos, hemo incluido sus valores de especificidad en un comentario antes de cada uno:
Los dos primeros selectores compiten para dar estilo al color de fondo del link — el segundo gana y hace que el fondo se establezca en color azul porque tiene un selector de ID más en la cadena: su especificidad es de 201 contra 101.
Los selectores tercero y cuarto compiten para dar estilo al color del texto de los links — el segundo gana y hace el texto blanco aun teniendo un elemento selector menos, el selector que falta se ha cambiado por un selector de clase, que vale 10 en lugar de 1. Con todo, gana la especificidad de 113 frente a 104.
Los selectores del 5–7 compiten para estilizar los marcos de los links cuando pasa el ratón. El selector 6 pierde contra el 5 con especificidades de 23 contra 24 — tiene un selector de elementos menos en la cadena. El selector 7 gana al 5 y al 6 — tiene el mismo número de sub-selectores en la cadena que el 5, pero uno de los elementos se ha cambiado por un selector de clase. Por lo que la especificidad ganadora es de 33 contra 23 y 24.
Nota: Si no lo hemos hecho aún, es momento de revisar los selectores una vez más para asegurarnos que comprendemos porqué se les ha otorgado los valores de especificidad mostrados.
Orden del código
Sección
Como hemos mencionado, si varios selectores competidores tienen la misma importancia y especificidad, el tercer factor que interviene para decidir qué regla vence es el orden del código — las últimas reglas prevalecen sobre las primeras. Por ejemplo:
p { color: blue; } /* This rule will win over the first one */ p { color: red; }
Pero en el siguiente ejemplo, la primera regla gana porque el orden del código es sobrescrito por la especificidad:
/* This rule will win */ .footnote { color: blue; } p { color: red; }
Una nota en la combinación de reglas
Sección
Cuando estudiamos la teoría sobre la cascada, y el porqué unos estilos se aplican y otros no, es que esto ocurre a nivel de las propiedades — unas propiedades prevalecen sobre otras, pero no reglas enteras prevaleciendo sobre otras reglas. Cuando varias reglas CSS apuntan al mismo elemento, todas se aplican sobre él. Solo después de esto se evalúan los conflictos entre las propiedades para saber qué estilos prevalecerán sobre los otros.
Veamos un ejemplo. Primero, el HTML:
<p>I'm <strong>importantstrong>p>
Y ahora CSS para dar estilo:
/* specificity: 0002 */ p strong { background-color: khaki; color: green; } /* specificity: 0001 */ strong { text-decoration: underline; color: red; }
Resultado:
te ejemplo, por su especificidad, la primera regla de la propiedad color sobrescribe la propiedad de color de la segunda regla. No obstante, tanto el background-color de la primera regla y la text-decoration de la segunda regla se aplican sobre el elemento . Habrás notado que el texto de ese elemento está en negrita: esto procede del documento de estilo por defecto del navegador para el elemento .
Herencia
Sección
La herencia en CSS es la última pieza que necesitamos conocer para tener la información completa y comprender qué estilo se aplicará a un elemento. La idea es que unos elementos se heredarán por los elementos hijos, y otros no.
Por ejemplo, tiene sentido que font-family y color sean heredadas, pues nos facilita establecer un ancho de fuente básico aplicando una familia de fuentes al elemento ; después podemos reemplazar las fuentes de elementos individuales si es necesario. Sería realmente molesto tener que establecer la fuente base para cada elemento por separado.
Otro ejemplo: tiene sentido que margin, padding, border, y background-image NO se hereden. Imaginemos el lio de formato/estilo que ocurriría si aplicamos estas propiedades en un elemento y fuera heredado por todos y cada uno de sus hijos, y después tener que "desaplicarlas" a todos los elementos también.
Las propiedades que se heredan por defecto y las que no, viene marcado en gran medida por el sentido común. Pero para estar seguros podemos consultar la Referencia CSS — cada propiedad viene en una página que comienza con una tabla resumen que incluye diversos detalles sobre cada elemento, incluyendo si se hereda o no.
Control de la herencia
Sección
CSS dispone de tres valores especiales para manejar las herencias:
inherit : Este valor establece el valor de la propiedad de un elemento seleccionado en el mismo que su elemento padre.
initial : Este valor establece el valor de la propiedad de un elemento seleccionado en el valor por defecto que establece la hoja de estilos del navegador, si este no existe, la propiedad se hereda naturalmente, adoptando el valor de inherit.
unset : Este valor reestablece la propiedad a su valor natural, esto es: si la propiedad se hereda de forma natural entonces actuará como inherit, sino, actuará como initial.
El valor inherit es el más interesante — nos permite, de forma explícita, hacer que un elemento herede de su padre el valor de una propiedad.
Echemos un vistazo a un ejemplo. Primero, como siempre, el HTML:
<ul> <li>Default <a href="#">linka> colorli> <li class="inherit">Inherit the <a href="#">linka> colorli> <li class="initial">Reset the <a href="#">linka> colorli> <li class="unset">Unset the <a href="#">linka> colorli> ul>
Y el CSS para dar estilo:
body { color: green; } .inherit a { color: inherit; } .initial a { color: initial } .unset a { color: unset; }
Resultado:
Veamos que ha pasado aquí:
Primero hemos puesto en verde el color de .
Como la propiedad color es heredada naturalmente, todos los elementos hijos de body tendrán color verde. Cabe señalar que los navegadores establecen por defecto los links en color azul en vez de permitir heredar naturalmente la propiedad color, entonces el primer link de la lista será azul.
La segunda regla establece que los links dentro de un elemento con la clase inherithereden el color de su padre. En este caso, el link hereda el color de su padre , que por defecto, hereda su color de su padre
La tercera regla selecciona cualquier link dentro de un elemento con la clase initialy establece el color a initial. Normalmente, el valor inicial de los navegadores para el color de texto es el negro, luego este link será negro.
La última regla selecciona todos los links dentro de los elementos con la clase unset y pone su valor a unset — no establece valor. Al ser la propiedad color una propiedad heredada naturalmente actúa como si la clase fuera inherit. En consecuencia, este link se pondrá al mismo color que body — esto es verde.
8. ¿Qué es minificar recursos?
e entiende por "minificación" el proceso mediante el cual se eliminan datos innecesarios o redundantes de un recurso sin que se vea afectada la forma en que los navegadores lo procesan. Por ejemplo, eliminar comentarios y formato innecesario, retirar código que no se usa, emplear variables y nombres de funciones más cortos, etc.
Para obtener más información, consulta la sección Minificación: procesamiento previo y optimizaciones específicas para el contexto.
Recomendaciones
Es aconsejable minificar tus recursos de HTML, CSS y JavaScript. Para hacerlo, dispones de las siguientes herramientas:
Para minificar HTML, prueba HTMLMinifier.
Para minificar JavaScript, prueba UglifyJS, aunque la herramienta Closure Compiler también es muy efectiva. Puedes diseñar un proceso de programación en el que se usen estas herramientas para minificar los archivos de desarrollo, cambiarles el nombre y guardarlos en un directorio de producción.
9. Que es el flex box en CSS3
La dirección en la que se van ordenando los elementos se llama dirección principal. Una vez agotado el espacio, los elementos se pueden ir ordenando en la dirección perpendicular a la dirección principal, que se llama dirección secundaria.
El orden y dirección de los elementos flexibles (de izquierda a derecha o de derecha a izquierda, de arriba abajo o de abajo arriba) son los mismos que las direcciones de escritura. Para simplificar la redacción, en esta lección se supone que la dirección de escritura es la tradicinal en Occidente, es decir, la dirección principal es de izquierda a derecha y la dirección secundaria es de arriba abajo.
La etiqueta que agrupa los elementos flexibles se llama contenedor flexible, mientras que los elementos incluidos en un contenedor flexible se llaman elementos flexibles.
Comentarios
Publicar un comentario