Digamos que eu tenha o seguinte código CSS e HTML:
#header {
height: 150px;
}
<div id="header">
<h1>Header title</h1>
Header content (one or multiple lines)
</div>
A seção do cabeçalho tem altura fixa, mas o conteúdo do cabeçalho pode mudar.
Eu gostaria que o conteúdo do cabeçalho estivesse alinhado verticalmente na parte inferior da seção do cabeçalho, para que a última linha do texto "grude" na parte inferior da seção do cabeçalho.
Portanto, se houver apenas uma linha de texto, seria como:
----------------------------- | Título do cabeçalho | | | | conteúdo do cabeçalho (resultando em uma linha) -----------------------------
E se houvesse três linhas:
----------------------------- | Título do cabeçalho | | conteúdo do cabeçalho (que é tão | muita coisa que perfeitamente | se estende por três linhas) -----------------------------
Como isso pode ser feito em CSS?
fonte
p
elemento, ou pelo menos umspan
display: table-cell
, outable-row
, outable
. Você nunca mais precisará usar tabelas para o layout puro.Use o posicionamento CSS:
Como observou o cletus , você precisa identificar o conteúdo do cabeçalho para fazer isso funcionar.
fonte
width = '100%'
no cabeçalho do conteúdo<span>
elementos possuem,display: inline;
por padrão, o que não ocupa toda a largura do contêiner. A correção mais apropriada seria alterar a extensão para a<div>
, que é um elemento de bloco por padrão.Se você não está preocupado com navegadores herdados, use um flexbox.
O elemento pai precisa de seu tipo de exibição definido para flexionar
Em seguida, você define o alinhamento do elemento filho como flex-end.
Aqui está o recurso que eu usei para aprender: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
fonte
Eu uso essas propriedades e funciona!
fonte
table-cell
quebra muitas coisas. Como o sistema de grade do Bootstrap.col-md-12
não lhe dará mais um div de 100%.Depois de lutar com esse mesmo problema por algum tempo, finalmente descobri uma solução que atende a todos os meus requisitos:
A solução leva apenas um
<div>
, que eu chamo de "alinhador":CSS
html
Esse truque funciona criando uma div alta e fina, que empurra a linha de base do texto para a parte inferior do contêiner.
Aqui está um exemplo completo que alcança o que o OP estava pedindo. Fiz o "bottom_aligner" grosso e vermelho apenas para fins de demonstração.
CSS:
HTML:
fonte
::before
regra, o que remove a necessidade de um elemento extra. Usamos flex no final, mas isso é útil quando você não pode.height
da caixa / contêiner e seus pais estiverem definidos (para px ou% ou o que for).A maneira moderna de fazer isso seria usar flexbox . Veja o exemplo abaixo. Você nem precisa quebrar
Some text...
em nenhuma tag HTML, pois o texto diretamente contido em um contêiner flexível é envolvido em um item flexível anônimo.Se houver apenas algum texto e você desejar alinhar verticalmente a parte inferior do contêiner.
fonte
position:absolute;
. Esta solução funcionou perfeitamente para o meu caso!Os elementos embutidos ou de bloco embutido podem ser alinhados à parte inferior dos elementos de nível de bloco se a altura da linha do elemento pai / bloco for maior que a do elemento embutido. *
marcação:
css:
* verifique se você está no modo padrão
fonte
fonte
<h1>
estiver dentro de um<p>
ou<div>
eu usariajustify-content: space-between
.Você pode simplesmente obter flexibilidade
fonte
Se você tiver vários itens dinâmicos de altura, use os valores de exibição CSS da tabela e da célula da tabela:
HTML
CSS
Criei uma demonstração do JSBin aqui: http://jsbin.com/INOnAkuF/2/edit
A demonstração também tem um exemplo de como centralizar verticalmente o alinhamento usando a mesma técnica.
fonte
Aqui está outra solução usando o flexbox, mas sem o uso do flex-end para o alinhamento inferior. A idéia é definir
margin-bottom
em h1 a auto para empurrar o conteúdo restante para o fundo:Também podemos fazer o mesmo com
margin-top:auto
o texto, mas, neste caso, precisamos envolvê-lo dentro de umdiv
ouspan
:fonte
Você não precisa de absoluto + relativo para isso. É muito possível usar a posição relativa para o contêiner e os dados. É assim que se faz.
Suponha que a altura dos seus dados será
x
. Seu contêiner é relativo e o rodapé também é relativo. Tudo o que você precisa fazer é adicionar aos seus dadosSeus dados sempre estarão na parte inferior do seu contêiner. Funciona mesmo se você tiver contêiner com altura dinâmica.
HTML será assim
CSS será assim
Exemplo ao vivo aqui
Espero que isto ajude.
fonte
bottom: -webkit-calc(-100% + x);
está fazendo?Aqui está a maneira flexível de fazer isso. Obviamente, ele não é suportado pelo IE8, como o usuário precisava há 7 anos. Dependendo do que você precisa oferecer suporte, algumas delas podem ser eliminadas.
Ainda assim, seria bom se houvesse uma maneira de fazer isso sem um contêiner externo, basta que o texto se alinhe dentro de si mesmo.
fonte
uma solução muito simples, de uma linha, é adicionar altura à div, tendo em mente que todo o texto da div ficará no fundo.
CSS:
HTML:
lembre-se de que esta é uma solução prática e rápida quando você deseja que o texto dentro de div seja reduzido; se você precisar combinar imagens e outras coisas, precisará codificar um CSS um pouco mais complexo e responsivo
fonte
se você pode definir a altura da divisão de agrupamento do conteúdo (# cabeçalho-conteúdo, como mostrado na resposta de outras pessoas), em vez de todo o # cabeçalho, talvez você também possa tentar esta abordagem:
HTML
CSS
mostrar no codepen
fonte
Parece estar funcionando:
HTML: estou na parte inferior
css:
fonte
Todas essas respostas e nenhuma funcionaram para mim ... Eu não sou especialista em flexbox, mas isso foi razoavelmente fácil de entender, é simples e fácil de entender e usar. Para separar algo do restante do conteúdo, insira uma div vazia e deixe crescer para preencher o espaço.
https://jsfiddle.net/8sfeLmgd/1/
Isso reage como esperado quando o conteúdo inferior não é de tamanho fixo, também quando o contêiner não é de tamanho fixo.
fonte
Eu projetei uma maneira muito mais simples do que o que foi mencionado.
Defina a altura da div do cabeçalho. Depois, estilize sua
H1
tag da seguinte maneira:Estou trabalhando em um site para um cliente, e o design exige que o texto esteja na parte inferior de uma determinada div. Consegui o resultado usando essas duas linhas e funciona bem. Além disso, se o texto for expandido, o preenchimento continuará o mesmo.
fonte
Encontrei esta solução em baixo em um modelo inicial de inicialização
fonte
fonte
tente com:
tente alterar o% para corrigi-lo. Exemplo: 120% ou 90% ... etc.
fonte
O site que acabei de criar para um cliente solicitou que o texto do rodapé fosse uma caixa alta, com o texto na parte inferior que eu consegui com preenchimento simples, deve funcionar para todos os navegadores.
fonte
padding: 0 30px
é um pouco redundante, você pode também ter colocadopadding: 30px
as outras 2 declarações.padding: 60px 30px 8px;
,padding: 60px 30px 8px 30px;
, Quatro explícitaspadding-
regras, ou mesmo @ sugestão de TheWaxMann são todos superiores - e estou disposto e capaz de argumentar que um ;-)Um exemplo perfeito entre navegadores é provavelmente este aqui:
http://www.csszengarden.com/?cssfile=/213/213.css&page=0
A idéia é exibir o div na parte inferior e também fazê-lo ficar lá. Freqüentemente, a abordagem simples fará com que a div pegajosa role para cima com o conteúdo principal.
A seguir, é apresentado um exemplo mínimo totalmente funcional. Observe que não há truques de incorporação de div necessários. As muitas BRs são apenas para forçar a exibição de uma barra de rolagem:
Se você está pensando que seu código pode não estar funcionando no IE, lembre-se de adicionar a tag DOCTYPE na parte superior. É crucial que isso funcione no IE. Além disso, essa deve ser a primeira tag e nada deve aparecer acima dela.
fonte
<br />
tags de ...content-type
resultaria no navegador lançando um erro de análise de XML.Parece estar funcionando:
Usar menos torna a solução de quebra-cabeças CSS muito mais como codificação do que como ... Eu simplesmente amo CSS. É um verdadeiro prazer quando você pode alterar todo o layout (sem quebrá-lo :) apenas alterando um parâmetro.
fonte
Solução 2015
http://codepen.io/anon/pen/qERMdx
não há de quê
fonte