Reduce tus archivos de CSS con el método corto

Si con CSS se reduce la cantidad de peso por página, ¡porqué no reducir las CSS para que pesen menos! El método es relativamente fácil y les aconsejo también que visiten las especificaciones de la W3C.

Hay dos formas de escribir la misma regla de CSS: la estándar y la shorthand. Una es la larga y la otra es la reducida. Vamos a ver un ejemplo:

div {
margin-top: 10px;
margin-bottom: 15px;
margin-left: auto;
margin-right: 20px;
padding-top: 20px;
padding-bottom: 10px;
padding-left: 15px;
padding-right: 20px;
font-family: Verdana, Arial, san-serif;
font-size: 1em;
font-weight: bold;
line-height: 1.4em;
color: #f00;
}

Luego de aplicar la lógica shorthand, queda:

div {
margin: 10px 20px 15px auto;
padding: 20px 20px 10px 15px;
font: bold 1em/1.4em Verdana, Arial, sans-serif;
color: #f00;
}

A que se ha reducido notablemente todo, pues, así es el mundo corto son formas de expresar las formas estándares pero en espacios reducidos. Esto funciona para casi todas las propiedades del modelo de cajas Box Model del CSS. Pero también a otros atributos como el ejemplo font: que modifica las tipografías.

La lógica es simple, si tenemos una caja imaginaria llamada div class=”modelo” y necesitamos que de margen superior tenga 10 píxeles; de margen lateral izquierdo tenga 15 píxeles; de margen inferior tenga 33 píxeles, finalizando con el margen lateral derecho con 22 píxeles tenemos que escribir:

div.modelo {
margin: 10px 22px 33px 15px;
}

Fue fácil, ahora les contaré cómo adivinar qué posición pertenece a qué margen:

div.nombreclase {
comando: arriba derecha abajo izquierda;
}

Como pueden comprobar, la secuencia cubre en la misma dirección de las agujas del reloj, comenzando siempre por arriba y terminando a la izquierda.

Hay otro caso interesante, nos permite reducir aun más una propiedad shorthand. Por ejemplo, si tenemos los 4 lados con la misma propiedad, en vez de escribir:

div.modelo {
margin: 10px 10px 10px 10px;
}

Podemos resumirlo a:

div.modelo {
margin: 10px;
}

Esto genera 10px en cada lado. El navegador siempre interpretará que cada cara tiene que tener 10 píxeles de lado. Seguimos jugueteando con CSS, ahora veremos qué pasaría si ponemos dos valores en vez de uno, tres y cuatro:

div.modelo {
margin: 10px 22px;
}

Aquí el navegador detectará dos valores como margen para una div que tiene una clase llamada modelo, entonces recurriendo a la regla de los lados en sentido a las agujas del reloj el primer valor sería el superior e inferior a la vez y el segundo el derecho y el izquierdo a la vez. Esto quedaría en una caja que tiene un margen superior/inferior de 10 píxeles más un margen de 22 píxeles a la derecha y a la izquierda:

div {
margin: superior+inferior derecha+izquierda;
}

O sea, con dos valores se controlan los lados superiores y los lados verticales.

Con tres valores, el navegador ya tiene que interpretar los dos conceptos: el de las agujas del reloj y el del modo resumido:

div.modelo {
margin: 10px 22px 10px;
}

Aquí el navegador creará interpreta que la div llamada modelo tiene que tener 10 píxeles de margen superior (pero no inferior) más 22 píxeles de margenes derecho e izquierdo y finalizando un margen inferior de 10 píxeles.

div.modelo {
margin: superior derecho+izquierdo inferior;
}

Esta es la mejor forma de reducir CSS cuando se trata de posicionar elementos. Ahora, hay otros toques mágicos, comenzando por las agrupaciones.

Podemos decir que los elementos A, B y C serán de color gris #666, además incluyen la misma tipografía, el mismo interlineado, dando por hecho que los tres tienen muchas características en común, entonces, cualquier paisano escribiría:

