Archivo de la categoría ‘css’

Sub-pixel en Internet Explorer: SASS al rescate

Sábado, 5 de mayo de 2012

Uno de los problemas actuales de aplicar Responsive Design es sin duda el aburrido bug casuado por el Sub-pixel en nuestro odiado Internet Explorer.

Para usar Responsive Design versiones de IE inferiores a la 9, recuerda que puedes hacerlo usando Respond.js o css3-mediaqueries-js)

¿En qué consiste? Si visitaste el enlace anterior puedes ahorrarte la siguiente explicación. Básicamente se resumen en que este problema a la hora de maquetar se da debido al redondeo que hacen los diferentes navegadores al aplicar un porcentaje a un tamaño.

Imaginemos 3 contenedores, de 49, 50 y 51 píxeles cada uno. Dentro de cada uno vamos a crear 4 columnas (usando porcentajes, es decir, width: 25%). ¿Qué tamaño en píxeles tendría cada columna?

Caso 1: 49px x 0.25 = 12.25
Caso 2: 50px x 0.25 = 12.5
Caso 3: 50px x 0.25 = 12.75

Pues aquí está el problema: Webkit (Chrome, Safari, etc…) y Opera redondean hacia abajo, dejando espacio de sobra. FireFox, IE8, y IE9, modifican el tamaño de las cajas (siendo mayor al esperado) en caso de que sobre espacio por cubrir. Y el inservible IE7 y el menos inservible IE8 para decimales superiores o iguales a .5, redondean hacia arriba, o lo que es lo mismo, para ellos, las columnas serían de 12px, 13px y 13px, haciendo saltar inevitablemente la última columna, maldición nuestra incluída.

Entonces, como ya habrás pensado, la solución es que en nuestra hoja de estilos específicos para IE, le damos menos porcentaje a esas columnas y ya. Y sí, ¿pero cuánto menos? ¿A ojo? Puede servirnos, pero la maquetación no será fiel del todo al diseño original. La solución es:

(0.5 / tamaño_del_contenedor) * 100 = 50 / tamaño_de_contenedor

Y aquí es donde llega SASS y te hace la vida fácil. Si alguien encuentra una solución mejor, el gist siguiente es público y puede ser editado a gusto del consumidor :)

Este post no habría sido posible sin el artículo de Tyler Tate.

‘border-radius’ mixins de andar por casa

Lunes, 28 de noviembre de 2011

Últimamente estoy dándole algo de caña a Compass y usándolo en algún que otro proyecto. Es un framework CSS increíble, con muchas herramientas para hacernos la vida más fácil a los fronteneros (o al menos a intentarlo). Entre muchas de estas herramientas está el módulo CSS3, que proporciona mixins para propiedades CSS3 como por ejemplo border-radius. Os animo a darle una oportunidad a este fantástico framework, nos os decepcionará.

En cualquier caso, si no os da por probar Compass, pero usáis SCSS y estáis hartos de repetiros como loros en vuestro código (DRY!) estáis tardando en utilizar mixins y variables para solucionarlo. Aquí os dejo un ‘mixin casero’ para la propiedad border-radius, que no es (pero casi) como los de Compass, pero dan el apaño. Enjoy it!

Yaml sin @import: adaptando un framework CSS

Martes, 18 de mayo de 2010

Actualmente, en la empresa en la que trabajo (Flowers in Space), utilizamos YAML para nuestros desarrollos. Mucho se ha debatido sobre usar o no usar un framework, pero no es lo que nos ocupa ahora. En nuestro caso os puedo decir que agiliza nuestros desarrollos, más adelante es posible que me extienda un poco más sobre el asunto y os doy pros y contras con detalle.

Lamentablemente, aunque nos gusta mucho y nos sentimos cómodos con él, sólo le veíamos una pega, y es que para cargar todas las hojas de estilo de las que hace uso utiliza @import. Hace ya algún tiempo Anieto2k, uno de mis blogs de cabecera, nos explicaba los beneficios de no usar @import. En resumen nos viene a contar que utilizar la etiqueta link permite que todos los ficheros CSS se carguen de forma simultánea.

Así que con el fin de utilizarlo en nuestros futuros proyectos he echado un rato en quitar todos los import de Yaml y a la vez, crear una estructura de directorios intuitiva, con la que nos sintamos cómodos y que nos permita actualizarlo rápidamente a las nuevas versiones del framework. A falta de un nombre mejor lo denominaré YamlMod.

