Digamos que tengo el siguiente código CSS y HTML:
#header {
height: 150px;
}
<div id="header">
<h1>Header title</h1>
Header content (one or multiple lines)
</div>
La sección del encabezado tiene una altura fija, pero el contenido del encabezado puede cambiar.
Me gustaría que el contenido del encabezado se alinee verticalmente con la parte inferior de la sección del encabezado, de modo que la última línea de texto se "pegue" en la parte inferior de la sección del encabezado.
Entonces, si solo hay una línea de texto, sería como:
----------------------------- El | Título del encabezado El | El | El | El | contenido del encabezado (que resulta en una línea) -----------------------------
Y si hubiera tres líneas:
----------------------------- El | Título del encabezado El | El | contenido del encabezado (que es tan El | muchas cosas que perfectamente El | abarca más de tres líneas) -----------------------------
¿Cómo se puede hacer esto en CSS?
fuente
p
elemento, o al menos unspan
display: table-cell
, otable-row
, otable
. Nunca más necesitará usar tablas para un diseño puro.Usar posicionamiento CSS:
Como señaló Cletus , debe identificar el contenido del encabezado para que esto funcione.
fuente
width = '100%'
contenido de encabezado<span>
elementos tienendisplay: inline;
por defecto, lo que no ocupa todo el ancho del contenedor. La solución más adecuada sería cambiar el intervalo a a<div>
, que es un elemento de bloque de forma predeterminada.Si no le preocupan los navegadores antiguos, use un flexbox.
El elemento padre necesita que su tipo de visualización esté configurado para flexionarse
Luego establece el elemento secundario align-self en flex-end.
Aquí está el recurso que solía aprender: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
fuente
Yo uso estas propiedades y funciona!
fuente
table-cell
rompe muchas cosas Al igual que el sistema de cuadrícula Bootstrap.col-md-12
ya no te dará un div 100% de ancho.Después de luchar con este mismo problema durante algún tiempo, finalmente descubrí una solución que cumple con todos mis requisitos:
La solución solo toma una
<div>
, que llamo el "alineador":CSS
html
Este truco funciona creando un div alto y delgado, que empuja la línea de base de texto hacia el fondo del contenedor.
Aquí hay un ejemplo completo que logra lo que pedía el OP. He hecho el "bottom_aligner" grueso y rojo solo con fines de demostración.
CSS:
HTML:
fuente
::before
regla, lo que elimina la necesidad de un elemento adicional. Usamos flex al final, pero esto es útil cuando no puedes.height
caja / contenedor y sus padres están configurados (en px o% o lo que sea).La forma moderna de hacerlo sería usar flexbox . Vea el ejemplo a continuación. Ni siquiera necesita envolver
Some text...
en ninguna etiqueta HTML, ya que el texto contenido directamente en un contenedor flexible está envuelto en un elemento flexible anónimo.Si solo hay algo de texto y desea alinearlo verticalmente con la parte inferior del contenedor.
fuente
position:absolute;
. ¡Esta solución funcionó perfectamente para mi caso!Los elementos en línea o en bloque en línea se pueden alinear con la parte inferior de los elementos a nivel de bloque si la altura de línea del elemento padre / bloque es mayor que la del elemento en línea. *
margen:
css:
* asegúrese de estar en modo estándar
fuente
fuente
<h1>
está dentro de<p>
o<div>
lo usaríajustify-content: space-between
.Simplemente puede lograr flex
fuente
Si tiene varios elementos de altura dinámica, use los valores de visualización CSS de table y table-cell:
HTML
CSS
He creado una demostración de JSBin aquí: http://jsbin.com/INOnAkuF/2/edit
La demostración también tiene un ejemplo de cómo centrar verticalmente la alineación utilizando la misma técnica.
fuente
Aquí hay otra solución usando flexbox pero sin usar flex-end para la alineación inferior. La idea es establecer
margin-bottom
en h1 en auto para empujar el contenido restante hacia abajo:También podemos hacer lo mismo con
margin-top:auto
el texto, pero en este caso debemos envolverlo dentro dediv
ospan
:fuente
No necesitas absoluto + relativo para esto. Es muy posible usar la posición relativa tanto para el contenedor como para los datos. Así es como lo haces.
Suponga que la altura de sus datos será
x
. Su contenedor es relativo y el pie de página también es relativo. Todo lo que tienes que hacer es agregar a tus datosSus datos siempre estarán en el fondo de su contenedor. Funciona incluso si tiene un contenedor con altura dinámica.
HTML será así
CSS será así
Ejemplo en vivo aquí
Espero que esto ayude.
fuente
bottom: -webkit-calc(-100% + x);
está haciendo?Aquí está la forma flexible de hacerlo. Por supuesto, IE8 no lo admite, ya que el usuario lo necesitaba hace 7 años. Dependiendo de lo que necesite apoyar, algunos de estos pueden eliminarse.
Aún así, sería bueno si hubiera una manera de hacer esto sin un contenedor externo, solo que el texto se alinee dentro de sí mismo.
fuente
Una solución muy simple de una línea es agregar altura de línea al div, teniendo en cuenta que todo el texto del div irá al final.
CSS:
HTML:
tenga en cuenta que esta es una solución práctica y rápida cuando solo desea que el texto dentro de div baje, si necesita combinar imágenes y otras cosas, tendrá que codificar CSS un poco más complejo y receptivo
fuente
si pudiera establecer la altura del div de ajuste del contenido (# encabezado-contenido como se muestra en la respuesta de otros), en lugar de todo el # encabezado, tal vez también pueda probar este enfoque:
HTML
CSS
mostrar en codepen
fuente
Parece estar funcionando:
HTML: estoy en la parte inferior
css:
fuente
Todas estas respuestas y ninguna funcionaron para mí ... No soy un experto en flexbox, pero esto fue razonablemente fácil de entender, es simple y fácil de entender y usar. Para separar algo del resto del contenido, inserte un div vacío y déjelo crecer para llenar el espacio.
https://jsfiddle.net/8sfeLmgd/1/
Esto reacciona como se espera cuando el contenido del fondo no tiene un tamaño fijo y también cuando el contenedor no tiene un tamaño fijo.
fuente
He ideado una forma que es mucho más simple de lo que se ha mencionado.
Establece la altura del encabezado div. Luego dentro de eso, diseñe su
H1
etiqueta de la siguiente manera:Estoy trabajando en un sitio para un cliente, y el diseño requiere que el texto esté en la parte inferior de un determinado div. He logrado el resultado usando estas dos líneas, y funciona bien. Además, si el texto se expande, el relleno seguirá siendo el mismo.
fuente
Encontré esta solución basada en una plantilla de inicio de arranque predeterminada
fuente
fuente
probar con:
intenta cambiar el% para arreglarlo. Ejemplo: 120% o 90% ... etc.
fuente
El sitio que acabo de hacer para un cliente solicitó que el texto del pie de página fuera un cuadro alto, con el texto en la parte inferior que logré esto con un simple relleno, debería funcionar para todos los navegadores.
fuente
padding: 0 30px
es un poco redundante, también puede haber puestopadding: 30px
las otras 2 declaraciones.padding: 60px 30px 8px;
,padding: 60px 30px 8px 30px;
cuatropadding-
reglas explícitas , o incluso la sugerencia de @ TheWaxMann son todas superiores, y estoy dispuesto y puedo argumentar eso ;-)Un ejemplo perfecto de navegador cruzado es probablemente este aquí:
http://www.csszengarden.com/?cssfile=/213/213.css&page=0
La idea es mostrar el div en la parte inferior y también hacer que se quede allí. A menudo, el enfoque simple hará que el div adhesivo se desplace hacia arriba con el contenido principal.
El siguiente es un ejemplo mínimo totalmente funcional. Tenga en cuenta que no se requieren trucos de incrustación div. Las muchas BR son solo para forzar la aparición de una barra de desplazamiento:
Si se pregunta si su código podría no funcionar en IE, recuerde agregar la etiqueta DOCTYPE en la parte superior. Es crucial que esto funcione en IE. Además, esta debería ser la primera etiqueta y no debería aparecer nada encima.
fuente
<br />
etiquetas automáticamente ...content-type
provocaría que el navegador arroje un error de análisis xml.Parece estar funcionando:
Usar menos hace que resolver acertijos de CSS se parezca mucho más a la codificación que a me gusta ... Me encanta el CSS. Es un verdadero placer cuando puede cambiar todo el diseño (sin romperlo :) simplemente cambiando un parámetro.
fuente
Solución 2015
http://codepen.io/anon/pen/qERMdx
de nada
fuente