J'ai un problème pour centrer un élément dont l'attribut est position
défini sur absolute
. Est-ce que quelqu'un sait pourquoi les images ne sont pas centrées?
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
la source
la source
Réponses:
Si vous avez défini une largeur, vous pouvez utiliser:
la source
Sans connaître le
width
/height
de l' élément 1 positionné , il est toujours possible de l'aligner comme suit:EXEMPLE ICI
Il convient de noter que CSS Transform est pris en charge dans IE9 et supérieur . (Les préfixes du fournisseur ont été omis par souci de concision)
Explication
L'ajout
top
/left
de50%
déplace le bord supérieur / gauche de l'élément au milieu du parent ettranslate()
fonctionne avec la valeur (négative) de-50%
déplace l'élément de la moitié de sa taille. Par conséquent, l'élément sera positionné au milieu.En effet, un pourcentage sur
top
/left
properties est relative à la hauteur / largeur de l'élément parent (qui crée un bloc conteneur).Alors qu'une valeur de pourcentage sur la fonction de transformation est relative à la largeur / hauteur de l'élément lui-même (en fait, il fait référence à la taille du cadre de sélection ) .
translate()
Pour un alignement unidirectionnel, allez avec
translateX(-50%)
ou à latranslateY(-50%)
place.1. Un élément avec un
position
autre questatic
. -À- direrelative
,absolute
, lesfixed
valeurs.la source
position: absolute; left: 50%; transform: translateX(-50%);
, centrage vertical:position: absolute; top: 50%; transform: translateY(-50%);
.translate
propriété, traduire l'élément par la taille de lui - même , peu importe la taille de son parent.Centrer quelque chose de bien
absolute
positionné est plutôt compliqué en CSS.Passez
margin-left
à (négatif) la moitié de la largeur de l'élément que vous essayez de centrer.la source
Div centre verticalement et horizontalement aligné
Remarque: les éléments doivent avoir une largeur et une hauteur à définir
la source
height
ensemble pour que cela fonctionne.Une astuce CSS simple, ajoutez simplement:
Cela fonctionne à la fois sur les images et le texte.
la source
Si vous souhaitez centrer un élément absolu
Si vous souhaitez qu'un conteneur soit centré de gauche à droite, mais pas de haut en bas
Si vous souhaitez qu'un conteneur soit centré de haut en bas, qu'il soit de gauche à droite
Mise à jour au 15 décembre 2015
Eh bien, j'ai appris cette autre nouvelle astuce il y a quelques mois. En supposant que vous avez un élément parent relatif.
Voilà votre élément absolu.
Avec cela, je pense que c'est une meilleure réponse que mon ancienne solution. Puisque vous n'avez pas besoin de spécifier la largeur ET la hauteur. Celui-ci adapte le contenu de l'élément lui-même.
la source
Centrer un élément «position: absolu».
la source
Cela a fonctionné pour moi:
la source
pour centrer une position: attribut absolu que vous devez définir à gauche: 50% et marge à gauche: -50% de la largeur de la div.
pour le centre vertical absolu, vous devez faire la même chose, pas avec la gauche juste avec le haut. (REMARQUE: le html et le corps doivent avoir une hauteur minimale de 100%;)
et peut être combiné pour les deux
la source
voir la démo sur: http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
; fonctionne avec unposition: absolute
élément lors de l'ajoutleft: 0; right: 0;
la source
Le plus simple, le meilleur:
Ensuite, vous devez insérer votre balise img dans une balise qui arbore la position: propriété relative, comme suit:
la source
probablement le plus court
la source
Si vous ne connaissez pas la largeur de l'élément, vous pouvez utiliser ce code:
Démo au violon: http://jsfiddle.net/wrh7a21r/
Source: https://stackoverflow.com/a/1777282/1136132
la source
Ou vous pouvez maintenant utiliser une boîte flexible avec une position absolue:
la source
Je ne suis pas sûr de ce que vous voulez accomplir, mais dans ce cas, ajouter simplement
width: 100%;
à votreul#slideshow li
volonté fera l'affaire.Explication
Les
img
balises sont des éléments de bloc en ligne. Cela signifie qu'ils coulent en ligne comme du texte, mais ont également une largeur et une hauteur comme des éléments de bloc. Dans votre CSS, deuxtext-align: center;
règles sont appliquées à<body>
et à#slideshowWrapper
(ce qui est redondant btw), ce qui fait que tous les éléments enfants inline et inline-block doivent être centrés dans leurs éléments de bloc les plus proches, dans votre code ce sont desli
balises. Tous les éléments de bloc ontwidth: 100%
s'ils sont le flux statique (position: static;
), qui est par défaut. Le problème est que lorsque vous dites que lesli
balises existentposition: absolute;
, vous les retirez du flux statique normal, ce qui les amène à réduire leur taille pour s'adapter à leur contenu interne, en d'autres termes, elles "perdent" en quelque sorte leurwidth: 100%
propriété.la source
Utiliser
left: calc(50% - Wpx/2);
où W est la largeur de l'élément fonctionne pour moi.la source
Vos images ne sont pas centrées car vos éléments de liste ne sont pas centrés; seul leur texte est centré. Vous pouvez obtenir le positionnement souhaité en centrant la liste entière ou en centrant les images dans la liste.
Une version révisée de votre code se trouve en bas. Dans ma révision, je centre à la fois la liste et les images qu'elle contient.
La vérité est que vous ne pouvez pas centrer un élément dont la position est définie sur absolue.
Mais ce comportement peut être imité!
Remarque: Ces instructions fonctionneront avec n'importe quel élément de bloc DOM, pas seulement avec img.
Entourez votre image d'un div ou d'une autre balise (dans votre cas, un li).
Remarque: Les noms donnés à ces éléments ne sont pas spéciaux.
Modifiez votre css ou scss pour donner le positionnement absolu div et votre image centrée.
Et voila! Votre img doit être centré!
Votre code:
Essayez ceci:
J'espère que cela a été utile. Bonne chance!
la source
Un objet absolu à l'intérieur d'un objet relatif est relatif à son parent, le problème ici est que vous avez besoin d'une largeur statique pour le conteneur
#slideshowWrapper
, et le reste de la solution est comme le disent les autres utilisateurshttp://jsfiddle.net/ejRTU/10/
la source
Voici la solution simple et la meilleure pour l'élément central avec «position: absolue»
la source
Vous pouvez essayer de cette façon:
la source
La position absolue la retire du flux et la place à 0x0 par rapport au parent (dernier élément de bloc à avoir une position absolue ou relative).
Je ne sais pas exactement ce que vous essayez d'accomplir, il vaut peut-être mieux définir le li à un
position:relative
et cela les centrera. Compte tenu de votre CSS actuelConsultez http://jsfiddle.net/rtgibbons/ejRTU/ pour jouer avec
la source
Je ne me souviens pas où j'ai vu la méthode de centrage indiquée ci-dessus, en utilisant des valeurs négatives en haut, à droite, en bas et à gauche. Pour moi, cette tehnique est la meilleure, dans la plupart des situations.
Lorsque j'utilise la combinaison ci-dessus, l'image se comporte comme une image d'arrière-plan avec les paramètres suivants:
Plus de détails sur le premier exemple peuvent être trouvés ici:
Maintenir le rapport d'aspect d'un div avec CSS
la source
Ce qui semble se produire, c'est qu'il y a deux solutions; centré en utilisant les marges et centré en utilisant la position. Les deux fonctionnent correctement, mais si vous souhaitez positionner en absolu un élément par rapport à cet élément centré, vous devez utiliser la méthode de position absolue, car la position absolue du deuxième élément correspond par défaut au premier parent positionné. Ainsi:
Jusqu'à ce que je lise cette publication, en utilisant la technique automatique margin: 0, pour créer un menu à gauche de mon contenu, je devais créer une colonne de même largeur à droite pour l'équilibrer. Pas beau. Merci!
la source
Utilisez
margin-left: x%;
où x est la moitié de la largeur de l'élément.la source
la source