A {
color: #666;
font-family: Arial, sans-serif;
font-size: 10pt;
line-height: 18pt;
}

B {
color: #666;
font-family: Arial, sans-serif;
font-size: 10pt;
line-height: 18pt;
}

C {
color: #666;
font-family: Arial, sans-serif;
font-size: 10pt;
line-height: 18pt;
}

Pero como buen paisano se dá cuenta de la similitud de estos elementos y los agrupa en uno:

A, B, C {
color: #666;
font-family: Arial, sans-serif;
font-size: 10pt;
line-height: 18pt;
}

Esto es un grupo. Cada elemento está separado por una coma ”,” y un espacio. Algunos navegadores interpretan mejor este sistema (A, B, C) y otros sin espacios no tienen problemas también (A,B,C), recomiendo siempre separar con un espacio para no crear confusiones y evitar malentendidos entre navegadores.

Terminando el ejemplo, vamos a aprender también como se manejan las tipografías.

Mientras que A, B y C tienen la misma tipografía. Conviene usar el método corto para especificarlas:

A, B, C {
color: #666;
font: 10pt/18pt Arial, sans-serif;
}

Esto se traduce en estos pasos: tamaño de tipografía, contra-barra, interlineado, espacio, tipografías. Esto da a entender que las tipografías deben ser normales y no negritas:

A, B, C {
color: #666;
font: normal 10pt/18pt Arial, sans-serif;
}

Si van a hacer normales, no hace falta indicarlo en la linea, pero si tiene que ser negrita por ejemplo, conviene poner:

A, B, C {
color: #666;
font: bold 10pt/18pt Arial, sans-serif;
}

Entonces la secuencia seria: peso inclinación tamaño/interlineado tipografías;. Esto podría traducirse en este ejemplo:

A, B, C {
font: bolder italic 12pt/24pt “Courier New”, Courier, monospace;
}

Hay más ejemplos shorthands y trucos. Están para los bordes, backgrounds etc. Les recomiendo que terminen de aprender a toda perfección en una especificación del W3C, ahí tendréis toda la información exacta atributo que soporta el método resumido.

20 Comentarios en “Reduce tus archivos de CSS con el método corto”

Gravatar de Jordi

Jordi
30 de Julio de 2004 a las 10:12 am    

Creo que en la primera transformación te has equivocado en la propiedad color. Muy buenos consejos, sobre todo el último.

Saludos.

Gravatar de Iam Gonn

Iam Gonn
30 de Julio de 2004 a las 11:20 am    

Por fin me entero del metodo abreviado para las tipografias! Gracias!

Gravatar de stan

stan
30 de Julio de 2004 a las 12:03 pm    

Demasiado util Diego… creo que aplicare mas seguido esos metodos que suguieres…

Espero sigas teniendo la opotunidad de publicar tips y consejos como estos… asi como tambien de xhtml…

Se que no es de este post quisas… pero como puedo poner en mi pagina…. que el buscador de google cuando le de en español de mexico aparezca mi sitio, pues mi sitio esta en español… pero no se como decirle que es de mexico.

Espero tu o alguien de las personas que lee este blog pueda ayudarme… gracias y en hora buena :)

Esta informacion hace que el blog sea valioso para mi :)

Gravatar de Conectada

Conectada
30 de Julio de 2004 a las 12:54 pm    

Veo que tú también has leido “Optimización de sitios Web” de Andrew B. King. Interesante libro, aunque a veces intenta optimizar tanto la velocidad que se olvida de otros aspectos de la usabilidad web…

Gravatar de mini-d

mini-d
30 de Julio de 2004 a las 1:02 pm    

Nunca he leído ese libro.

Toda la documentación está en el W3C, basta leerla, asimilarla y comenzar a probar los resultados. Es como un “reverse engineering”.

Gravatar de Pablo Martinez

Pablo Martinez
30 de Julio de 2004 a las 1:47 pm    

Estan
creo que puedes utilizar esta cabecera

Gravatar de cordin

