Estou tendo um problema ao centralizar um elemento com o atributo position
definido como absolute
. Alguém sabe por que as imagens não estão centralizadas?
body {
text-align: center;
}
#slideshowWrapper {
margin-top: 50px;
text-align: center;
}
ul#slideshow {
list-style: none;
position: relative;
margin: auto;
}
ul#slideshow li {
position: absolute;
}
ul#slideshow li img {
border: 1px solid #ccc;
padding: 4px;
height: 450px;
}
<body>
<div id="slideshowWrapper">
<ul id="slideshow">
<li><img src="img/dummy1.JPG" alt="Dummy 1" /></li>
<li><img src="img/piano_unlicened.JPG" alt="Dummy 2" /></li>
</ul>
</div>
</body>
html
css
css-position
centering
user1098278
fonte
fonte
Respostas:
Se você definiu uma largura, pode usar:
fonte
Sem conhecer o
width
/height
do elemento 1 posicionado , ainda é possível alinhá-lo da seguinte forma:EXEMPLO AQUI
Vale ressaltar que o CSS Transform é suportado no IE9 e acima . (Prefixos de fornecedor omitidos por brevidade)
Explicação
Adicionar
top
/left
de50%
move a margem superior / esquerda do elemento para o meio do pai e atranslate()
função com o valor (negativo) de-50%
move o elemento pela metade do seu tamanho. Portanto, o elemento será posicionado no meio.Isso ocorre porque um valor percentual em
top
/left
properties é relativo à altura / largura do elemento pai (que está criando um bloco contendo).Enquanto um valor percentual na função de transformação é relativo à largura / altura do próprio elemento (na verdade, refere-se ao tamanho da caixa delimitadora ) .
translate()
Para alinhamento unidirecional, vá com
translateX(-50%)
ou emtranslateY(-50%)
vez disso.1. Um elemento com
position
outro que nãostatic
. Ou sejarelative
,absolute
,fixed
valores.fonte
position: absolute; left: 50%; transform: translateX(-50%);
, centralização vertical:position: absolute; top: 50%; transform: translateY(-50%);
.translate
propriedade, traduza o elemento pelo tamanho de si mesmo , independentemente do tamanho de seu pai.Centrar algo
absolute
posicionado é bastante complicado em CSS.Mude
margin-left
para (negativo) metade da largura do elemento que você está tentando centralizar.fonte
Div centro alinhado vertical e horizontalmente
Nota: Os elementos devem ter largura e altura a serem definidos
fonte
height
conjunto para que isso funcione.Um truque simples de CSS, basta adicionar:
Isso funciona tanto em imagens quanto em texto.
fonte
Se você deseja centralizar um elemento absoluto
Se você deseja que um contêiner seja centralizado da esquerda para a direita, mas não de cima para baixo
Se você deseja que um contêiner seja centralizado de cima para baixo, independentemente da esquerda para a direita
Atualização em 15 de dezembro de 2015
Bem, eu aprendi esse outro novo truque há alguns meses atrás. Supondo que você tenha um elemento pai relativo.
Aqui vai o seu elemento absoluto.
Com isso, acho que é uma resposta melhor do que minha solução antiga. Como você não precisa especificar largura E altura. Este adapta o conteúdo do próprio elemento.
fonte
Para centralizar um elemento "position: absolute".
fonte
Isso funcionou para mim:
fonte
para centralizar uma posição: atributo absoluto, você precisa definir à esquerda: 50% e margem esquerda: -50% da largura da div.
para o centro vertical absoluto, você precisa fazer a mesma coisa não com a esquerda apenas com a parte superior. (OBSERVAÇÃO: o html e o corpo devem ter 100% de altura mínima;)
e pode ser combinado para ambos
fonte
veja a demonstração em: http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
; trabalha com umposition: absolute
elemento ao adicionarleft: 0; right: 0;
fonte
Quanto mais simples, melhor:
Em seguida, você precisa inserir sua tag img em uma tag que ostente posição: propriedade relativa, da seguinte maneira:
fonte
provavelmente o mais curto
fonte
Se você não souber a largura do elemento, poderá usar este código:
Demonstração e rabeca: http://jsfiddle.net/wrh7a21r/
Fonte: https://stackoverflow.com/a/1777282/1136132
fonte
Ou agora você pode usar a caixa flexível com posição absoluta:
fonte
Não tenho certeza do que você deseja realizar, mas, neste caso, apenas adicionar
width: 100%;
à suaul#slideshow li
vontade fará o truque.Explicação
As
img
tags são elementos de bloco embutido. Isso significa que eles fluem em linha como texto, mas também têm largura e altura como elementos de bloco. No seu css, existem duastext-align: center;
regras aplicadas ao<body>
e ao#slideshowWrapper
(o que é redundante), isso faz com que todos os elementos filho inline e inline-block sejam centralizados nos elementos de bloco mais próximos, no seu código essas sãoli
tags. Todos os elementos de bloco possuemwidth: 100%
se eles são o fluxo estático (position: static;
), que é o padrão. O problema é que, quando você diz que asli
tags estãoposition: absolute;
, você as tira do fluxo estático normal, e isso faz com que elas diminuam o tamanho para se ajustarem apenas ao conteúdo interno, ou seja, elas "perdem" suaswidth: 100%
propriedades.fonte
Usar
left: calc(50% - Wpx/2);
onde W é a largura do elemento funciona para mim.fonte
Suas imagens não estão centralizadas porque os itens da lista não estão centralizados; apenas o texto deles é centralizado. Você pode obter o posicionamento desejado centralizando a lista inteira ou centralizando as imagens na lista.
Uma versão revisada do seu código pode ser encontrada na parte inferior. Na minha revisão, centralizo a lista e as imagens nela.
A verdade é que você não pode centralizar um elemento que tenha uma posição definida como absoluta.
Mas esse comportamento pode ser imitado!
Nota: Essas instruções funcionarão com qualquer elemento do bloco DOM, não apenas com img.
Coloque a sua imagem com uma div ou outra tag (no seu caso, um li).
Nota: Os nomes dados a esses elementos não são especiais.
Altere seu css ou scss para dar ao div um posicionamento absoluto e sua imagem centralizada.
E aí está! Seu img deve estar centrado!
Seu código:
Tente isto:
Eu espero que isto tenha sido útil. Boa sorte!
fonte
Um objeto absoluto dentro de um objeto relativo é relativo ao pai, o problema aqui é que você precisa de uma largura estática para o contêiner
#slideshowWrapper
e o restante da solução é como os outros usuários dizemhttp://jsfiddle.net/ejRTU/10/
fonte
Aqui está a solução fácil e melhor para o elemento central com "position: absolute"
fonte
Você pode tentar desta maneira:
fonte
A posição absoluta retira-a do fluxo e a coloca em 0x0 para o pai (último elemento do bloco a ter uma posição absoluta ou relativa à posição).
Não sei ao certo o que exatamente você está tentando realizar. Talvez seja melhor definir o li como a
position:relative
e isso os centralizará. Dado o seu CSS atualConfira http://jsfiddle.net/rtgibbons/ejRTU/ para brincar com ele
fonte
Não me lembro de onde vi o método de centralização listado acima, usando valores negativos superiores, direito, inferior e esquerdo. Para mim, essa técnica é a melhor, na maioria das situações.
Quando uso a combinação acima, a imagem se comporta como uma imagem de fundo com as seguintes configurações:
Mais detalhes sobre o primeiro exemplo podem ser encontrados aqui:
Manter a proporção de uma div com CSS
fonte
O que parece estar acontecendo é que existem duas soluções; centrado usando margens e centrado usando posição. Ambos funcionam bem, mas se você deseja posicionar um elemento em absoluto em relação a esse elemento centralizado, é necessário usar o método de posição absoluta, porque a posição absoluta do segundo elemento é padronizada para o primeiro pai que está posicionado. Igual a:
Até ler essa postagem, usando a técnica automática margin: 0, para criar um menu à esquerda do meu conteúdo, tive que criar uma coluna da mesma largura à direita para equilibrá-la. Feio. Obrigado!
fonte
Use
margin-left: x%;
onde x é a metade da largura do elemento.fonte
fonte