¿Qué hace la siguiente regla CSS:
.clear { clear: both; }
¿Y por qué necesitamos usarlo?
¿Qué hace la siguiente regla CSS:
.clear { clear: both; }
¿Y por qué necesitamos usarlo?
Respuestas:
No explicaré cómo funcionan los flotadores aquí (en detalle), ya que esta pregunta generalmente se centra en ¿Por qué usar clear: both;
O qué hace clear: both;
exactamente ...
Mantendré esta respuesta simple y directa, y te explicaré gráficamente por qué clear: both;
es necesario o qué hace ...
En general, los diseñadores flotan los elementos, hacia la izquierda o hacia la derecha, lo que crea un espacio vacío en el otro lado que permite que otros elementos ocupen el espacio restante.
Los elementos flotan cuando el diseñador necesita 2 elementos de nivel de bloque uno al lado del otro. Por ejemplo, digamos que queremos diseñar un sitio web básico que tenga un diseño como el siguiente ...
Ejemplo en vivo de la imagen de demostración.
Code For Demo
Nota: Es posible que tenga que añadir header
, footer
, aside
, section
(y otros elementos de HTML5) como display: block;
en la hoja de estilos para mencionar explícitamente que los elementos son elementos de bloque.
Tengo un diseño básico, 1 encabezado, 1 barra lateral, 1 área de contenido y 1 pie de página.
Sin flotantes header
, luego viene la aside
etiqueta que usaré para la barra lateral de mi sitio web, por lo que flotaré el elemento a la izquierda.
Nota: Por defecto, el elemento de nivel de bloque ocupa el documento con un ancho del 100%, pero cuando se flota hacia la izquierda o hacia la derecha, cambiará de tamaño según el contenido que contenga.
Entonces, como observa, la izquierda flotante div
deja el espacio a su derecha sin usar, lo que permitirá div
que el espacio posterior se desplace en el espacio restante.
div
's renderizarán uno tras otro si NO están flotandodiv
cambiará uno al lado del otro si flota a la izquierda o derechaOk, así es como se comportan los elementos de nivel de bloque cuando se flotan hacia la izquierda o hacia la derecha, entonces, ¿por qué se clear: both;
requiere y por qué?
Entonces, si observa en la demostración de diseño, en caso de que lo haya olvidado, aquí está ...
Estoy usando una clase llamada .clear
y contiene una propiedad llamada clear
con un valor de both
. Entonces, veamos por qué lo necesita both
.
He flotado aside
y section
elementos a la izquierda, así que supongamos un escenario, donde tenemos una piscina, donde header
hay tierra sólida, aside
y section
estamos flotando en la piscina y el pie de página es tierra sólida nuevamente, algo así ...
Entonces, el agua azul no tiene idea de cuál es el área de los elementos flotantes, pueden ser más grandes que la piscina o más pequeños, así que aquí surge un problema común que preocupa al 90% de los principiantes de CSS: por qué el fondo de un elemento contenedor no se estira cuando contiene elementos flotantes. Es porque el elemento contenedor es una PISCINA aquí y la PISCINA no tiene idea de cuántos objetos están flotando, o cuál es la longitud o amplitud de los elementos flotantes, por lo que simplemente no se estirará.
(Consulte la sección [Clearfix] de esta respuesta para obtener una forma clara de hacerlo. Estoy usando un div
ejemplo vacío intencionalmente para fines de explicación)
He proporcionado 3 ejemplos anteriores, el primero es el flujo de documentos normal donde el red
fondo solo se procesará como se esperaba ya que el contenedor no contiene ningún objeto flotante.
En el segundo ejemplo, cuando el objeto se flota hacia la izquierda, el elemento contenedor (POOL) no conocerá las dimensiones de los elementos flotantes y, por lo tanto, no se extenderá hasta la altura de los elementos flotantes.
Después de usar clear: both;
, el elemento contenedor se estirará a sus dimensiones de elemento flotante.
Otra razón por la que clear: both;
se usa es para evitar que el elemento se mueva hacia arriba en el espacio restante.
Digamos que quieres 2 elementos uno al lado del otro y otro elemento debajo de ellos ... Así que flotarás 2 elementos a la izquierda y quieres el otro debajo de ellos.
div
Flotó a la izquierda, lo que resultó en section
moverse al espacio restantediv
borrado para que la section
etiqueta se muestre debajo del div
s flotante Por último, pero no menos importante, la footer
etiqueta se representará después de los elementos flotantes, ya que he usado la clear
clase antes de declarar mis footer
etiquetas, lo que garantiza que todos los elementos flotantes (izquierda / derecha) se borren hasta ese punto.
Llegando a clearfix que está relacionado con flotadores. Como ya lo especificó @Elky , la forma en que estamos limpiando estos flotadores no es una forma limpia de hacerlo, ya que estamos utilizando un div
elemento vacío que no es un div
elemento para el que está destinado. Por lo tanto, aquí viene el clearfix.
Piense en ello como un elemento virtual que creará un elemento vacío para usted antes de que termine su elemento padre. Esto eliminará automáticamente su elemento envoltorio que contenga elementos flotantes. Este elemento no existirá en su DOM literalmente, pero hará el trabajo.
Para auto limpiar cualquier elemento envoltorio que tenga elementos flotantes, podemos usar
.wrapper_having_floated_elements:after { /* Imaginary class name */
content: "";
clear: both;
display: table;
}
Tenga en cuenta el :after
pseudo elemento utilizado por mí para eso class
. Eso creará un elemento virtual para el elemento contenedor justo antes de que se cierre. Si miramos en el dom, puede ver cómo se muestra en el árbol de documentos.
Entonces, si ve, se muestra después del elemento flotante div
donde limpiamos los elementos flotantes, que no es más que equivalente a tener un div
elemento vacío con clear: both;
propiedad que también estamos utilizando para esto. Ahora, por qué display: table;
y content
está fuera de este alcance de respuestas, pero puede obtener más información sobre el pseudo elemento aquí .
Tenga en cuenta que esto también funcionará en IE8 ya que IE8 admite :after
pseudo .
La mayoría de los desarrolladores flotan su contenido hacia la izquierda o hacia la derecha en sus páginas, probablemente divs con logotipo, barra lateral, contenido, etc., estos divs flotan hacia la izquierda o hacia la derecha, dejando el resto del espacio sin usar y, por lo tanto, si coloca otros contenedores, flota también en el espacio restante, por lo que para evitar que clear: both;
se use, borra todos los elementos flotantes hacia la izquierda o hacia la derecha.
------------------ ----------------------------------
div1(Floated Left) Other div takes up the space here
------------------ ----------------------------------
Ahora lo que si desea hacer que el otro div render a continuación div1
, por lo que vamos a usar clear: both;
lo que se asegurará de que se borre todos los flotadores, izquierda o derecha
------------------
div1(Floated Left)
------------------
<div style="clear: both;"><!--This <div> acts as a separator--></div>
----------------------------------
Other div renders here now
----------------------------------
display: inline-block
un elemento, y en el padre que puede usar text-align: left
, text-align: center
o text-align: right
por ejemplo.
La clear
propiedad indica que los lados izquierdo, derecho o ambos de un elemento no pueden ser adyacentes a elementos flotantes anteriores dentro del mismo contexto de formato de bloque. Los elementos eliminados se empujan debajo de los elementos flotantes correspondientes. Ejemplos:
clear: none;
El elemento permanece adyacente a los elementos flotantes.clear: left;
Elemento empujado debajo de los elementos flotantes izquierdosclear: right;
Elemento empujado debajo de los elementos flotantes derechosclear: both;
Elemento empujado debajo de todos los elementos flotantesclear
no afecta flotantes fuera del contexto de formato de bloque actualdisplay: inline-block;
propiedad css de este escenario? Estirará el inline-block
elemento padre a su elemento hermano que tiene clase float-left
. Lo que hace que la declaración "clear no afecte flotantes fuera del contexto de formato de bloque actual" es incorrecta. ¿Podría alguien explicar por favor?
display: inline-block
significa que ya no genera un contexto de formato de bloque (b) los flotantes / borrados dentro de ese elemento y el primer flotante se vuelven parte del mismo contexto de formato de bloque (la ventana gráfica).
Simplemente intente eliminar la clear:both
propiedad de div
with class
sample
y vea cómo sigue flotando divs
.
La respuesta del Sr. Alien es perfecta, pero de todos modos no recomiendo usarla <div class="clear"></div>
porque es solo un truco que ensucia su marcado. Esto es inútil vacío div
en términos de mala estructura y semántica, esto también hace que su código no sea flexible. En algunos navegadores, este div provoca una altura adicional y hay que agregarlo, lo height: 0;
que es aún peor. Pero los problemas reales comienzan cuando desea agregar fondo o borde alrededor de sus elementos flotantes; simplemente colapsará porque la web se diseñó mal . Recomiendo envolver elementos flotantes en un contenedor que tenga la regla CSS clearfix . También es un hack, pero hermoso, más flexible de usar y legible para robots humanos y SEO.
clearfix
: stackoverflow.com/questions/211383/…
Cuando desea que un elemento se coloque en la parte inferior del otro elemento, use este código en CSS. Se usa para flotadores.
Si flota contenido, puede flotar hacia la izquierda o hacia la derecha ... por lo que en un diseño común puede tener un navegador izquierdo, un div de contenido y un pie de página.
Para asegurarse de que el pie de página se mantenga por debajo de estos dos flotadores (si ha flotado a la izquierda y a la derecha), coloque el pie de página como clear: both
.
De esta manera se mantendrá por debajo de ambas carrozas.
(Si solo está despejando a la izquierda, entonces realmente solo necesita hacerlo clear: left;
).
Ve a través de este tutorial:
float
y desea el siguiente elemento a continuación, no a la derecha ni a la izquierda.