cordin
30 de Julio de 2004 a las 2:37 pm    

bravo, diego

Gravatar de Alex

Alex
30 de Julio de 2004 a las 2:58 pm    

Interesante post, si señor (y ya van… :o)

Más reducción de peso se podría conseguir quitando los saltos de línea, espacios y sangrías inútiles. Cuando se está creando una hoja de estilos, es bueno tener una indentación clara, para que visualmente nos sea más sencilla de ver.

Pero en vez de poner:

A, B, C {
font: bolder italic 12pt/24pt “Courier New”, Courier, monospace;
}

usamos

A,B,C{font:bolder italic 12pt/24pt “Courier New”,Courier,monospace}

en una hoja de estilos de muchas líneas, con muchas clases e identificadores, también se puede ahorrar un nada despreciable número de bytes.

Cuando esté colgada en la red, y ya tenemos una versión definitiva de la hoja de estilos, no hace falta que tenga una buena presencia para ver el código, simplemente, que funcione.

Gravatar de Luis

Luis
30 de Julio de 2004 a las 3:19 pm    

Bueno ya que ha salido el tema de css yo ampliaría la opción para el navegador explorer 5, que todabía hay gente que lo tiene…. aunque ya menos. Si pones el tamaño de fuente en por ejemplo de 1 em. En la mayoría de los navegadores se ve bien pero en el explorer 5 se ve enorme. En ese caso se utiliza un truquillo en el css.

estilo {

font-size: 0.7em;<br />
    voice-family: ""}"";<br />
    voice-family: inherit;<br />
font-size: 1em;<br />

}

noexiste {}

de esta manera todos los navegadores empiezan a leer por el principio, pero en el caso del 5 cuando llega a las dos lineas estas
voice-family: “”}”";
voice-family: inherit;
se lia y corta de leer. En el caso de los demás navegadores siguen leyendo y de esta manera el tamaño de 0.7 lo refrescan por el de 1em (el caso del 5 se había quedado con el 0.7).

La etiqueta #noexiste {} es necesaria porque al usar este método la siguieten etiqueta no funciona bien. De este modo hacemos que falle #noexiste {} y las demás siguen funcionando bien.

Bueno un poco rollo pero…. es práctico, sobre todo para la gente del explorer 5

Gravatar de douglas

douglas
30 de Julio de 2004 a las 3:52 pm    

¿ Es posible diseñar una unica hoja de estilo para un site de mediana a gran complejidad de manera que funcione correctamente para el mayor numero de navegadores, y no tener que detectar navegador en el documento y en funcion de ello enlazar la css adecuada para este o aquel navegador, esto lo pregunto pues he estado desarrollando un site, el cual he querido trabajarlo enteramente con css, pero noto claras inconsistencias por ejemplo entre IE6 y firefox, bueno esto no es tema nuevo, pero lo que si pesa y frustra es que cuando desarrollas y ves, por ejemplo que tu obra se ve perfectamente como quieres en FFOX, no pasa lo mismo con IE(y no hables de versiones anteriores), entonces te sucede que un contenedor sale un poco mas a la izq o der. de lo normal, etc, etc,,, pues entoces le pregunto a uds. si existe una forma de diseñar los sites y sus respectivas css de forma que sean digeridas de la mejor manera por al menos los nav. mas utilizados del mundo wintel, mac, linux?

Gravatar de Carlos-Crc

Carlos-Crc
30 de Julio de 2004 a las 4:00 pm    

Tenes mucha razon, se reduce mucho mas el CSS. Lo que me cuesta recordas a veces es el orden que tiene que tener para colocar los valores para top, left, right, es decir si el primer valor es para left, el segundo para top, etc. Cual es el orden?

Ps. Me entere que necesitabas una invitación para Gmail, si todavia la necesitas escribi a carloscrc(at)gmail.com y te mando una.

Xaludos.

Gravatar de hector

hector
30 de Julio de 2004 a las 6:44 pm    

