Maison >interface Web >tutoriel CSS >Tutoriel CSS : plusieurs méthodes de centrage vertical des divs

Tutoriel CSS : plusieurs méthodes de centrage vertical des divs

高洛峰
高洛峰original
2017-03-13 17:50:421327parcourir

Cet article présente principalement en détail les différentes méthodes de centrage vertical de p dans le didacticiel CSS, y compris la méthode de centrage vertical du texte multiligne. Les amis intéressés peuvent s'y référer

en parle quand il s'agit. à cette question, certaines personnes peuvent demander s'il existe un attribut vertical-align en CSS pour définir le centrage vertical ? Même si certains navigateurs ne le supportent pas, il me suffit de faire un peu de technologie CSS Hack ! Je dois donc dire quelques mots ici. Il existe bien un attribut d'alignement vertical en CSS, mais il ne prend effet que pour les éléments avec l'attribut valign dans l'élément (X)HTML, comme < dans ;td>, b4d429308760b6c2d20d6300079ed38e, 63bd76834ec05ac1f4c0ebbeaafb0994, etc. Des éléments comme e388a4556c0f65e1904146cc1a846bee, 45a2772a6b6107b401db3c9b82c049c2 n'ont pas d'attributs valign, donc l'utilisation de l'alignement vertical ne fonctionnera pas sur eux.

1. Centrage vertical sur une seule ligne

S'il n'y a qu'une seule ligne de texte dans un conteneur, il est relativement simple de la centrer. sa hauteur réellehauteur peut être égale à la hauteur de la ligne hauteur de la ligne.

Par exemple :

p {      
        height:25px;      
        line-height:25px;      
        overflow:hidden;      
 }

Ce code est très simple. Le paramètre overflow:hidden est utilisé ultérieurement pour empêcher le contenu de dépasser le conteneur ou le retour à la ligne automatique, de sorte que le centrage vertical. l'effet ne peut pas être obtenu.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> 单行文字实现垂直居中 </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
 body { font-size:12px;font-family:tahoma;}   
 p {   
  height:25px;   
  line-height:25px;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
 }   
  </style>
 </head>
 <body>
  <p>现在我们要使这段文字垂直居中显示!</p>
 </body>
</html>


2. Centrage vertical d'un texte multiligne de hauteur inconnue

Si un élément de contenu , sa hauteur est variable, alors nous pouvons utiliser la dernière méthode utilisée pour obtenir un centrage horizontal mentionnée dans la section précédente, qui consiste à définir Padding de sorte que les valeurs de remplissage supérieure et inférieure soient les mêmes. Encore une fois, c'est une façon de "regarder" le centrage vertical, c'est juste une façon de faire en sorte que le texte remplisse complètement le e388a4556c0f65e1904146cc1a846bee. Vous pouvez utiliser un code similaire à celui-ci :

p {      
 padding:25px;      
}

L'avantage de cette méthode est qu'elle peut s'exécuter sur n'importe quel navigateur, et le code est très simple, mais la condition préalable à l'application de cette méthode est que la hauteur du conteneur doit être rétractable.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> 多行文字实现垂直居中 </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
 body { font-size:12px;font-family:tahoma;}   
 p {   
  padding:25px;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
 }   
  </style>
 </head>
 <body>
  <p><pre class="brush:php;toolbar:false">现在我们要使这段文字垂直居中显示!   
   p {   
  padding:25px;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
 }   

3. Centrage à hauteur fixe du texte multiligne

Au début de cet article, nous avons déjà parlé du vertical- attribut align en CSS Cela ne fonctionnera que sur la (X) balise HTML avec l'attribut valign, mais il existe également un attribut display en CSS qui peut simuler f5d188ed2c074f8b944552db028f98a1, donc nous pouvons utiliser cet attribut pour laisser e388a4556c0f65e1904146cc1a846bee simuler f5d188ed2c074f8b944552db028f98a1 et vous pouvez utiliser l'alignement vertical. Notez que lorsque vous utilisez display:table et display:table-cell, le premier doit être défini sur l'élément parent et le second doit être défini sur l'élément enfant, nous devons donc ajouter un autre élément e388a4556c0f65e1904146cc1a846bee doit être positionné :

p#wrap {      
    height:400px;      
 display:table;      
}      
p#content {      
  vertical-align:middle;      
    display:table-cell;      
   border:1px solid #FF0099;      
 background-color:#FFCCFF;      
 width:760px;      
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> 多行文字实现垂直居中 </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
 body { font-size:12px;font-family:tahoma;}   
 p#wrap {   
  height:400px;   
  display:table;   
 }   
 p#content {   
  vertical-align:middle;   
  display:table-cell;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
 }   
  </style>
 </head>
 <body>
 <p id="wrap">
  <p id="content"><pre class="brush:php;toolbar:false">现在我们要使这段文字垂直居中显示! Webjx.Com    
 p#wrap {   
  height:400px;   
  display:table;   
 }   
 p#content {   
  vertical-align:middle;   
  display:table-cell;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
 }   


