coge la información y corre

Solución a dos pesadillas del CSS

30 de septiembre del 2007 Escrito por Alex Barros

Hoy he encontrado del tirón, en un mismo blog, la solución a dos de mis mayores pesadillas en la maquetación CSS.

#1: Float y Clear
Cuando queremos desplazar un elemento a la izquierda o a la derecha, solemos usar la propiedad float, que saca al elemento del flujo de contenido y lo desplaza a donde queramos.

El problema viene cuando este elemento tiene un elemento padre (que lo contiene) y queremos que lo envuelva.

Esto es lo que yo quiero:
float_lo_q_quiero.gif
Y esto lo que obtengo:
float_lo_q_obtengo.gif

(He de aclarar que no se trata de ningún error, sinó que el estándar CSS especifica su comportamiento de esta forma)

La solución tradicional es incluir un tercer div a continuación de los dos flotantes, y aplicarle la propiedad clear:both, pero esto nos hace meter un div sin razón de ser, y nos hace la página un poco menos semántica.

La solución que he encontrado ahora, mucho mejor, es aplicar al elemento padre la propiedad overflow:hidden. De esta forma evitamos tener que meter elementos y toquetear el flujo (que a veces trae problemas) y obtenemos el resultado deseado.

[para profundizar un poco más en este tema...]

#2: El marquito de los enlaces
Otro problema que encontraba, aúnque menos grave, era el marquito que aparece en los enlaces cuando pulsas en ellos, símplemente me parece antiestético.

Clica aquí para verlo

Esta propiedad es outline, y podemos bloquearla simplemente introduciendo en nuestra hoja de estilos el siguiente código:

  1. a {
  2.       outline-style: none;
  3. }

[para profundizar un poco más en este tema...]

Ambas soluciones magistrales las he encontrado en el blog PlanSeldon.com.

Categorias: Código, CSS, Diseño, HOWTO/CóMO |

Plantar un árbol, tener un hijo.... ah! comentar en Boozox.

Hay 6 comentarios, pero nos falta el tuyo

felipe.lavin Ha dicho:

Para el primer problema: a veces, si el contexto lo justifica, una buena alternativa puede ser agregar un <hr /> luego de los dos <div>, tipo:

<div class="contenedor">
<div class="contenido"></div><!--float-left-->
<div class="navegacion"></div><!--float-right-->
<hr /><!--clear:both-->
</div>

claro que en ese caso el hr no debe llevar display:none, a lo más, visibility:hidden, ya que con la primera es “como si no existiera”, mientras que con la segunda simplemente indica que es invisible. Y/o agregar otros estilos, por supuesto

La idea era extender el elemento contenedor, ¿no?

Bueno, de todos modos… he ahí una opción. Saludos

Alex Barros Ha dicho:

No creo que añadir el br sea más semantico que un div. Me quedo con la expuesta en el blog; te ahorras html, y el código es más claro.

felipe.lavin Ha dicho:

No es por ser quisquilloso, pero un <hr /> tiene mucha semántica si se utiliza como lo que es, una barra horizontal.

Por lo que recuerdo, tanto XHTML 2 como HTML 5 mantenían el elemento, en el primer caso se renombraba a separator y en el segundo seguía igual… ¿o era al revés? Eso era hace tiempo, habrá que ver en qué están ahora.

artberri Ha dicho:

Buena solución, y sí, ahora tengo una pesadilla menos.

Alex Barros Ha dicho:

@felipe.lavin: mis disculpas, entendí BR en lugar de HR. En ese caso sí tiene algo de semántica (aunque no le daría yo el 100%)

De todas formas, ese elemento que te ahorras. En muchos contextos no es tan importante la separación como para poner un HR

@artberri: Me alegra oir eso!

noth Ha dicho:

Mejor que todo eso, que nada más que hace ensuciar el marcado, es usar la clase clearfix, busca esto en internet, ahora mismo no se el enlace, csslab creo que habla de ello y el código sería


saludos
P.D me apunto tu blog

del.icio.us meneame.net RSS

Search:

Bicivalencia Localiza las estaciones de Valenbisi, servicio público de bicicletas en Valencia, España. Ver más Gpsia Descubre y comparte rutas por todo el mundo, tomadas con GPS. Ver más Imaset Edita tus imágenes de Wordpress con este sencillo plugin. Ver más

¡Mi música es tuya!

Digo yo que...

Mis fotos de Flickr

Entradas recientes

Meta:

Respeta el copyleft

,