Los elementos flotantes no se suman a la altura del elemento contenedor y, por lo tanto, si no los borra, la altura del contenedor no aumentará ...
Te mostraré visualmente:
Más explicaciones:
<div>
<div style="float: left;"></div>
<div style="width: 15px;"></div> <!-- This will shift
besides the top div. Why? Because of the top div
is floated left, making the
rest of the space blank -->
<div style="clear: both;"></div>
<!-- Now in order to prevent the next div from floating beside the top ones,
we use `clear: both;`. This is like a wall, so now none of the div's
will be floated after this point. The container height will now also include the
height of these floated divs -->
<div></div>
</div>
También puede agregar overflow: hidden;
elementos de contenedor, pero sugeriría que use clear: both;
en su lugar.
Además, si desea borrar un elemento, puede usar
.self_clear:after {
content: "";
clear: both;
display: table;
}
¿Cómo funciona CSS Float?
¿Qué es exactamente flotador y qué hace?
La float
propiedad es mal entendida por la mayoría de los principiantes. Bueno, ¿qué hace exactamente float
? Inicialmente, la float
propiedad se introdujo para fluir texto alrededor de imágenes, que son flotantes left
o right
. Aquí hay otra explicación de @Madara Uchicha.
Entonces, ¿está mal usar la float
propiedad para colocar cajas una al lado de la otra? La respuesta es no ; no hay problema si usa la float
propiedad para establecer cajas una al lado de la otra.
Flotar un elemento inline
o un block
nivel hará que el elemento se comporte como un inline-block
elemento.
Manifestación
Si flota un elemento left
o right
, el width
elemento se limitará al contenido que contiene, a menos que width
se defina explícitamente ...
No puedes float
un elemento center
. Este es el mayor problema que siempre he visto con los principiantes, el uso float: center;
, que no es un valor válido para la float
propiedad. float
generalmente se usa para float
/ mover contenido a la izquierda o a la derecha . Solo hay cuatro valores válidos para la float
propiedad left
, es decir right
, none
(predeterminado) y inherit
.
El elemento primario se colapsa, cuando contiene elementos secundarios flotantes, para evitar esto, utilizamos la clear: both;
propiedad, para borrar los elementos flotantes en ambos lados, lo que evitará el colapso del elemento primario. Para obtener más información, puede consultar mi otra respuesta aquí .
(Importante) Piense en ello donde tenemos una pila de varios elementos. Cuando usamos float: left;
o float: right;
el elemento se mueve por encima de la pila en uno. Por lo tanto, los elementos en el flujo de documentos normal se ocultarán detrás de los elementos flotantes porque está en el nivel de la pila por encima de los elementos flotantes normales. (Por favor, no relacione esto z-index
ya que es completamente diferente).
Tomando un caso como ejemplo para explicar cómo funcionan los flotadores CSS, suponiendo que necesitamos un diseño simple de 2 columnas con un encabezado, pie de página y 2 columnas, así que aquí está el aspecto del plano ...
En el ejemplo anterior, vamos a estar flotando sólo las cajas de color rojo, ya sea que pueda float
tanto a la left
, o puede hacer float
a left
, y otro para right
, así, depende de la disposición, si se trata de 3 columnas, es posible que float
2 columnas a left
donde otro uno de ellos right
depende, aunque en este ejemplo, tenemos un diseño simplificado de 2 columnas, por lo que float
uno lo hará left
y el otro lo hará right
.
El marcado y los estilos para crear el diseño se explican más abajo ...
<div class="main_wrap">
<header>Header</header>
<div class="wrapper clear">
<div class="floated_left">
This<br />
is<br />
just<br />
a<br />
left<br />
floated<br />
column<br />
</div>
<div class="floated_right">
This<br />
is<br />
just<br />
a<br />
right<br />
floated<br />
column<br />
</div>
</div>
<footer>Footer</footer>
</div>
* {
-moz-box-sizing: border-box; /* Just for demo purpose */
-webkkit-box-sizing: border-box; /* Just for demo purpose */
box-sizing: border-box; /* Just for demo purpose */
margin: 0;
padding: 0;
}
.main_wrap {
margin: 20px;
border: 3px solid black;
width: 520px;
}
header, footer {
height: 50px;
border: 3px solid silver;
text-align: center;
line-height: 50px;
}
.wrapper {
border: 3px solid green;
}
.floated_left {
float: left;
width: 200px;
border: 3px solid red;
}
.floated_right {
float: right;
width: 300px;
border: 3px solid red;
}
.clear:after {
clear: both;
content: "";
display: table;
}
Vayamos paso a paso con el diseño y veamos cómo funciona el flotador.
En primer lugar, usamos el elemento contenedor principal, puede suponer que es su ventana gráfica, luego usamos header
y asignamos una height
de 50px
manera que no hay nada lujoso allí. Es solo un elemento normal de nivel de bloque no flotante que ocupará 100%
espacio horizontal a menos que sea flotante o le asignemos inline-block
.
El primer valor válido para float
es left
así en nuestro ejemplo, usamos float: left;
para .floated_left
, por lo que tenemos la intención de flotar un bloque al left
elemento de nuestro contenedor.
Columna flotando a la izquierda
Y sí, si ve, el elemento padre, que está .wrapper
colapsado, el que ve con un borde verde no se expandió, pero ¿debería? Volveremos a eso en un momento, por ahora, tenemos una columna flotando left
.
Al llegar a la segunda columna, deja que float
esta sea laright
Otra columna flotaba a la derecha.
Aquí, tenemos una 300px
columna ancha que float
la right
que va a sentarse al lado de la primera columna, ya que está flotando en el left
, y ya que está flotando a la left
, creó canal vacío a la right
, y como no había suficiente espacio en la right
nuestra right
elemento flotante se sentó perfectamente al lado del left
uno.
Aún así, el elemento padre está contraído, bueno, arreglemos eso ahora. Hay muchas formas de evitar que el elemento padre se contraiga.
- Agregue un elemento de nivel de bloque vacío y úselo
clear: both;
antes de que termine el elemento padre, que contiene elementos flotantes, ahora esta es una solución económica para clear
sus elementos flotantes que hará el trabajo por usted, pero recomendaría no usar esto.
Agregue, <div style="clear: both;"></div>
antes de los .wrapper
div
extremos, como
<div class="wrapper clear">
<!-- Floated columns -->
<div style="clear: both;"></div>
</div>
Manifestación
Bueno, eso se soluciona muy bien, ya no hay un padre colapsado, pero agrega un marcado innecesario al DOM, por lo que algunos sugieren usarlo overflow: hidden;
en el elemento padre que contiene elementos secundarios flotantes que funcionan según lo previsto.
Usar overflow: hidden;
en.wrapper
.wrapper {
border: 3px solid green;
overflow: hidden;
}
Manifestación
Eso nos ahorra un elemento cada vez que lo necesitamos, clear
float
pero como probé varios casos con esto, falló en uno en particular, que se usa box-shadow
en los elementos secundarios.
Demostración (no se puede ver la sombra en los 4 lados,overflow: hidden;
causa este problema)
¿Y ahora qué? Guarde un elemento, no, overflow: hidden;
así que busque un hack de solución clara, use el fragmento a continuación en su CSS, y al igual que lo hace overflow: hidden;
para el elemento primario, llame al class
siguiente en el elemento primario para auto-borrar.
.clear:after {
clear: both;
content: "";
display: table;
}
<div class="wrapper clear">
<!-- Floated Elements -->
</div>
Manifestación
Aquí, shadow funciona según lo previsto, también, borra automáticamente el elemento padre que evita el colapso.
Y, por último, usamos el pie de página después de clear
los elementos flotantes.
Manifestación
Cuando se float: none;
usa de todos modos, ya que es el valor predeterminado, ¿hay algún uso para declarar float: none;
?
Bueno, depende, si va por un diseño receptivo, usará este valor muchas veces, cuando desee que sus elementos flotantes se representen uno debajo del otro en una determinada resolución. Para esa float: none;
propiedad juega un papel importante allí.
Pocos ejemplos del mundo real de cómo float
es útil.
- El primer ejemplo que ya vimos es crear uno o más diseños de columna.
- Uso
img
flotante en el interior p
que permitirá que nuestro contenido fluya.
Demo (sin flotarimg
)
Demo 2 (img
flotando a laleft
)
- Uso
float
para crear menú horizontal - Demo
Flota el segundo elemento también, o usa `margin`
Por último, pero no menos importante, quiero explicar este caso particular en el que float
solo un elemento al left
pero no float
el otro, entonces, ¿qué sucede?
Supongamos que si eliminamos float: right;
de nuestro .floated_right
class
, el div
se representará desde el extremo left
ya que no está flotando.
Manifestación
Así pues, en este caso, ya sea que pueda float
el que el left
así
O
Puede usar margin-left
cuál será igual al tamaño de la columna flotante izquierda, es decir, 200px
ancho .