Cette méthode devrait être idéale, mais malheureusement Internet Explorer 6 ne comprend pas correctement display:table et display:table-cell . Par conséquent, cette méthode n’est pas valide dans Internet Explorer 6 et versions antérieures. Eh bien, c'est déprimant ! Mais nous avons d'autres méthodes


4. Solution dans Internet Explorer

Dans Internet Explorer 6 et inférieur, il y a des failles dans le calcul de la hauteur. Après avoir positionné l'élément parent dans Internet Explorer 6, si le calcul du pourcentage est effectué sur l'élément enfant, la base de calcul semble être héritée (si la valeur de positionnement est une valeur absolue, ce problème n'existe pas, mais en utilisant la base de calcul du pourcentage will Ce n'est plus la hauteur de l'élément, mais la hauteur de positionnement héritée de l'élément parent). Par exemple, nous avons l'extrait de code (X)HTML suivant :

<p id="wrap">     
 <p id="subwrap">     
   <p id="content">     
 </p>     
</p>   
</p>

Si nous effectuons un positionnement absolu sur le sous-enveloppe, alors le contenu héritera également de cet attribut, même s'il le fera ne s'affichera pas immédiatement sur la page, mais si vous positionnez le contenu de manière relative, le ratio de 100 % que vous utilisez ne sera plus la hauteur d'origine du contenu. Par exemple, nous définissons la position du sous-enveloppement à 40 %. Si nous voulons que le bord supérieur du contenu coïncide avec l'enveloppement, nous devons définir top : -80 % ; , si nous définissons top:50% de subwrap, nous devons utiliser 100% pour remettre le contenu à sa position d'origine, mais que se passe-t-il si nous définissons également le contenu à 50% ? Ensuite, il est exactement centré verticalement. On peut donc utiliser cette méthode pour réaliser un centrage vertical dans Internet Explorer 6 :


p#wrap {      
    border:1px solid #FF0099;      
 background-color:#FFCCFF;      
 width:760px;      
  height:400px;      
 position:relative;      
}      
p#subwrap {      
  position:absolute;      
    border:1px solid #000;      
    top:50%;      
}      
p#content {      
    border:1px solid #000;      
    position:relative;      
    top:-50%;      
}


当然,这段代码只能在Internet Exlporer 6等计算存在问题的浏览器中才会有作用。(不过我不解,我查阅了很多文章,不知道是因为出处相同还是什么原因,似乎很多人都不愿意去解释Internet Exlporer 6中这这个Bug的原理,我也只是了解了一点皮毛,还要再研究)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> 多行文字实现垂直居中 </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
 body { font-size:12px;font-family:tahoma;}   
 p#wrap {   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
  height:400px;   
  position:relative;   
 }   
 p#subwrap {   
  position:absolute;   
  top:50%;   
 }   
 p#content {   
  position:relative;   
  top:-50%;   
 }   
  </style>
 </head>
 <body>
 <p id="wrap">
  <p id="subwrap">
   <p id="content"><pre class="brush:php;toolbar:false">现在我们要使这段文字垂直居中显示!   
 p#wrap {   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
  height:500px;   
  position:relative;   
 }   
 p#subwrap {   
  position:absolute;   
  border:1px solid #000;   
  top:50%;   
 }   
 p#content {   
  border:1px solid #000;   
  position:relative;   
  top:-50%;   
 }

五、完美的解决方案


那么我们综合上面两种方法就可以得到一个完美的解决方案,不过这要用到CSS hack的知识。对于如果使用CSS Hack来区分浏览器,你可

以参考这篇“简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera”:

p#wrap {      
    display:table;      
    border:1px solid #FF0099;      
 background-color:#FFCCFF;      
 width:760px;      
  height:400px;      
 _position:relative;      
   overflow:hidden;      
}      
p#subwrap {      
    vertical-align:middle;      
    display:table-cell;      
   _position:absolute;      
   _top:50%;      
}      
p#content {      
   _position:relative;      
   _top:-50%;      
}


至此,一个完美的居中方案就产生了。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> 多行文字实现垂直居中 </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style type="text/css">
 body { font-size:12px;font-family:tahoma;}   
 p#wrap {   
  display:table;   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
  height:400px;   
  _position:relative;   
  overflow:hidden;   
 }   
 p#subwrap {   
  vertical-align:middle;   
  display:table-cell;   
  _position:absolute;   
  _top:50%;   
 }   
 p#content {    
  _position:relative;   
  _top:-50%;   
 }   
  </style>
 </head>
 <body>
 <p id="wrap">
  <p id="subwrap">
   <p id="content"><pre class="brush:php;toolbar:false">现在我们要使这段文字垂直居中显示!   
 p#wrap {   
  border:1px solid #FF0099;   
  background-color:#FFCCFF;   
  width:760px;   
  height:500px;   
  position:relative;   
 }   
 p#subwrap {   
  position:absolute;   
  border:1px solid #000;   
  top:50%;   
 }   
 p#content {   
  border:1px solid #000;   
  position:relative;   
  top:-50%;   
 }


以上就是本文的全部内容,希望对大家的学习有所帮助。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn