css中垂直水平居中的方式有哪些 CSS之垂直水平居中的背后
最开始,我想说,这个体系有点大,我写的并不好。就当作是一个思路吧,虽然这个思路有点乱。几乎每一个实现方案的背后都是该属性及其组合的原理,每一个都要剖析其规范细节的话,这篇文章绝不会是这样的篇幅,所以每
顺晟科技
2022-09-14 10:52:01
336
这部分网上教程说的较多,不多说了,放上代码存档。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>无标题文档</title>
6 <style type="text/css">
7 body{
8 font-size:12px;
9 }
10 #table1{
11 border-collapse:collapse;
12 }
13 #table1 td,th{
14 border: 1px #666 solid;
15 }
16 /*hack*/
17 div#wrap {
18 display:table;
19 border:1px solid #FF0099;
20 background-color:#FFCCFF;
21 width:760px;
22 height:400px;
23 _position:relative;
24 *position:relative;
25 overflow:hidden;
26 }
27 div#subwrap {
28 vertical-align:middle;
29 display:table-cell;
30 _position:absolute;
31 _top:50%;
32 *position:absolute;
33 *top:50%;
34 }
35 div#content {
36 _position:relative;
37 _top:-50%;
38 }
39 /*hack*/
40 </style>
41 </head>
42
43 <body>
44 <h1>单行文本垂直居中</h1>
45 <div style="border:2px #666 solid; background:#CCC; height:60px; line-height:60px; text-align:center;">
46 单行文本居中比较简单,只要容器的line-height和height等高即可。 height:60px; line-height:60px;
47 </div>
48 <hr />
49 <h1>多行文本垂直居中</h1>
50 <h2>approach1<blockquote>使用table布局</blockquote></h2>.
51 table布局简单易操作
52 <table id="table1" cellpadding="0">
53 <tr>
54 <td height="60px" valign="top">垂直顶部</td>
55 <td valign="middle">垂直居中,使valign="middle"属性</td>
56 <td style=" vertical-align:bottom">垂直底部,使style=" vertical-align:bottom"属性</td>
57 </tr>
58 </table>
59 <hr />
60 <h2>approach2<blockquote>父容器高度不定</blockquote></h2>
61 <div style=" border:1px #666 solid; background: #CCC; padding:30px;">
62 <p>父容器高度不定的情况下,使用padding是非常方便的做法</p>
63 <p>padding:30px;</p>
64 </div>
65 <hr />
66 <h2>approach3<small>父容器高度固定</small></h2>
67 <div style="border:1px #666 solid; background: #CCC; height:100px; display:table;">
68 <div style="border:1px #F00 solid; background:#FFCCFF; display:table-cell; vertical-align:middle;">
69 父容器的父容器height:100px; display:table;<br/>
70 f父容器display:table-cell; vertical-align:middle;<br/>
71 CSS中有一个display属性能够模拟<table>,可以使用这个属性来让<div>模拟<table>,这样就可以使用vertical-align了。<br/>注意,display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个<div>元素。
72 </div>
73 </div>
74 <hr />
75 <h2>approach3<small>使用绝对定位法</small></h2>
76 <div style="border:1px solid #FF0099; background-color:#FFCCFF; height:150px; position:relative;">
77 <div style="position:absolute; top:50%;">
78 <div style="border:1px solid #000; position:relative; top:-50%;">
79 使用绝对定位法实现多行文本垂直居中<br/>
80 height:100px; position:absolute; top:50%; margin-top:-50px;<br />
81 如果我们对subwrap进行了绝对定位,那么content也会继承了这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中ernet Explorer 6,7中的垂直居中:<br/>
82 没有足够空间时,content 会消失(类似div 在 body 内,当用户缩小浏览器窗口,滚动条不出现的情况)
83 </div>
84 </div>
85 </div>
86 <div style="border:1px solid #FF0099; background-color:#FFCCFF; height:80px; position:relative;">
87 <div style="position:absolute; top:50%;">
88 <div style="border:1px solid #000; position:relative; top:-50%;">
89 使用绝对定位法实现多行文本垂直居中<br/>
90 height:100px; position:absolute; top:50%; margin-top:-50px;<br />
91 如果我们对subwrap进行了绝对定位,那么content也会继承了这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中ernet Explorer 6,7中的垂直居中:<br/>
92 没有足够空间时,content 会消失(类似div 在 body 内,当用户缩小浏览器窗口,滚动条不出现的情况)
93 </div>
94 </div>
95 </div>
96 <hr />
97 <h2>approach4<small>hackv</small></h2>
98 <div id="wrap">
99 <div id="subwrap">
100 <div id="content">
101 <pre>现在我们要使这段文字垂直居中显示!
102 </pre>
103 </div>
104 </div>
105 </div>
106 </body>
107 </html>
至于float导致盒子模型超出标准流,以前不太明白,趁机写个代码强化一下。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>无标题文档</title> 6 </head> 7 8 <body> 9 <div style="background:#FFF; width:760px;"> 10 <div style="width:100%; height:30px; background:#F6F;">header</div> 11 <div style="width:30%; height:100px; float:left; background:#CCC;">div1</div> 12 <div style="width:40%; height:150px; float:left; background:#3C6;">div2</div> 13 <div style="width:30%; height:80px; float:left; background:#630;">div3</div> 14 <div style="clear:both"></div> 15 <div style="width:100; height:50px; background:#C36;">footer</div> 16 </div> 17 </body> 18 </html>View Code
19
2022-10
15
2022-10
15
2022-09
15
2022-09
14
2022-09
14
2022-09