¿Debería empezar a usar CSSLint?

Hacer que nuestro código sea revisado por un profesional es una excelente manera de mejorar la calidad del código, pero ¿qué sucede si no tiene acceso a un programador de Rockstar? Usted hace la mejor cosa siguiente y toma una "pelusa" para ese idioma.

Hoy, me gustaría hablar un poco sobre CSSLint, una herramienta de análisis de código recientemente lanzada para, lo has adivinado, CSS. Únete a mí después del salto!


¿Qué es exactamente una pelusa?

Vamos a Wikipedia para una definición:

Lint es una herramienta que marca el uso sospechoso en software escrito en cualquier lenguaje informático..

Básicamente, una pelusa mira nuestro código y verifica las malas prácticas de programación. Variables indefinidas, construcciones ineficientes, cosas así..

Probablemente te estés preguntando por qué necesitarías una herramienta así. Seamos realistas: no todos nosotros tenemos un conocimiento supremo de lo que estamos trabajando o tenemos el lujo de conseguir que nuestro código sea revisado por pares. En estos casos, pegar nuestro código en una pelusa es la mejor opción. Y a diferencia de las herramientas de limpieza, la pelusa escupe información sobre su código y cómo mejorarlo.


Introduciendo CSSLint

Creada por Nicholas Zakas y Nicole Sullivan, CSSLint es una herramienta de código abierto que verifica su sintaxis contra un conjunto de reglas predefinidas para eliminar posibles ineficiencias y asegurarse de que su presentación funcione como es de esperar con pocas sorpresas..

Después de dirigirse al sitio de CSSLint, simplemente puede pegar su CSS de origen y elegir las reglas que desea aplicar. Pulsa el botón de la pelusa y CSSLint comenzará a erosionar tu presunción..

Si eres un adicto a Node como yo, también hay una versión para eso. Solo escribe sudo npm install -g csslint y eres bueno para ir!


Las reglas de la pelusa de CSS

Echemos un vistazo rápido a las reglas que CSSLint impone.

  • Los errores de análisis deben ser arreglados
  • No uses clases contiguas
  • Eliminar reglas vacias
  • Usa las propiedades correctas para una pantalla
  • No uses demasiados flotadores
  • No uses demasiadas fuentes web
  • No utilice también declaraciones de tamaño de letra
  • No use IDs en los selectores
  • No calificar títulos
  • Los estilos de título solo deben definirse una vez
  • Los valores cero no necesitan unidades
  • Las propiedades prefijadas del vendedor también deben tener el estándar
  • Los gradientes CSS requieren todos los prefijos del navegador
  • Evita los selectores que parecen expresiones regulares.
  • Cuidado con los modelos de caja rota
  • No uses @import
  • No uses! Importante
  • Incluir todos los prefijos de proveedores compatibles
  • Evitar propiedades duplicadas

Si eres como yo, algunas de las reglas deben haberte desconcertado.


Haz que las reglas tengan sentido?

Francamente, sí, no y todo lo demás..

Después de merodear en varios foros de discusión y salas de IRC, descubrí que muchos desarrolladores parecen estar alborotados por las reglas y tal vez sí. Permítame intentar explicar por qué la mayoría de las reglas tienen sentido pero otras no..

Las reglas controvertidas

No use IDs en los selectores

Las identificaciones no se deben usar en los selectores porque estas reglas están muy unidas al HTML y no tienen posibilidad de reutilización. Es mucho más preferido usar clases en selectores y luego aplicar una clase a un elemento en la página.

Este golpeó un nervio con muchos desarrolladores ya que estamos bastante acostumbrados a asignar ID para los componentes estructurales principales de un diseño como el encabezado y el pie de página..

CSSLint sostiene que el estilo de dichos elementos, por definición, no se puede reutilizar directamente. Si desea barras laterales dobles en su página, una clase le permite reutilizar el estilo mientras que una ID no.