Consideraciones previas

A destacar: esta modificación de Yaml atiende a necesidades propias. ¿Qué quiero decir con esto?

  • YamlMod está actualizado a la versión 3.2.1 (revisión 392) de Yaml: intentaré mantenerlo actualizado, sobre todo si veo que tiene buena acogida la idea.
  • Addons que trae por defecto Yaml eliminados: no hacemos uso de ellos, pero podéis incorporarlos vosotros manualmente sin ningún inconveniente.
  • forms.css de Yaml eliminado: nosotros utilizamos Formtastic, que trae su propia hoja de estilos.
  • División entre admin y application: nuestros desarrollos los realizamos en Ruby on Rails. Solemos utilizar dos layouts para dividir la zona de administración y la parte pública, así que he mantenido esto en la modificación de Yaml.
  • Utilizamos el lenguaje de marcado Haml para describir nuestro xHTML: os explico esto porque a continuación os indico cómo realizar la carga hojas de estilo.

Cómo importar YamlMod

¿Cómo quedaría nuestro application.html.haml? Aquí tenéis un ejemplo, con algunas líneas comentadas (las que no solemos utilizar nosotros tan a menudo). Ojito con la indentación si vas a copiar el código y pegarlo en algún sitio.


/Stylesheets
= stylesheet_link_tag 'reset','core/base_all', :media => "all"
= stylesheet_link_tag 'core/base_screen', :media => "screen,projection"
/= stylesheet_link_tag 'core/base_print', :media => "print"

= stylesheet_link_tag 'screen/application/basemod', :media => "screen,projection"
= stylesheet_link_tag 'screen/application/content', :media => "all"

/Si quieres incluir la navegación pestañas de YAML, descomenta la línea siguiente
/= stylesheet_link_tag 'navigation/nav_shinybuttons', :media => "all"

/ Incluir aquí el tipo de print.css necesario, si procede
/ Más info: http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
/= stylesheet_link_tag 'print/print_123', :media => "print"

/[if lte IE 7]
  = stylesheet_link_tag 'patches/iehacks_all', :media => "all"
  = stylesheet_link_tag 'patches/iehacks_screen', :media => "screen,projection"
  /= stylesheet_link_tag 'patches/iehacks_print', :media => "print"
  /Si quieres incluir la navegación pestañas de YAML, descomenta esta línea
  /= stylesheet_link_tag 'patches/patch_nav_vlist',  :media => "screen,projection"
  / descomenta la siguiente línea si has incluido algún parche personal para
  /= stylesheet_link_tag 'patches/application_patches', :media => "all"

¿Cómo quedaría nuestro admin.html.haml?


/Stylesheets
= stylesheet_link_tag 'reset','core/base_all', :media => "all"
= stylesheet_link_tag 'core/base_screen', :media => "screen,projection"
/= stylesheet_link_tag 'core/base_print', :media => "print"

= stylesheet_link_tag 'screen/admin/basemod', :media => "screen,projection"
= stylesheet_link_tag 'screen/admin/content', :media => "all"

/Si quieres incluir la navegación pestañas de YAML, descomenta la línea siguiente
/= stylesheet_link_tag 'navigation/nav_shinybuttons', :media => "all"

/ Incluir aquí el tipo de print.css necesario, si procede
/ Más info: http://www.yaml.de/en/documentation/css-components/layout-for-print-media.html
/= stylesheet_link_tag 'print/print_123', :media => "print"

/[if lte IE 7]
  = stylesheet_link_tag 'patches/iehacks_all', :media => "all"
  = stylesheet_link_tag 'patches/iehacks_screen', :media => "screen,projection"
  /= stylesheet_link_tag 'patches/iehacks_print', :media => "print"
  /Si quieres incluir la navegación pestañas de YAML, descomenta esta línea
  /= stylesheet_link_tag 'patches/patch_nav_vlist',  :media => "screen,projection"
  / descomenta la siguiente línea si has incluido algún parche personal para
  /= stylesheet_link_tag 'patches/admin_patches', :media => "all"

Espero que el recurso os sea de utilidad.

>> Descargar YamlMod ( Yaml versión 3.2.1 revisión 392 )