Dado el siguiente HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
Me gustaría #copyright
en el fondo de #container
.
¿Puedo lograr esto sin utilizar el posicionamiento absoluto? Si la propiedad flotante admitiera un valor de 'fondo', parece que funcionaría, pero desafortunadamente no lo hace.
Respuestas:
Probablemente no.
Asignar
position:relative
a#container
, y luegoposition:absolute; bottom:0;
a#copyright
.fuente
En realidad, la respuesta aceptada por @User solo funcionará si la ventana es alta y el contenido es corto. Pero si el contenido es alto y la ventana es corta, colocará la información de derechos de autor sobre el contenido de la página, y luego se desplazará hacia abajo para ver el contenido y le dejará un aviso de derechos de autor flotante. Eso hace que esta solución sea inútil para la mayoría de las páginas (como esta página, en realidad).
La forma más común de hacerlo es el enfoque de "pie de página adhesivo CSS" demostrado, o una variación ligeramente más delgada. Este enfoque funciona muy bien: SI tiene un pie de página de altura fija.
Si necesita un pie de página de altura variable que aparecerá en la parte inferior de la ventana si el contenido es demasiado corto, y en la parte inferior del contenido si la ventana es demasiado corta, ¿qué debe hacer?
Trague su orgullo y use una mesa.
Por ejemplo:
Pruébalo. Esto funcionará para cualquier tamaño de ventana, para cualquier cantidad de contenido, para pie de página de cualquier tamaño, en cada navegador ... incluso IE6.
Si te da miedo pensar en usar una tabla para el diseño, tómate un segundo para preguntarte por qué. Se suponía que CSS facilitaría nuestras vidas, y en general lo ha hecho, pero el hecho es que, incluso después de todos estos años, sigue siendo un desastre roto y contraintuitivo. No puede resolver todos los problemas. Esta incompleto.
Las tablas no son geniales, pero al menos por ahora, a veces son la mejor manera de resolver un problema de diseño.
fuente
El enfoque flexbox!
En los navegadores compatibles , puede usar lo siguiente:
Ejemplo aquí
Mostrar fragmento de código
La solución anterior es probablemente más flexible, sin embargo, aquí hay una solución alternativa:
Ejemplo aquí
Mostrar fragmento de código
Como nota al margen, es posible que desee agregar prefijos de proveedor para obtener soporte adicional.
fuente
column-reverse
Qué tal el padre, para que no necesite agregar nada al niño en absoluto?Sí , puede hacerlo sin
absolute
posicionar y sin usartable
s (que se atornilla con marcas y demás).MANIFESTACIÓN
Esto se ha probado para que funcione en IE> 7, Chrome, FF y es algo muy fácil de agregar a su diseño actual.
¡Efectivamente hace lo que
float:bottom
haría, incluso teniendo en cuenta el problema señalado en la respuesta de @Rick Reilly!fuente
<!DOCTYPE>
conjunto para que esto funcione en IE (<= 8 al menos); esas versiones anteriores solo son compatiblesdisplay:table-XXX
con el modo "estándar". Pero el modo estándar también romperá muchas páginas que fueron diseñadas para, por ejemplo, IE6..foot{display: table-footer-group}
. No necesitabavertical-align
,height
oborder-collapse
.#container
solo estuviera contenido#foot
y no tuviera otro contenido?Es una vieja pregunta, pero este es un enfoque único que puede ayudar en varios casos.
CSS puro, sin posicionamiento absoluto, sin fijar ninguna altura, navegador cruzado (IE9 +)
mira ese violín de trabajo
Debido a que el flujo normal es 'de arriba a abajo', no podemos simplemente pedirle al
#copyright
div que se adhiera al fondo de su padre sin un posicionamiento absoluto de algún tipo, pero si quisiéramos que el#copyright
div se adhiera a la parte superior de su padre, será muy simple, porque esta es la forma de flujo normal.Entonces usaremos esto en nuestra ventaja. cambiaremos el orden de las
div
s en el HTML, ahora el#copyright
div está en la parte superior y el contenido lo sigue de inmediato. también hacemos que el contenido div se extienda por completo (utilizando pseudo elementos y técnicas de borrado)ahora es solo cuestión de invertir ese orden nuevamente en la vista. eso se puede hacer fácilmente con CSS transform.
Giramos el contenedor 180 grados y ahora: arriba-abajo. (e invertimos el contenido para que se vea normal nuevamente)
Si queremos tener una barra de scrool dentro del área de contenido, necesitamos aplicar un poco más de magia CSS. como se puede mostrar aquí [en ese ejemplo, el contenido está debajo de un encabezado, pero es la misma idea]
fuente
Cree otro contenedor
div
para los elementos anteriores#copyright
. Justo por encima de los derechos de autor, agregue un nuevodiv
:<div style="clear:both;"></div>
obligará al pie de página a estar debajo de todo lo demás, al igual que en el caso del uso de posicionamiento relativo (bottom:0px;
).fuente
Prueba esto;
fuente
Si bien ninguna de las respuestas proporcionadas aquí parecía aplicarse o funcionar en mi caso particular, me encontré con este artículo que proporciona esta solución ordenada:
Me resulta muy útil para aplicar un diseño receptivo para pantallas móviles sin tener que reordenar todo el código html de un sitio web, configurando
body
como una tabla.Tenga en cuenta que solo el primero
table-footer-group
otable-header-group
se representará como tal: si hay más de uno, los demás se representarán comotable-row-group
.fuente
CSS Grid
Como el uso de CSS Grid está aumentando, me gustaría sugerirle
align-self
al elemento que está dentro de un contenedor de cuadrícula.align-self
pueden contener cualquiera de los valores:end
,self-end
,flex-end
para el siguiente ejemplo.fuente
De hecho, puede usar
align
el cuadrobottom
sin usarposition:absolute
si conoceheight
el#container
uso de la función de alineación de texto deinline-block
elementos.Aquí puedes verlo en acción.
Este es el código:
fuente
Usando la traducción y la propiedad superior
Simplemente configure el elemento secundario en la posición: relativo y luego muévalo hacia arriba: 100% (esa es la altura del 100% del elemento primario) y manténgase en la parte inferior del elemento primario mediante transform: translateY (-100%) (eso es -100% de la altura de el niño).
Beneficios
Pero todavía solo solución :(
No olvide los prefijos para el navegador anterior.
fuente
Enlace CodePen aquí .
fuente
Si desea que se "pegue" al fondo, independientemente de la altura del contenedor, entonces el posicionamiento absoluto es el camino a seguir. Por supuesto, si el elemento de copyright es el último en el contenedor, siempre estará en la parte inferior de todos modos.
¿Puedes ampliar tu pregunta? ¿Explica exactamente lo que estás tratando de hacer (y por qué no quieres usar el posicionamiento absoluto)?
fuente
Además, si hay estipulaciones con el uso de
position:absolute;
oposition:relative;
, siempre puede intentarpadding
padrediv
o poner unmargin-top:x;
. No es un método muy bueno en la mayoría de los casos, pero puede ser útil en algunos casos.fuente
Tal vez esto ayude a alguien: siempre puede colocar el div fuera del otro div y luego empujarlo hacia arriba con un margen negativo:
fuente
fuente
No quiera usar "position: absolute" para pie de página adhesivo en la parte inferior. Entonces puedes hacer esto:
fuente
Si no conoce la altura del bloque secundario:
http://jsbin.com/ULUXIFon/3/edit
Si conoce la altura del bloque secundario, agregue el bloque secundario y luego agregue padding-top / margin-top:
fuente
Solo porque esto no se ha mencionado en absoluto, lo que generalmente funciona bien en situaciones como la suya:
Colocando el copyright-div después del contenedor-div
Solo tendría que formatear el copyright-div de manera similar al otro contenedor (el mismo ancho total, centrado, etc.), y todo está bien.
CSS:
HTML:
El único momento en que esto podría no ser ideal es cuando se declara su container-div
height:100%
y el usuario debería desplazarse hacia abajo para ver los derechos de autor. Pero aún así podría evitar (por ejemplomargin-top:-20px
, cuando la altura de su elemento de copyright es 20px).Aparte: sé que el OP solicitó una solución que "... se adhiera al fondo del 'contenedor' div ..." , y no algo debajo, pero vamos, la gente está buscando buenas soluciones aquí, y esto ¡es uno!
fuente
margin-top: -{element height}
.Aquí hay un enfoque dirigido a hacer que un elemento con una altura y ancho conocidos (al menos aproximadamente) flote hacia la derecha y permanezca en la parte inferior, mientras se comporta como un elemento en línea para los otros elementos. Está enfocado en la esquina inferior derecha porque puedes colocarlo fácilmente en cualquier otra esquina a través de otros métodos.
Necesitaba hacer una barra de navegación que tuviera los enlaces reales en la parte inferior derecha y elementos hermanos aleatorios, al tiempo que se aseguraba de que la barra se estirara correctamente, sin interrumpir el diseño. Utilicé un elemento "sombra" para ocupar el espacio de los enlaces de la barra de navegación y lo agregué al final de los nodos secundarios del contenedor.
fuente
No hay nada llamado
float:bottom
en CSS. La mejor manera es usar el posicionamiento en tales casos:fuente
Para aquellos que solo tienen un hijo en el contenedor, puede usar el
table-cell
yvertical-align
enfoque que funcionó de manera confiable para colocar un solo div en la parte inferior de su padre.Tenga en cuenta que el uso
table-footer-group
como otras respuestas mencionadas romperá el cálculo de altura del padretable
.fuente
De acuerdo: w3schools.com
Por lo tanto, debe colocar el elemento padre con algo relativo o absoluto, etc. y colocar el elemento deseado en absoluto y luego establecer el fondo en 0.
fuente
Div de estilo,
position:absolute;bottom:5px;width:100%;
está funcionando, pero requirió más situación de desplazamiento.fuente