Tenga en cuenta que solo porque una clase pueda reutilizarse no significa que tenga que ser así. Las clases únicas son perfectamente aceptables y una forma excelente de reutilizar el estilo si surge la necesidad..

No calificar títulos

Los elementos de encabezado (h1-h6) deben definirse como estilos de nivel superior y no deben incluirse en áreas particulares de la página..

La mayoría de los desarrolladores, incluido yo, se han acostumbrado a escribir encabezados sensibles al contexto. Al igual que en, definimos un estilo separado para los encabezados dependiendo de, digamos, en qué página se muestra. Un argumento a favor de este enfoque es que mueve todos los cruces desde el marcado a la hoja de estilo. Simplemente puede definir una etiqueta y dejar que el CSS caiga en consecuencia.

CSSLint sostiene que este enfoque compromete la previsibilidad de su diseño. Si alguien más tomara su diseño e intentara colocar un encabezado en algún lugar, él / ella tendría que estar al tanto del contexto y la ubicación del elemento. Con los encabezados definidos incondicionalmente, él o ella puede usar un encabezado en cualquier lugar que confíe en su presentación, independientemente de sus padres..

Los estilos de título solo deben definirse una vez

Los elementos de encabezado (h1-h6) deben tener exactamente una regla en un sitio.

Una extensión de la regla anterior para mejorar la previsibilidad de la presentación. Bien o mal, tenga en cuenta que esto básicamente excluye la inclusión de algún tipo de código de reinicio en su hoja de estilo. Cada hoja de reinicio también funciona en sus encabezados y, por lo tanto, CSSLint lo marcará como un error.

Las reglas cuestionables

No uses clases contiguas

Las clases adjuntas se parecen a .foo.bar. Aunque técnicamente está permitido en CSS, Internet Explorer 6 y versiones anteriores no las manejan correctamente..

Con esta regla habilitada, CSSLint marca reglas como .nav.red, La razón oficial es que Internet Explorer 6 y anteriores no juegan bien con el selector. Respeto a los desarrolladores, pero tengo que estar en desacuerdo aquí. Solo porque no funciona con Internet 'Dev-buster' Explorer 6 No es una buena razón para dejar de trabajar con una característica útil..

Cuidado con los modelos de caja rota

Los bordes y el relleno añaden espacio fuera del contenido de un elemento. Por lo general, establecer el ancho o la altura junto con los bordes y el relleno es un error porque no obtendrá el resultado visual que está buscando. CSS Lint advierte cuando una regla usa ancho o alto además de relleno y / o borde.

El modelo de caja puede estar roto, pero casi todos los desarrolladores front-end que conozco están íntimamente al tanto de las deficiencias y cómo superar las disparidades con la implementación. ¿Estamos realmente preparados para renunciar a una capa de control porque algunos navegadores más antiguos tienen una implementación diferente??

No uses demasiadas fuentes web

El uso de fuentes web conlleva implicaciones de rendimiento, ya que los archivos de fuentes pueden ser bastante grandes y algunos navegadores bloquean la representación al descargarlos. Por este motivo, CSS Lint le avisará cuando haya más de cinco fuentes web en una hoja de estilo..

No preveo una situación en la que esté usando más de cinco fuentes en una página, pero creo que sumergirse en este territorio es un poco cuestionable. En todo caso, este es un defecto de diseño que un defecto de desarrollo. Si un desarrollador hace referencia a cinco fuentes distintas en su hoja de estilo, es probable que no sea por accidente..

No use demasiados flotadores, es decir, abstraiga la funcionalidad.

CSS Lint simplemente comprueba si ha usado float más de 10 veces y, si es así, muestra una advertencia. El uso de estos muchos flotadores generalmente significa que necesita algún tipo de abstracción para lograr el diseño.

Si bien estoy de acuerdo con el argumento de los creadores de que tener más de diez instancias de float es una mala idea, también creo que esto afectará el marcado una vez que haya pasado un tamaño determinado..

Por ejemplo, en una situación en la que desearía flotar dos elementos, tradicionalmente usaría:

 

