Me gustaría preguntar cómo funcionan la altura y el flotador. Tengo un div externo y un div interno que tiene contenido. Su altura puede variar según el contenido del div interno, pero parece que mi div interno desbordará su div externo. ¿Cuál sería la forma correcta de hacerlo?
<html>
<body>
<div style="margin:0 auto;width: 960px; min-height: 100px; background-color:orange">
<div style="width:500px; height:200px; background-color:black; float:right"></div>
</div>
</body>
</html>
Respuestas:
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:
También puede agregar
overflow: hidden;
elementos de contenedor, pero sugeriría que useclear: both;
en su lugar.Además, si desea borrar un elemento, puede usar
¿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 exactamentefloat
? Inicialmente, lafloat
propiedad se introdujo para fluir texto alrededor de imágenes, que son flotantesleft
oright
. 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 lafloat
propiedad para establecer cajas una al lado de la otra.Flotar un elemento
Manifestacióninline
o unblock
nivel hará que el elemento se comporte como uninline-block
elemento.Si flota un elemento
left
oright
, elwidth
elemento se limitará al contenido que contiene, a menos quewidth
se defina explícitamente ...No puedes
float
un elementocenter
. Este es el mayor problema que siempre he visto con los principiantes, el uso, que no es un valor válido para lafloat: center;
float
propiedad.float
generalmente se usa parafloat
/ mover contenido a la izquierda o a la derecha . Solo hay cuatro valores válidos para lafloat
propiedadleft
, es decirright
,none
(predeterminado) yinherit
.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;
ofloat: 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 estoz-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 laleft
, o puede hacerfloat
aleft
, y otro pararight
, así, depende de la disposición, si se trata de 3 columnas, es posible quefloat
2 columnas aleft
donde otro uno de ellosright
depende, aunque en este ejemplo, tenemos un diseño simplificado de 2 columnas, por lo quefloat
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 ...
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 unaheight
de50px
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 asignemosinline-block
.El primer valor válido para
float
esleft
así en nuestro ejemplo, usamosfloat: left;
para.floated_left
, por lo que tenemos la intención de flotar un bloque alleft
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 flotandoleft
.Al llegar a la segunda columna, deja que
float
esta sea laright
Otra columna flotaba a la derecha.
Aquí, tenemos una
300px
columna ancha quefloat
laright
que va a sentarse al lado de la primera columna, ya que está flotando en elleft
, y ya que está flotando a laleft
, creó canal vacío a laright
, y como no había suficiente espacio en laright
nuestraright
elemento flotante se sentó perfectamente al lado delleft
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.
clear: both;
antes de que termine el elemento padre, que contiene elementos flotantes, ahora esta es una solución económica paraclear
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, comoManifestació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
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 usabox-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 haceoverflow: hidden;
para el elemento primario, llame alclass
siguiente en el elemento primario para auto-borrar.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 declararfloat: 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.img
flotante en el interiorp
que permitirá que nuestro contenido fluya.Demo (sin flotar
img
)Demo 2 (
img
flotando a laleft
)float
para crear menú horizontal - DemoFlota 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 alleft
pero nofloat
el otro, entonces, ¿qué sucede?Supongamos que si eliminamos
float: right;
de nuestro.floated_right
class
, eldiv
se representará desde el extremoleft
ya que no está flotando.Manifestación
Así pues, en este caso, ya sea que pueda
float
el que elleft
asíO
Puede usar
margin-left
cuál será igual al tamaño de la columna flotante izquierda, es decir,200px
ancho .fuente
clear: both;
, pero está bien si sientes que la edición justifica, así que sigamos asíDebe agregar
overflow:auto
a su div principal para que abarque el div flotante interno:Ejemplo de jsFiddle
fuente
Se encuentra con el error de flotación (aunque no estoy seguro si técnicamente es un error debido a la cantidad de navegadores que exhiben este comportamiento). Esto es lo que está pasando:
En circunstancias normales, suponiendo que no se haya establecido una altura explícita, un elemento de nivel de bloque como un div establecerá su altura en función de su contenido. La parte inferior de la división principal se extenderá más allá del último elemento. Desafortunadamente, un elemento flotante evita que el padre tome en cuenta el elemento flotante al determinar su altura. Esto significa que si su último elemento es flotante, no "estirará" al padre de la misma manera que lo haría un elemento normal.
Claro
Hay dos formas comunes de solucionar esto. El primero es agregar un elemento "claro"; es decir, otro elemento debajo del flotante que obligará al padre a estirarse. Entonces agregue el siguiente html como último hijo:
No debe ser visible, y al usar clear: ambos, se asegura de que no se ubicará al lado del elemento flotante, sino después.
Desbordamiento:
El segundo método, que es el preferido por la mayoría de las personas (creo) es cambiar el CSS del elemento padre para que el desbordamiento sea cualquier cosa menos "visible". Por lo tanto, establecer el desbordamiento en "oculto" obligará al padre a estirarse más allá de la parte inferior del niño flotante. Esto solo es cierto si no ha establecido una altura en el padre, por supuesto.
Como dije, se prefiere el segundo método, ya que no requiere que vaya y agregue elementos semánticamente sin sentido a su marcado, pero hay veces en que necesita
overflow
que sea visible, en cuyo caso agregar un elemento de compensación es más que aceptable .fuente
Es por el flotador del div. Agregue
overflow: hidden
el elemento exterior.Manifestación
fuente
Confundes cómo los navegadores procesan los elementos cuando hay elementos flotantes. Si un elemento de bloque está flotando (su div interno en su caso), otros elementos de bloque lo ignorarán porque el navegador elimina los elementos flotantes del flujo normal de la página web. Luego, debido a que el div flotante se ha eliminado del flujo normal, el div externo se llena, como si el div interno no estuviera allí. Sin embargo, los elementos en línea (imágenes, enlaces, texto, comillas negras) respetarán los límites del elemento flotante. Si introduce texto en el div externo, el texto se colocará cerca del div interno.
En otras palabras, los elementos de bloque (encabezados, párrafos, divs, etc.) ignoran los elementos flotantes y completan, y los elementos en línea (imágenes, enlaces, texto, etc.) respetan los límites de los elementos flotantes.
Un ejemplo de violín aquí
fuente
Prueba este
fuente
puede usar la propiedad de desbordamiento al contenedor div si no tiene ningún div para mostrar sobre el contenedor, por ejemplo:
Aquí está el siguiente CSS:
-----------------------O-------------------------- ----
Aquí está el siguiente CSS:
fuente