CSS Errores típicos de los desarrolladores

[Fuente: http://sixrevisions.com/css/12-common-css-mistakes-web-developers-make/ ]

Dejando a un lado su aspecto exterior de lenguaje fácil, CSS es un sistema complicado, especialmente cuando lo estamos haciendo para una web a nivel profesional. La cantidad de formas diferentes de seleccionar un elemento es inmensa, sin mencionar el número de propiedades que puedes aplicar al elemento (-s) seleccionado (-s) y como le presentación cambia cuando soportas multiples navegadores y layout engines.

Por eso es fácil liarse con el CSS. Veamos algunos errores comunes que cometemos.

1. No utilizar un CSS Reset apropiado

Los navegadores web son unos amigos inconstantes. Sus inconsistencias pueden hacer que cualquier desarrollador quiera tirarse de los pelos. Pero por mucho que queramos al final del dia son los que presentan nuestra web, asi que mejor que nos llevemos bien con ellos.

Uno de las cosas más tontas que hacen los navegadores es proporcionarte un styling por defecto de los elementos HTML.Qué pasa si un webmaster elige no darle estilo a su página? Deberia haber un mecanismo para aquellos que eligen no utilizar CSS.

En cualquier caso, es raro el caso en el que dos navegadores proporcionen un styling identico, asi que la única forma de asegurarte que tus estilos son efectivos es hacer un CSS Reset.

Por CSS Reset entendemos resetear todos los estilos de todos los elementos HTML a un valor base predecible. Lo bueno de esto es que una vez que tu tienes un CSS Reset funcionando, entonces puedes dar estilo  todos los elementos de tú página como si fueran todos del mismo estilo para empezar. Es como crear una página en blanco.

Hay muchos CSS reset codebases en la web que puedes incorporar en tu trabajo. Una forma típica de hacer esto es utilizar un selector universal que haga un reset de margin y padding.

* { margin:0; padding:0; }

 

Aunque esto funciona , no es un reset completo. También necesitamos resetear por ejemplo, borders , underlines y colores de los elementos como list items, links y tables para no caer en inconsistencias entre diferentes navegadores.

Para más info: Resetting Your Styles with CSS Reset.

2.- Selectores sobre-cualificantes

Pasarse en ser especificos cuando seleccionamos elementos para darle estilo no es una buena práctica. Como por ejemplo:

ul#navigation li a { ... }

 

Typically the structure of a primary navigation list is a <ul> (usually with an ID like#nav or #navigation) then a few list items (<li>) inside of it, each with its own <a>tag inside it that links to other pages. This HTML structure is perfectly correct, but the CSS selector is really what I’m worried about.

First things first: There’s no reason for the ul before #navigation as an ID is already the most specific selector. Also, you don’t have to put li in the selector syntax because all the a elements inside the navigation are inside list items, so there’s no reason for that bit of specificity.

Thus, you can condense that selector as:

#navigation a { ... }

This is an overly simplistic example because you might have nested list items that you want to style differently (i.e. #navigation li a is different from #navigation li ul li a); but if you don’t, then there’s no need for the excessive specificity.

I also want to talk about the need for an ID in this situation. Let’s assume for a minute that this navigation list is inside a header div (#header). Let us also assume that you will have no other unordered list in the header besides the navigation list. If that is the case, we can even remove the ID from the unordered list in our HTML markup, and then we can select it in CSS as such:

#header ul a { ... }

Here’s what I want you to take away from this example: Always write your CSS selectors with the very minimum level of specificity necessary for it to work. Including all that extra fluff may make it look more safe and precise, but when it comes to CSS selectors, there are only two levels of specificity: specific, and not specific enough.

3. No utilizar properties abreviadas

Take a look at the following property list:

#selector {
  margin-top: 50px;
  margin-right: 0;
  margin-bottom: 50px;
  margin-left 0;
}

What is wrong with this picture? I hope that alarm bells are ringing in your head as you notice how much we’re repeating ourselves.

Fortunately, there is a solution, and it’s using CSS shorthand properties. The following has the same effect as the above style declaration, but we’ve reduced our code by three lines.

#selector {
  margin: 50px 0;
}

Check out this list of properties that deals with font styles:

font-family: Helvetica;
font-size: 14px;
font-weight: bold;
line-height: 1.5;

We can condense all that into one line:

font: bold 14px/1.5 Helvetica;

We can also do this for background properties. The following:

background-image: url(background.png);
background-repeat: repeat-y;
background-position: center top;

Can be written in shorthand CSS as such:

background: url(background.png) repeat-y center top;

Using shorthand CSS improves efficiency and makes it easier to maintain our code. For more information on CSS shorthand properties, check out this cheatsheet of CSS shorthand properties.

4. Utilizar 0px en vez de 0

Say you want to add a 20px margin to the bottom of an element. You might use something like this:

#selector { margin: 20px 0px 20px 0px; }

Don’t. This is excessive. There’s no need to include the px after 0. While this may seem like I’m nitpicking and that it may not seem like much, when you’re working with a huge file, removing all those superfluous px can reduce the size of your file (which is never a bad thing).

5.- Utilizar Color names en vez de valores hexadecimales

Declaring red for color values is the lazy man’s #FF0000. By saying:

color: red;

You’re essentially saying that the browser should display what it thinks red is. If you’ve learned anything from making stuff function correctly in all browsers — and the hours of frustration you’ve accumulated because of a stupid list-bullet misalignment that can only be seen in IE7 — it’s that you should never let the browser decide how to display your web pages.

Instead, you should go to the effort to find the actual hex value for the color you’re trying to use. That way, you can make sure it’s the same color displayed across all browsers. You can use a color cheatsheet that provides a preview and the hex value of a color.

This may seem trivial, but when it comes to CSS, it’s the tiny things that often lead to the big gotchas.

6. Selectores redundantes

Mi proceso para escribir estilos es empezar con la tipografia, y entonces trabajar sobre la estructura, y finalmente poner estilo de los colores y los fondos. Eso es lo que funciona para mi. Como en cada momento estoy poniendo estilos a varios elementos, un error muy común es teclear accidentalmente una declaración de estilo redundante.

Siempre hacemos un chequeo final después para estar seguros que no repito ningún selector; y si encuentro alguno repetido entonces refactorizo y los fundo.

Puedes mirar una lista de optimizadores CSS que te pueden ayudar:list of CSS optimizers

7. Properties redundantes

Similar al error anterior, a menudo me encuentro teniendo que aplicar las mismas properties a varios selectores.

Similar to the one above, I often find myself having to apply the same properties to multiple selectors. This could be styling an <h5> in the header to look exactly like the<h6> in the footer, making the <pre>‘s and <blockquote>‘s the same size, or any number of things in between.

In the final review of my CSS, I will look to make sure that I haven’t repeated too many properties. For example, if I see two selectors doing the same thing, such as this:


#selector-1 {
  font-style: italic;
  color: #e7e7e7;
  margin: 5px;
  padding: 20px
}
.selector-2 {
  font-style: italic;
  color: #e7e7e7;
  margin: 5px;
  padding: 20px
}


I will combine them, with the selectors separated by a comma (,):


#selector-1, .selector-2 {
  font-style: italic;
  color: #e7e7e7;
  margin: 5px;
  padding: 20px
}


