J'essaie d'obtenir un contenant bleu au milieu d'un contenant rose, mais il semble vertical-align: middle;
ne pas faire le travail dans ce cas.
<div style="display: block; position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
<div style="background-color: lightblue;">test</div>
</div>
</div>
Résultat:
Attente:
Veuillez suggérer comment puis-je y parvenir.
html
css
vertical-alignment
absolute
Vladimirs
la source
la source
position: absolute
partout?vertical-align: middle;
works withdisplay: inline-block
or table layoutmargin-top: calc((56px - 16px) / 2)
, où56px - parent height
,16px - element height/font-size
- JSFiddleRéponses:
Tout d'abord, notez que cela
vertical-align
ne s'applique qu'aux cellules de tableau et aux éléments de niveau en ligne.Il existe plusieurs façons de réaliser des alignements verticaux qui peuvent ou non répondre à vos besoins. Cependant, je vais vous montrer deux méthodes parmi mes préférées:
1. Utilisation
transform
ettop
Le point clé est qu'une valeur de pourcentage sur
top
est relative à laheight
du bloc conteneur; Alors qu'une valeur de pourcentage surtransform
s est relative à la taille de la boîte elle-même (la boîte englobante).Si vous rencontrez des problèmes de rendu de police (police floue), le correctif consiste à ajouter
perspective(1px)
à latransform
déclaration pour qu'elle devienne:Il convient de noter que CSS
transform
est pris en charge dans IE9 + .2. Utilisation d'
inline-block
éléments (pseudo-)Dans cette méthode, nous avons deux
inline-block
éléments frères qui sont alignés verticalement au milieu parvertical-align: middle
déclaration.L'un d'eux a un
height
de100%
son parent et l'autre est notre élément souhaité dont nous voulions l'aligner au milieu.Enfin, nous devrions utiliser l'une des méthodes disponibles pour supprimer l'écart entre les éléments de niveau en ligne .
la source
valign
élément de méthode devrait êtredisplay: block
transform: translateY(-50%);
Jamais vu cela auparavant, mais cela fonctionne parfaitement. Véritable économiseur de vie.utilisez ceci :
consulter ce lien: https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/
la source
height
propriété doit être définie (en px, em, etc.) pour que cela fonctionne.Utilisez flex blox dans votre div positionné de manière absoutement pour centrer son contenu.
Voir l'exemple https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview
la source
Centrer verticalement et horizontalement:
la source
Vous pouvez utiliser
display:table
/table-cell;
la source
.b
manqueposition: absolute;
ce qui est important pour afficher d'autres choses que je n'ai pas incluses pour garder le code plus clair. Je sais que cela n'a aucun sens d'avoir une cellule de table positionnée de manière absolue, mais peut-être existe-t-il une autre approche qui permettra de conserverposition: absolute;
dans les deux.a
et les.b
classes?Voici un moyen simple d'utiliser l'objet Top.
Par exemple: si la taille absolue de l'élément est de 60 px.
la source
calc
est utile, même si cela devrait êtretop: calc(50% - 30px)
pour qu'elle soit réellement centrée.Une solution simple supplémentaire
HTML:
CSS:
la source
Veuillez vérifier cette réponse à un problème similaire.
C'est de loin le moyen le plus simple que j'ai trouvé.
https://stackoverflow.com/a/26079837/4593442
REMARQUE. J'ai utilisé display: -webkit-flex; au lieu d' affichage: flex; pour tester à l'intérieur de safari.
NOTE DE BAS DE PAGE. Je suis un novice uniquement, partageant l'aide de quelqu'un qui est clairement expérimenté.
la source
Vous pouvez le faire en utilisant
display:table;
dans div parent etdisplay: table-cell; vertical-align: middle;
dans div enfantla source