J'essaie de créer une petite zone de saisie du nom d'utilisateur et du mot de passe.
Je voudrais demander, comment alignez-vous verticalement un div?
Ce que j'ai c'est:
<div id="Login" class="BlackStrip floatright">
<div id="Username" class="floatleft">Username<br>Password</div>
<div id="Form" class="floatleft">
<form action="" method="post">
<input type="text" border="0"><br>
<input type="password" border="0">
</form>
</div>
</div>
Comment puis-je faire en sorte que la div avec id Username et Form s'aligne verticalement sur le centre? J'ai essayé de mettre:
vertical-align: middle;
en CSS pour la div avec id Login, mais cela ne semble pas fonctionner. Toute aide serait appréciée.
La meilleure approche dans les navigateurs modernes consiste à utiliser flexbox:
#Login {
display: flex;
align-items: center;
}
Certains navigateurs auront besoin de préfixes de fournisseur. Pour les navigateurs plus anciens ne prenant pas en charge flexbox (par exemple, IE 9 et inférieur), vous devez implémenter une solution de secours à l'aide de l'une des anciennes méthodes .
Lecture recommandée
Cela peut être fait avec 3 lignes de CSS et est compatible avec (y compris) IE9:
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
Exemple: http://jsfiddle.net/cas07zq8/
Vous pouvez aligner verticalement un div dans un autre div. Voir cet exemple sur JSFiddle ou considérez l'exemple ci-dessous.
HTML
<div class="outerDiv">
<div class="innerDiv"> My Vertical Div </div>
</div>
CSS
.outerDiv {
display: inline-flex; // <-- This is responsible for vertical alignment
height: 400px;
background-color: red;
color: white;
}
.innerDiv {
margin: auto 5px; // <-- This is responsible for vertical alignment
background-color: green;
}
La marge du .innerDiv
doit être au format suivant: margin: auto *px;
[Où, *
est la valeur souhaitée.]
display: inline-flex
est pris en charge par les derniers navigateurs (mis à jour/version actuelle) avec prise en charge de HTML5.
Cela peut ne pas fonctionner dans Internet Explorer: P :)
Essayez toujours de définir une hauteur pour toute div alignée verticalement (c'est-à-dire innerDiv) pour contrer les problèmes de compatibilité.
Je suis assez tard pour la fête, mais je l’ai moi-même inventé et c’est l’un de mes raccourcis favoris pour l’alignement vertical. C'est simple et facile de comprendre ce qui se passe.
Vous utilisez l'attribut :before
css pour insérer un div au début du div parent, donnez-lui display:inline-block
et vertical-align:middle
, puis donnez les mêmes propriétés au div enfant. Puisque vertical-align
est destiné à l’alignement le long d’une ligne, ces divs en ligne seront considérés comme une ligne.
Faites le :before
div height:100%
, et le div enfant suivra et alignera automatiquement au milieu d'une très "grande" ligne.
.parent:before, .child {
display:inline-block;
vertical-align:middle;
}
.parent:before {
content:""; // so that it shows up
height:100%; // so it takes up the full height
}
Voici un violon pour démontrer de quoi je parle. La div de l'enfant peut avoir n'importe quelle hauteur et vous ne devez jamais modifier ses marges/paddings.
Et voici un violon plus explicatif .
Si vous n'aimez pas :before
, vous pouvez toujours mettre manuellement un div.
<div class="parent">
<div class="before"></div>
<div class="child">
content
</div>
</div>
Et puis réaffectez simplement .parent:before
à .parent .before
Si vous connaissez la hauteur, vous pouvez utiliser le positionnement absolu avec un margin-top
négatif comme suit:
#Login {
width:400px;
height:400px;
position:absolute;
top:50%;
left:50%;
margin-left:-200px; /* width / -2 */
margin-top:-200px; /* height / -2 */
}
Sinon, il n'y a pas vraiment de moyen de centrer verticalement un div avec juste du CSS
Le commentaire de @ GáborNagy sur un autre billet était la solution la plus simple que j'ai pu trouver et a fonctionné comme un charme pour moi, car il a apporté un faux-violon que je copie ici avec un petit ajout:
CSS:
#wrapper {
display: table;
height: 150px;
width: 800px;
border: 1px solid red;
}
#cell {
display: table-cell;
vertical-align: middle;
}
HTML:
<div id="wrapper">
<div id="cell">
<div class="content">
Content goes here
</div>
</div>
</div>
Si vous souhaitez également l'aligner horizontalement, vous devrez ajouter une autre div "inner-cell" à l'intérieur de la "cellule" div et lui donner le style suivant:
#inner-cell{
width: 250px;
display: block;
margin: 0 auto;
}
J'ai trouvé ce site utile: http://www.vanseodesign.com/css/vertical-centering/ Cela a fonctionné pour moi:
HTML
<div id="parent">
<div id="child">Content here</div>
</div>
CSS
#parent {
padding: 5% 0;
}
#child {
padding: 10% 0;
}
Dans mon Firefox et Chrome fonctionnent ceci:
CSS:
display: flex;
justify-content: center; // vertical align
align-items: center; // horizontal align
J'avais besoin de spécifier min-height
#login
display: flex
align-items: center
justify-content: center
min-height: 16em
À moins que le div aligné ne soit à hauteur fixe, essayez d’utiliser le CSS suivant pour le div aligné:
{
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: table;
}
L'alignement vertical a toujours été délicat.
Ici, j'ai couvert une méthode d'alignement vertical d'un div.
<div style="display:flex;">
<div class="container table">
<div class="tableCell">
<div class="content"><em>Table</em> method</div>
</div>
</div>
<div class="container flex">
<div class="content new"><em>Flex</em> method<br></div>
</div>
<div class="container relative">
<div class="content"><em>Position</em> method</div>
</div>
<div class="container margin">
<div class="content"><em>Margin</em> method</div>
</div>
</div>
em{font-style: normal;font-weight: bold;}
.container {
width:200px;height:200px;background:#ccc;
margin: 5px; text-align: center;
}
.content{
width:100px; height: 100px;background:#37a;margin:auto;color: #fff;
}
.table{display: table;}
.table > div{display: table-cell;height: 100%;width: 100%;vertical-align: middle;}
.flex{display: flex;}
.relative{position: relative;}
.relative > div {position: absolute;top: 0;left: 0;right: 0;bottom: 0;}
.margin > div {position:relative; margin-top: 50%;top: -50px;}
J'ai trouvé un moyen qui fonctionne très bien pour moi. Le script suivant insère une image invisible (identique à bgcolor ou un gif transparent) avec une hauteur égale à la moitié de la taille de l'espace blanc à l'écran. L'effet est un alignement vertical parfait.
Supposons que vous avez un en-tête div (hauteur = 100) et un pied de page div (hauteur = 50) et que le contenu de la div principale que vous souhaitez aligner a une hauteur de 300:
<script type="text/javascript" charset="utf-8">
var screen = window.innerHeight;
var content = 150 + 300;
var imgheight = ( screen - content) / 2 ;
document.write("<img src='empty.jpg' height='" + imgheight + "'>");
</script>
Vous placez le script juste avant le contenu que vous souhaitez aligner!
Dans mon cas, le contenu que j'aimais aligner était une image (largeur = 95%) avec un rapport de format de 100: 85 (largeur: hauteur). Signifiant que la hauteur de l'image correspond à 85% de sa largeur. Et la largeur étant 95% de la largeur de l'écran.
J'ai donc utilisé:
var content = 150 + ( 0.85 * ( 0.95 * window.innerWidth ));
Combinez ce script avec
<body onResize="window.location.href = window.location.href;">
et vous avez un alignement vertical lisse.
J'espère que cela fonctionne pour vous aussi!
si vous utilisez une hauteur fixe, vous pouvez utiliser padding-top selon vos besoins en matière de conception .. ou vous pouvez utiliser top: 50% si nous utilisons div, l'alignement vertical ne fonctionne pas, nous utilisons donc le rembourrage en haut ou la position en fonction des besoins.
le moyen le plus simple de centrer votre élément div consiste à utiliser cette classe avec les propriétés suivantes.
.light {
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
}
Centrer les éléments enfants dans un div. Cela fonctionne pour toutes les tailles d'écran
#parent {
padding: 5% 0;
}
#child {
padding: 10% 0;
}
<div id="parent">
<div id="child">Content here</div>
</div>
pour plus de détails, vous pouvez visiter ce lien