I hope you’re seeing the trend here: Try to be as terse and as efficient as possible. It pays dividends in maintenance time and page-load speed.

8. No proporcionar Fallback Fonts

No todos los equipos tienen todas las fonts instaladas

In a perfect world, every computer would always have every font you would ever want to use installed. Unfortunately, we don’t live in a perfect world. @font-faceaside, web designers are pretty much limited to the few so called web-safe fonts (e.g. Arial, Georgia, serif, etc.).

There is a plus side, though. You can still use fonts like Helvetica that aren’t necessarily installed on every computer. The secret lies in font stacks.

Font stacks are a way for developers to provide fallback fonts for the browser to display if the user doesn’t have the preferred font installed.

For example:

#selector {
  font-family: Helvetica;
}

Can be expanded with fallback fonts as such:

#selector {
  font-family: Helvetica, Arial, sans-serif;
}

Now, if the user doesn’t have Helvetica, they can see your site in Arial, and if that doesn’t work, it’ll just default to any sans-serif font installed.

By defining fallback fonts, you gain more control as to how your web pages are rendered.

9. Espacios en blanco innecesarios

When it comes to trying to reduce your CSS file sizes for performance, every space counts. When you’re developing, it’s OK to format your code in the way that you’re comfortable with. However, there is absolutely no reason not to take out excess characters (a process known as minification) when you actually push your project onto the web where the size of your files really counts.

Too many developers simply don’t minify their files before launching their websites, and I think that’s a huge mistake. Although it may not feel like it makes much of a difference, when you have huge CSS files, it can improve your page response times.

10. No organizar tu CSS de una forma lógica

When you’re writing CSS, do yourself a favor and organize your code. Through comments, you can insure that the next time you come to make a change to a file you’ll still be able to navigate it.

How you choose to organize your styles is completely up to you, whatever works. I personally like to organize my styles by how the HTML that I’m styling is structured. This means that I have comments that distinguish the header, body, sidebar, and footer.

A common CSS-authoring mistake I see is people just writing up their styles as soon as they think of them. The next time you try to change something and can’t find the style declaration, you’ll be silently cursing yourself for not organizing your CSS well enough.

11. Utilizar solo una stylesheet para todo

This one’s subjective, so bear with me while I give you my perspective.

I am of the belief, as are others, that it is better to split stylesheets into a few different ones for big sites for easier maintenance and for better modularity. Maybe I’ll have one for a CSS reset, one for IE-specific fixes, and so on.

By organizing CSS into disparate stylesheets, I’ll know immediately where to find a style I want to change. You can do this by importing all the stylesheets into a stylesheet like so:

@import url("reset.css");
@import url("ie.css");
@import url("typography.css");
@import url("layout.css");

Let me stress, however, that this is what works for me and many other developers. You may prefer to squeeze them all in one file, and that’s okay; there’s nothing wrong with that. But if you’re having a hard time maintaining a single file, try splitting your CSS up.

12. No proporcionar una Stylesheet de Print

In order to style your site on pages that will be printed, all you have to do is utilize and include a print stylesheet.

It’s as easy as:

<link rel="stylesheet" href="print.css" media="print" />

Using a stylesheet for print allows you to hide elements you don’t want printed (such as your navigation menu), reset the background color to white, provide alternative typography for paragraphs so that it’s better suited on a piece of paper, and so forth.

The important thing is that you think about how your page will look when printed. Too many people just don’t think about it, so their sites will simply print the same way you see them on the screen.