eeh luis, muy buen crack, pero Diego, todo lo quehas puesto es valido para todos los navegadores, digo por que todos sabemos que el IE no tiene un buen soporte de CSS, entonces me pregunto cuales son las restricciones que se podrian encontrar al usar este “resumen”. Gracias por los tips ;)

Gravatar de Jo

Jo
30 de Julio de 2004 a las 7:48 pm    

Buen artículo, aunque yo ya hace algun tiempo que voy utilizando estas formas cortas no lo leí en ningún libro, si no que lo aprendí a base de observar css de otras páginas y de otros manuales parecidos a este.

Que personalmente opino que es la mejor forma, ya que es dificil encontrar libros que esten al dia, y si los encuentras no són precisamente baratos.

Gravatar de stan

stan
31 de Julio de 2004 a las 6:07 am    

Cual Cabecera Pablo Martinez???

Gravatar de myd

myd
31 de Julio de 2004 a las 8:44 am    

Buenísimo Diego!
Me acabo de guardar tu post como referencia.

Gravatar de chinaski

chinaski
31 de Julio de 2004 a las 10:52 am    

esta bien piola el artículo. esto, sumado a lo que dice alex de la quita de espacios y demás (cosa que css optimizer lo hace automáticamente) puede reducir considerablemente el peso del css final, aunque no pude comprobar el posible conflicto q mencionas en algunos browsers).

Gravatar de mini-d

mini-d
31 de Julio de 2004 a las 12:18 pm    

Carlos-Crc, hay un apartado especial en el artículo para saber en que orden van los valores. Por las dudas te lo repito:

arriba derecha abajo izquierda.

Siempre van en el sentido de las agujas del reloj.

Gravatar de Luis Aledo

Luis Aledo
1 de Agosto de 2004 a las 8:56 pm    

Bueno he visto que alguien ha preguntado si se puede hacer un sitio más o menos amplio y que sea visible correctamente en todos los navegadores, sin tener que detectar cuando carga un css si es un navegador o otro. Bueno pues yo creo que sí pero tambien no se lo aconsejo a nadie que tenga prisa. Yo pertenezco a un gropo de folklore y realicé la página del mismo. Y ahora como en el trabajo le estoy metiendo caña a esto del css se me ocurrio la brillante idea….. de hacer la página de mi gupo optimizada para todos los navegadores y sin utilizar ni una sola tabla… bueno un currazo de miedo pero parece que la estoy terminando. Por si alguien quiere opinar la original la tengo colocada aquí http://www.villadealhama.com y la optimizada aquí http://www.villadealhama.com/accesible/ .No está terminada pero bueno ya va teniendo algo de pinta. También estoy haciendo el css correspondiente para que a la hora de imprimir la página solo se imprima lo que verdaderamente importa, el contenido y alguna foto, nada de menú… etc.

Pues eso… trabajo y trabajo. Pero mucha satisfacción cuando vas a donde vayas pc mac explorer mozilla opera firefox…. siempre está perfecta.

Saludos.
Luis.

Gravatar de Weblog de logicanova.com

Weblog de logicanova.com
10 de Agosto de 2004 a las 10:30 am    

[…] rmite por ejemplo realizar algunas operaciones de manera automática, como por ejemplo

Gravatar de Milton Mazzarri

Milton Mazzarri
13 de Agosto de 2004 a las 1:54 am    

Solo quería añadir que según la especificación del W3C siempre es recomendable añadir la propiedad background-color cuando se usa la propiedad color, es decir, siempre que se especifique el color de frente se recomienda especificar en la misma regla el color de fondo. En caso de que no se desee el color de fondo se puede especificar como valor transparent.

Cabe destacar que tambien se puede realizar una abreviatura en el codigo hexadecimal de los colores, esto siempre y cuando los pares que indican el Rojo (R), el Verde (G), y el Negro (B) sean iguales. Por ejemplo, si tenemos #666666 podriamos reducirlo a #666, entonces, podriamos tener #ab8 de manera reducida, de manera amplia seria #aabb88.

Más entradas en Minid.net