? y el estilismo, por métodos tradicionales..

 .contenedor-1 ancho: 70%; flotador izquierdo;  .container-2 ancho: 30%; flotador izquierdo; 

El método CSSLint estaría abstrayendo el flotador de la siguiente manera:

 

? y el estilo como tal:

 .contenedor-1 ancho: 70%;  .container-2 ancho: 30%;  .float float: left;

Si bien estoy de acuerdo en que este es un enfoque viable, creo que el marcado se llenará significativamente una vez que intente abstraerse más. Prefiero ver una clase que contenga la mayor parte de su estilo en un solo lugar que el desorden del marcado con más de 10 clases. De nuevo, siento que este es un tema subjetivo..

Las reglas obvias

  • Eliminar reglas vacias
  • Evitar propiedades duplicadas
  • Los valores cero no necesitan unidades
  • Las propiedades prefijadas del vendedor también deben tener el estándar
  • Los errores de análisis deben ser arreglados
  • Incluir todos los prefijos de proveedores compatibles
  • ? resto de las reglas

Todas las reglas anteriores se adhieren a las prácticas estándar actuales. Claro, algunas de las reglas tienen poca importancia en el mundo real, como valores cero que no necesitan unidades, o serán capturadas por un IDE decente, como errores de análisis, pero sin embargo, estas son buenas reglas para tener en un conjunto de pruebas de CSS.


Algunas preocupaciones

CSSLint va a ayudar a muchos desarrolladores en el futuro, pero?

CSSLint es, sin duda, escrito por desarrolladores con grandes credenciales y definitivamente ayudará a muchos desarrolladores y diseñadores en el futuro.

Lo que me parece un poco molesto es que muchas de las reglas controvertidas provienen de Object Oriented CSS, un marco CSS destinado a permitir que los desarrolladores escriban CSS mantenibles. Si bien no tengo nada en contra del marco y su paradigma, tendrías que estar de acuerdo en que es una forma de hacer las cosas, no la manera de hacer las cosas.

A diferencia de JSLint, donde siento que todas las reglas tienen sentido, con CSSLint, siento que me dicen que un estilo de escritura CSS es correcto y que los otros están equivocados. Sería como si alguien me pidiera que renunciara a los Beatles porque los Rolling Stones son su banda preferida..


Es solo una herramienta

Las herramientas son solo eso - herramientas.

Por supuesto, nosotros, como grupo, tendemos a ser bastante pegajosos cuando se trata de nuestro código. No nos gusta escuchar que nuestro código podría tener problemas de * jadeo * o estar escrito de una manera completamente diferente.

Lo principal para hacer una nota aquí es que CSSLint es, en última instancia, una herramienta. Simplemente le permite saber que algunas de las áreas mayo tener errores.

CSSLint no tiene que ser el puño de hierro alrededor del cual basas todo tu ego. No hay razón para inclinarse hacia atrás para evitar una advertencia si sabe exactamente lo que está haciendo.


Por lo tanto, debe comenzar a usar CSSLint?

Sí.

En CSS, como en el cálculo integral, hay muchas soluciones para un problema dado. No necesariamente hay una "mejor" forma de hacer las cosas: puede favorecer la legibilidad, mientras que yo puedo favorecer la eficiencia. Lo importante es que te das cuenta de que cada uno de nosotros tiene nuestra forma única de hacer las cosas..

Si no tiene las mismas perspectivas para resolver un problema, puede estar en desacuerdo con otro enfoque e incluso puede resultar cuestionable..

Habiendo dicho eso, nunca hay una buena razón para no aprender cosas nuevas. Mirar los problemas desde la perspectiva de otro desarrollador es una excelente manera de ver si puede aprender algo nuevo..


Terminando

¿Qué opinas sobre CSSLint? ¿Te resulta útil? ¿Confuso? ¿Te ha ayudado con tus problemas del mundo real? Háganos saber en los comentarios..

Ser excelentes el uno al otro y muchas gracias por leer!