Dado o seguinte HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
Eu gostaria de me #copyright
ater ao fundo #container
.
Posso conseguir isso sem usar posicionamento absoluto? Se a propriedade float suportasse um valor 'bottom', parece que isso funcionaria, mas infelizmente não.
Respostas:
Provavelmente não.
Atribuir
position:relative
a#container
, e depoisposition:absolute; bottom:0;
para#copyright
.fonte
Na verdade, a resposta aceita pelo @User só funcionará se a janela for alta e o conteúdo for curto. Mas se o conteúdo for alto e a janela curta, ele colocará as informações de direitos autorais sobre o conteúdo da página e, em seguida, role para baixo para ver o conteúdo e deixar um aviso de direitos autorais flutuante. Isso torna essa solução inútil para a maioria das páginas (como essa página, na verdade).
A maneira mais comum de fazer isso é a abordagem "CSS sticky footer" demonstrada ou uma variação um pouco menor. Essa abordagem funciona muito bem - se você tiver um rodapé de altura fixa.
Se você precisar de um rodapé de altura variável que aparecerá na parte inferior da janela se o conteúdo for muito curto e na parte inferior do conteúdo se a janela for muito curta, o que você fará?
Engula seu orgulho e use uma mesa.
Por exemplo:
Experimente. Isso funcionará para qualquer tamanho de janela, para qualquer quantidade de conteúdo, para qualquer tamanho de rodapé, em todos os navegadores ... até no IE6.
Se você se encanta com o pensamento de usar uma tabela para o layout, reserve um segundo para se perguntar por quê. O CSS deveria facilitar nossa vida - e isso tem sido geral - mas o fato é que, mesmo depois de todos esses anos, ainda é uma bagunça quebrada e contra-intuitiva. Não pode resolver todos os problemas. Está incompleto.
As tabelas não são legais, mas pelo menos por enquanto, às vezes são a melhor maneira de resolver um problema de design.
fonte
A abordagem flexbox!
Nos navegadores suportados , você pode usar o seguinte:
Exemplo Aqui
Mostrar snippet de código
A solução acima é provavelmente mais flexível, no entanto, aqui está uma solução alternativa:
Exemplo Aqui
Mostrar snippet de código
Como uma observação lateral, convém adicionar prefixos de fornecedor para suporte adicional.
fonte
column-reverse
aos pais, para que você não precise adicionar nada à criança?Sim, você pode fazer isso sem
absolute
posicionar e sem usartable
s (que estraga com marcação e tal).DEMO
Foi testado para funcionar no IE> 7, chrome, FF e é uma coisa muito fácil de adicionar ao layout existente.
Ele efetivamente faz o que
float:bottom
faria, mesmo levando em consideração o problema apontado na resposta de @Rick Reilly!fonte
<!DOCTYPE>
conjunto para que isso funcione no IE (<= 8 pelo menos); essas versões mais antigas são compatíveis apenasdisplay:table-XXX
no modo "padrões". Mas o modo de padrões também quebrará muitas páginas projetadas para, por exemplo, o IE6..foot{display: table-footer-group}
. Eu não precisavavertical-align
,height
ouborder-collapse
.#container
contivesse#foot
e sem outro conteúdo?É uma pergunta antiga, mas essa é uma abordagem única que pode ajudar em vários casos.
CSS puro, sem posicionamento absoluto, sem correção de altura, navegador cruzado (IE9 +)
confira que Working Fiddle
Como o fluxo normal é "de cima para baixo", não podemos simplesmente pedir ao
#copyright
div que fique no fundo de seus pais sem absolutamente nenhum tipo de posicionamento, mas se quisermos o#copyright
div fique na parte superior de seu pai, será muito simples - porque esse é o caminho normal do fluxo.Então, vamos usar isso em nossa vantagem. vamos mudar a ordem dos
div
s no HTML, agora o#copyright
div está no topo e o conteúdo segue imediatamente. também fazemos com que a divisão de conteúdo se estenda até o fim (usando pseudo elementos e técnicas de limpeza)agora é apenas uma questão de inverter a ordem de volta à exibição. isso pode ser feito facilmente com a transformação CSS.
Giramos o contêiner em 180deg e agora: de cima para baixo. (e invertemos o conteúdo para parecer normal novamente)
Se queremos ter uma barra de ferramentas dentro da área de conteúdo, precisamos aplicar um pouco mais da mágica do CSS. como pode ser mostrado aqui [nesse exemplo, o conteúdo está abaixo de um cabeçalho - mas é a mesma ideia]
fonte
Crie outro contêiner
div
para os elementos acima#copyright
. Logo acima dos direitos autorais, adicione um novodiv
:<div style="clear:both;"></div>
Isso forçará o rodapé a ficar embaixo de todo o resto, como no caso de usar o posicionamento relativo (bottom:0px;
).fonte
Tente isso;
fonte
Embora nenhuma das respostas fornecidas aqui parecesse se aplicar ou funcionar no meu caso específico, deparei-me com este artigo que fornece esta solução interessante:
Acho muito útil para aplicar o design responsivo para exibição em dispositivos móveis sem precisar reordenar todo o código html de um site, definindo
body
se como uma tabela.Observe que apenas o primeiro
table-footer-group
outable-header-group
será renderizado como tal: se houver mais de um, os outros serão renderizados comotable-row-group
.fonte
Grade CSS
Como o uso da CSS Grid está aumentando, eu gostaria de sugerir
align-self
o elemento que está dentro de um contêiner de grade.align-self
pode conter qualquer um dos valores:end
,self-end
,flex-end
por exemplo, o seguinte.fonte
Na verdade, você pode
align
ir para a caixabottom
sem usarposition:absolute
se souberheight
o#container
uso do recurso de alinhamento de texto deinline-block
elementos.Aqui você pode vê-lo em ação.
Este é o código:
fonte
Usando a propriedade translateY e top
Basta definir o elemento filho para position: relativo e movê-lo para cima: 100% (que é a altura de 100% do pai) e ficar na parte inferior do pai por transformação: translateY (-100%) (que é -100% da altura de pai a criança).
Benefícios
Mas ainda assim solução alternativa :(
Não se esqueça dos prefixos do navegador mais antigo.
fonte
Link do CodePen aqui .
fonte
Se você deseja que "grude" no fundo, independentemente da altura do contêiner, o posicionamento absoluto é o caminho a seguir. Obviamente, se o elemento copyright for o último no contêiner, ele sempre estará na parte inferior de qualquer maneira.
Você pode expandir sua pergunta? Explique exatamente o que você está tentando fazer (e por que você não deseja usar o posicionamento absoluto)?
fonte
Além disso, se houver estipulações sobre o uso de
position:absolute;
ouposition:relative;
, você sempre pode tentarpadding
paidiv
ou colocar amargin-top:x;
. Na maioria dos casos, não é um método muito bom, mas pode ser útil em alguns casos.fonte
Talvez isso ajude alguém: você sempre pode colocar a div fora da outra div e empurrá-la para cima usando a margem negativa:
fonte
fonte
Não quero usar "position: absolute" para rodapé pegajoso na parte inferior. Então você pode fazer desta maneira:
fonte
Se você não souber a altura do bloqueio filho:
http://jsbin.com/ULUXIFon/3/edit
Se você conhece a altura do bloco filho, adicione o bloco filho e adicione padding-top / margin-top:
fonte
Só porque isso não foi mencionado, o que geralmente funciona bem em situações como a sua:
Colocando o copyright-div após o container-div
Você só precisa formatar a divisão de direitos autorais de maneira semelhante ao outro contêiner (mesma largura geral, centralização etc.), e tudo está bem.
CSS:
HTML:
O único momento em que isso pode não ser o ideal é quando seu container-div é declarado
height:100%
e o usuário precisa rolar para baixo para ver os direitos autorais. Mas mesmo assim você pode solucionar o problema (por exemplo,margin-top:-20px
quando a altura do seu elemento de direitos autorais é de 20 px).Além disso: eu sei que o OP pediu uma solução que "... grude no fundo da div 'container' ..." , e não algo embaixo dele, mas vamos lá, as pessoas estão procurando boas soluções aqui, e isso é um!
fonte
margin-top: -{element height}
.Aqui está uma abordagem destinada a fazer um elemento com altura e largura conhecidas (pelo menos aproximadamente) flutuar para a direita e permanecer na parte inferior, enquanto se comporta como um elemento embutido nos outros elementos. O foco é no canto inferior direito, porque você pode colocá-lo facilmente em qualquer outro canto através de outros métodos.
Eu precisava criar uma barra de navegação que tivesse os links reais no canto inferior direito e elementos irmãos aleatórios, garantindo que a própria barra esticasse corretamente, sem interromper o layout. Usei um elemento "shadow" para ocupar o espaço dos links da barra de navegação e o adicionei no final dos nós filhos do contêiner.
fonte
Não há nada chamado
float:bottom
em CSS. A melhor maneira é usar o posicionamento nesses casos:fonte
Para aqueles que têm apenas um filho no contêiner, você pode usar a abordagem
table-cell
evertical-align
que funcionou de maneira confiável para posicionar uma única div na parte inferior do pai.Observe que o uso
table-footer-group
como outras respostas mencionadas interromperá o cálculo da altura dos paistable
.fonte
De acordo: w3schools.com
Portanto, você precisa posicionar o elemento pai com algo relativo ou absoluto, etc, e posicionar o elemento desejado como absoluto e, posteriormente, definir como 0.
fonte
Div de estilo,
position:absolute;bottom:5px;width:100%;
está funcionando, mas exigia mais situação de rolagem.fonte