2012-04-11 5 views
6

Parece que me he confundido en cuanto a lo que significa la palabra clave "clear" de css.Si un div tiene "clear: right", nada debería flotar a la derecha, ¿o sí?

Tengo una serie de elementos div, todos con "float: left". El segundo elemento div más reciente también tiene "claro: derecho". Pensé que eso causaría que el siguiente elemento pasara a la siguiente línea. Pero para mí, no es así.

Aquí está mi ejemplo:

<div class="Section"> 
    <div class="Thumbnail"></div> 
    <div class="Number">0</div> 
    <div class="Title">ShopTVC Wallace and Gromit WOA 6Apr11</div> 
    <div class="Duration">00:00:32</div> 
</div>​ 

se ve así:

enter image description here

que estoy tratando de hacer que la duración ("00:00:32"), aparece en la línea siguiente , a la derecha de la miniatura (el rectángulo azul).

Sé que podría poner los últimos tres div en otro contenedor div, pero el propósito de esta pregunta es entender por qué "clear: right" no detiene la duración de la flotación a la derecha del título.

Aquí está el CSS:

div.Section 
{ 
    overflow:auto; 
    background:cornsilk; 
    border:2px solid navy; 
    padding:12px; 
} 

div.Section div.Thumbnail 
{ 
    width:64px; 
    height:42px; 
    background:SteelBlue; 
    foreground:Navy; 
} 

div.Number 
{ 
    width:16px; 
    margin-left:6px; 
} 

div.Duration 
{ 
    margin-left:22px; 
} 

div.Section div 
{ 
    float:left; 
} 

div.Section div.Title 
{ 
    color:DarkGreen; 
    clear:right; 
} 

Y, por supuesto, el enlace jsFiddle: http://jsfiddle.net/8J7V6/3/

Respuesta

9

La propiedad clear no impide que los elementos que se coloquen en ese espacio después del elemento despejado. Impide que el elemento se coloque donde ya hay elementos flotando en esa dirección antes que él. Agregar un clear:left a div.Duration lo haría colocar debajo de la caja azul marino. Agregar un <br/> antes de la duración podría resolver su problema, o, como ya dijo en su pregunta, podría usar otro contenedor div para los últimos tres divs.

+0

Usted señor es el primero que realmente explica la lógica del valor claro de una manera comprensible :-) aclaraste un misterio para mí, je. – Tschallacka

1

he utilizado relleno y el margen. Si no es posible utilizarlo en su caso, la siguiente solución no será apropiada.

http://jsfiddle.net/8J7V6/5/

+0

Esta es una forma un poco hacky de hacerlo, pero funciona. Sin embargo, realmente no has explicado por qué el 'claro: correcto' * no * funciona. – animuson

+0

Puede ser, ya que el div se deja, por lo que debe aclarar: izquierda. No estoy seguro sin embargo. Si estoy equivocado, por favor corrígeme. Todavía estoy aprendiendo. – sarwar026

+0

@ sarwar026, revise la respuesta de ahruss a continuación. Explican lo claro que funciona. – sarcastyx

1

No hay nada flotante a la derecha de la misma. El problema al que se enfrenta es que ya envió todo su contenido antes de la hora, y luego le está diciendo a la hora de flotar a la izquierda. Sigue flotando hacia la izquierda, solo está apilando encima del contenido que ya está a la izquierda.

Pero sí, despejar a la derecha hace que ese elemento se rompa más allá de todos los elementos que flotan hacia la derecha. Borrar no afecta los elementos después de esto.

¿Has probado using a simple <br /> after your title?

+0

Si todo flotara, probablemente podría darle más sentido, pero como dices con solo una cosa flotante, hay solo un elemento que se preocupa por el flujo de la página. O flotas o no, o es un desastre. – plebksig

0

.Duration { clear: left; } debería funcionar

+0

Eso lo hace descomponer * todo el camino * debajo del cuadro azul. – animuson

4

La respuesta de ahruss es la correcta, pero también noté que nadie realmente respondió su pregunta. Básicamente, clear:left se refiere a los elementos flotantes de la izquierda. clear:right se refiere a elementos flotantes derechos.

Como su elemento flota a la izquierda, no a la derecha, clear:right no lo afectará.

La otra cosa que podría hacer es envolver los dos elementos de texto en un div separado del cuadro azul, flotar ese div del contenedor y el div azul, luego cuando flote los dos elementos de texto, su código clear:left pondrá el fecha debajo del texto todavía dentro de su contenedor div y no debajo de la imagen azul a la izquierda.

De esta manera:

<div class="Section"> 
    <div class="Thumbnail"></div> 
    <div class="TextContainer"> 
     <div class="Number">0</div> 
     <div class="Title">ShopTVC Wallace and Gromit WOA 6Apr11</div> 
     <div class="Duration">00:00:32</div> 
    </div> 
</div> 

y añadir esto a tu CSS:

div.TextContainer { 
    float:left; 
} 

Añadir en cualesquiera otros estilos visuales que necesita.

Cuestiones relacionadas