J'ai un div avec deux images et un h1
. Tous doivent être alignés verticalement dans le div, l'un à côté de l'autre.
L'une des images doit être absolute
positionnée dans le div.
Quel est le CSS nécessaire pour que cela fonctionne sur tous les navigateurs courants?
<div id="header">
<img src=".." ></img>
<h1>testing...</h1>
<img src="..."></img>
</div>
Réponses:
Wow, ce problème est populaire. Il est basé sur un malentendu dans la
vertical-align
propriété. Cet excellent article l'explique:Comprendre
vertical-align
, ou "Comment (ne pas) centrer verticalement du contenu" par Gavin Kistner.«Comment centrer en CSS» est un excellent outil Web qui aide à trouver les attributs de centrage CSS nécessaires pour différentes situations.
En un mot (et pour éviter la pourriture des maillons) :
vertical-align: middle
. Cependant, le «contexte» n'est pas la hauteur entière du conteneur parent, c'est la hauteur de la ligne de texte dans laquelle ils se trouvent. Exemple jsfiddleabsolute
et préciser sonheight
,margin-top
et latop
position. exemple jsfiddleline-height
qu'il remplisse sa hauteur. Cette méthode est assez polyvalente dans mon expérience. exemple jsfiddlela source
vertical-align: middle
) est que vous devez spécifier une hauteur fixe. Pas très possible pour le Responsive Web Design .inline-block
table-cell
éléments et . Si vous rencontrez des problèmes avec cela, essayez d'ajusterline-height
l'élément conteneur (c'est-à-dire le contexte) car il est utilisé dans lesvertical-align
calculs de zone de ligne.Maintenant que la prise en charge de la flexbox augmente, ce CSS appliqué à l'élément contenant centrerait verticalement l'élément contenu:
Utilisez la version préfixée si vous devez également cibler Explorer 10 et les anciens navigateurs Android (<4.4):
la source
align-items
sectionJ'ai utilisé ce code très simple:
HTML:
CSS:
De toute évidence, que vous utilisiez un
.class
ou un#id
, le résultat ne changera pas.la source
Cela a fonctionné pour moi:
la source
margin : 0 auto
, cela ne fonctionnera pas à cause dedisplay: table-cell
la source
justify-content: center
fixe mon manque de centrage horizontalUne technique d'un de mes amis:
HTML:
CSS:
DÉMO ici
la source
Pour positionner les éléments de bloc au centre (fonctionne dans IE9 et supérieur), a besoin d'un wrapper
div
:la source
Aligné comment ? Haut des images alignées avec le haut du texte?
Absolument positionné par rapport au DIV? Peut-être pourriez-vous esquisser ce que vous cherchez ...?
fd a décrit les étapes du positionnement absolu, ainsi que le réglage de l'affichage de l'
H1
élément de sorte que les images apparaissent en ligne avec lui. À cela, j'ajouterai que vous pouvez aligner les images en utilisant levertical-align
style:... cela mettrait l'en-tête et les images ensemble, avec les bords supérieurs alignés. D'autres options d'alignement existent; voir la documentation . Vous pouvez également trouver utile de supprimer le DIV et de déplacer les images à l'intérieur de l'
H1
élément - cela fournit une valeur sémantique au conteneur et supprime la nécessité d'ajuster l'affichage duH1
:la source
Utilisez cette formule, et cela fonctionnera toujours sans fissures:
la source
Presque toutes les méthodes doivent spécifier la hauteur, mais souvent nous n'avons pas de hauteur.
Voici donc une astuce CSS3 3 lignes qui ne nécessite pas de connaître la hauteur.
Il est pris en charge même dans IE9.
avec ses préfixes fournisseurs:
Source: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/
la source
De deux manières, vous pouvez aligner les éléments verticalement et horizontalement
1. Bootstrap 4.3.X
pour l'alignement vertical:
d-flex align-items-center
pour l'alignement horizontal:
d-flex justify-content-center
2. CSS3
la source
Mon astuce consiste à mettre à l'intérieur de la div une table avec 1 ligne et 1 colonne, définir 100% de largeur et hauteur, et la propriété vertical-align: middle.
Violon: http://jsfiddle.net/joan16v/sbqjnn9q/
la source
# 3 façons de diviser l'enfant central dans une div parent
Transformer / Traduire la méthode
Démo
la source
En utilisant CSS au centre vertical, vous pouvez laisser les conteneurs externes agir comme un tableau et le contenu comme une cellule de tableau. Dans ce format, vos objets resteront centrés. :)
J'ai imbriqué plusieurs objets dans JSFiddle pour un exemple, mais l'idée centrale est comme ceci:
HTML
CSS
L'exemple de plusieurs objets:
HTML
CSS
Résultat
https://jsfiddle.net/martjemeyer/ybs032uc/1/
la source
Par défaut, h1 est un élément de bloc et s'affichera sur la ligne après la première img, et fera apparaître la deuxième img sur la ligne suivant le bloc.
Pour empêcher cela de se produire, vous pouvez définir le h1 pour avoir un comportement de flux en ligne:
En ce qui concerne le positionnement absolu de l'img à l'intérieur du div , vous devez définir le div contenant pour avoir une "taille connue" avant que cela fonctionne correctement. D'après mon expérience, vous devez également modifier l'attribut position loin de la valeur par défaut - position: relative fonctionne pour moi:
Si vous pouvez le faire fonctionner, vous voudrez peut-être essayer de supprimer progressivement les attributs de hauteur, largeur et position de div.header pour obtenir les attributs minimaux requis pour obtenir l'effet souhaité.
MISE À JOUR:
Voici un exemple complet qui fonctionne sur Firefox 3:
la source
Nous pouvons utiliser un calcul de fonction CSS pour calculer la taille de l'élément, puis positionner l'élément enfant en conséquence.
Exemple HTML:
Et CSS:
Démo créée ici: https://jsfiddle.net/xnjq1t22/
Cette solution fonctionne bien avec responsive
div
height
etwidth
aussi.Remarque: La fonction calc n'est pas testée pour la compatibilité avec les anciens navigateurs.
la source
Aujourd'hui, j'ai trouvé une nouvelle solution pour aligner verticalement plusieurs lignes de texte dans un div en utilisant CSS3 (et j'utilise également le système de grille bootstrap v3 pour embellir l'interface utilisateur), qui est comme ci-dessous:
Selon ma compréhension, le parent immédiat du texte contenant l'élément doit avoir une certaine hauteur. J'espère que cela vous aidera aussi. Merci!
la source
Ma nouvelle façon préférée de le faire est avec une grille CSS:
la source
Utilisez simplement un tableau à une cellule à l'intérieur du div! Réglez simplement la hauteur de la cellule et du tableau à 100% et vous pouvez utiliser l'alignement vertical.
Une table à une cellule à l'intérieur du div gère l'alignement vertical et est rétrocompatible avec l'âge de pierre!
la source
J'utilise la solution suivante (sans positionnement et sans hauteur de ligne) depuis plus d'un an, elle fonctionne également avec IE 7 et 8.
la source
Ceci est ma solution personnelle pour un élément i à l'intérieur d'un div
Exemple JSFiddle
HTML
CSS
la source
Pour moi, cela a fonctionné de cette façon:
L'élément "a" converti en bouton, à l'aide des classes Bootstrap, et il est maintenant centré verticalement à l'intérieur d'un "div" externe.
la source
la source
Juste ça:
Une table à une cellule à l'intérieur du div gère l'alignement vertical et est rétrocompatible avec l'âge de pierre!
la source
la source
Voici juste une autre approche (réactive):
http://jsfiddle.net/herrfischerhamburg/JcVxz/
la source
Je suis un gars .NET qui vient de se lancer dans la programmation Web. Je n'ai pas utilisé CSS (enfin, un peu). J'ai utilisé un peu de JavaScript pour effectuer un centrage vertical avec la fonction .css de jQuery.
Je poste juste tout de mon test. Ce n'est probablement pas trop élégant, mais cela fonctionne jusqu'à présent.
la source
...
ou CSS
Couverture du navigateur
la source
table-cell
, ce quivertical-align: middle;
fonctionne. Encore mieux, cela fonctionne sans avoir besoin d'un div wrapper / buffer imbriqué, et il fonctionne à la fois pour le texte et les images (ou les deux), et vous n'avez pas besoin de modifier les propriétés de position.