CSS: horizontal centering vs. vertical centering_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:45:40
Original
1093 people have browsed it

CSS centering is a relatively basic issue. In actual application, there are generally two situations that need to be considered. One is mainly the centering of inline elements such as text and pictures; This refers to the centering of block-level label elements such as divs.

Horizontally centered

1. Inline elements

Inline elements (mainly expressed as text, pictures and other inline elements), through the parent element Setting text-align:center centers child inline elements.

2. Fixed-width block-level elements

Set for fixed-width block-level elements:

1 margin-left:auto;2 margin-right:auto;
Copy after login

3. Block-level elements with variable width

There are three ways to center block-level elements with variable width:

  1. Add to table Tag
  2. Set display:inline method
  3. Set position:relative and left:50%

Method 1:

Wrap elements with table tags, including tbody, tr, and td, but this method adds unsemantic tags for centering.

---------------------------------- --------------------------Give me a chestnut-------------------------- ----------------------------------

HTML:

 1 <div> 2   <table> 3     <tbody> 4       <tr> 5         <td> 6            <ul> 7               <li><a href="#">我是要</a></li> 8               <li><a href="#">居中的</a></li> 9               <li><a href="#">ul标签</a></li>10            </ul>11         </td>12       </tr>13     </tbody>14   </table>15 </div>
Copy after login

CSS:

1 table{2     margin:0 auto;3 }4 ul{list-style:none;margin:0;padding:0;}5 li{float:left;margin-right:8px;}
Copy after login

Modern browsers behave normally:

IE7 sometimes Problems will occur:

--------------------- ----------------------------------After eating the chestnuts------ -------------------------------------------------- -

Method 2:

After setting the inline element to inline, continue to use the method of centering the inline element. This method Changed the display style of the element.

-------------------------------- --------------------------Give me a chestnut---------------- ----------------------------------------

HTML:

1 <div>2     <ul>3        <li><a href="#">我是要</a></li>4        <li><a href="#">居中的</a></li>5        <li><a href="#">ul标签</a></li>6   </ul>7 </div>
Copy after login

CSS:

1 div{2   text-align:center;3 }4 ul{list-style:none;margin:0;padding:0;display:inline;}5 li{margin-right:8px;display:inline;}
Copy after login

Each browser behaves normally and centered, and IE7 has no problems.

---------------------------------- ---------------------------After eating the chestnuts------------------ -------------------------------------

Method three:

By setting float/display:inline-block on the parent element (IE7 does not have good support for setting inline-block on block-level elements and requires a hack, that is, *display:inline ;*zoom:1;), then set position:relative and left:50% for the parent element, and set position:relative and left:-50% for the child element to achieve horizontal centering.

-------------------------------- --------------------------Give me a chestnut---------------- ----------------------------------------

HTML:

1 <div>2     <ul>3        <li><a href="#">我是要</a></li>4        <li><a href="#">居中的</a></li>5        <li><a href="#">ul标签</a></li>6     </ul>7 </div>
Copy after login

CSS:

 1 div{ 2     display: inline-block; 3     /*兼容IE6,IE7*/ 4     *display: inline; 5     *zoom:1; 6     position:relative; 7     left:50% 8 } 9 ul{10     /*兼容IE6*/11     _display: inline;12     _zoom:1;13     list-style:none;14     margin:0;15     padding:0; 16     position:relative;17     left:-50%;18 }19 li{20     float:left;21     margin-right:8px;22 }
Copy after login

chrome, Firefox, opera, IE6 can all behave normally.

Note:

1、_display:inline 其实是触发IE6中块级元素表现出 inline-block 的效果,_zoom:1 触发IE6中 hasLayout 效果,这里其他浏览器不需要触发 inline-block 效果,原因不是很清楚;

2、其中display:inline-block 也可以替换为 float ,float的主要作用就是产生 inline-block 的效果,这样代码会更加简洁一些,不用考虑太多的兼容问题:

CSS:

 1 div{ 2     float: left; 3     position:relative; 4     left:50% 5 } 6 ul{ 7     /*兼容IE6*/ 8     _float:left; 9     list-style:none;10     margin:0;11     padding:0; 12     position:relative;13     left:-50%;14 }15 li{16     float:left;17     margin-right:8px;18 }
Copy after login

---------------------------------------------------------吃完栗子---------------------------------------------------------

垂直居中

垂直居中主要是行内元素的居中比较麻烦,特别是多行文本的居中。

1、父元素高度确定的 行内元素(单行文本),

通过设置父元素的 height 和 line-height 高度一致来实现的。

2、高度固定的 块级元素垂直居中

高度固定的 块级元素垂直居中有三种方法:

  1. 垂直居中元素设置 absolute,利用 absolute 元素居中的方法来居中;
  2. 垂直居中元素设置 absolute,通过 top 和 margin-top 属性来调整;
  3. 创建浮动元素;

方法一:

其实这个方法是 absolute 元素居中的方法,父元素设置 position:relative,垂直居中元素设置 position:absolute,当要垂直居中时,设置 top:0;bottom:0,然后为上下 margin 设置 auto,水平居中也是同理。IE6,IE7不支持此种居中方法。

这种方法适用于原本就设置了 position 为 absolute 的元素。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">2   <div class="container">3      <p>我是想要垂直居中的块级元素。</p>4   </div>5 </div>
Copy after login
Copy after login

CSS:

 1 .wrap{ 2     width:200px; 3     height: 200px; 4     background:#ccc; 5     position: relative; 6 } 7 .container{ 8     width: 100px; 9     height:100px;10     background: #00ff00;11     position:absolute; 12     right: 0;13     left:0;14     top:0; 15     bottom:0; 16     margin:auto; 17 }
Copy after login

chrome,Firefox,opera,IE8+表现如下,水平垂直居中:

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法二:

父元素设置 position:relative,需要垂直居中的元素设置:

1 position:absolute;2 top:50%;3 height:2Hpx;4 margin-top:Hpx;
Copy after login

这里 top改为 bottom,margin-top 改为 margin-bottom 效果一样,这种方法适用于原本设置了 position 为 absolute 的元素。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">2   <div class="container">3      <p>我是想要垂直居中的块级元素。</p>4   </div>5 </div>
Copy after login
Copy after login

CSS:

 1 .wrap{ 2   width:100px; 3   height: 200px; 4   background:#ccc; 5   position: relative; 6 } 7 .container{ 8     position:absolute;  9     top:50%; 10     height:100px; 11     margin-top:-50px; /* 高度的一半 */ 12     background: #00ff00;13 }
Copy after login

chrome,Firefox,opera,IE6+都能够居中:

IE6 由于 3px bug表现稍微不同,不过由于这里主要讨论垂直居中,所以就不对其作过多留意。

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法三:

在需要垂直居中的元素前创建浮动元素,浮动元素设置 margin-bottom 为垂直居中元素高度的一半,高度为父元素高度的一半,为了兼容IE6、IE7,还需要象征性地设置一下 width。垂直居中元素 清除浮动。但是这个方法创建了无语义的标签,还要做一些兼容性的处理。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div class="wrap">2     <div class="floatdiv"></div>  3     <div class="container">4         <p>我是想要垂直居中的块级元素。</p>5     </div>6 </div>
Copy after login

CSS:

 1 .wrap{ 2     width: 100px; 3     height: 200px; 4     background: #ccc; 5 } 6 .floatdiv { 7     *width: 1px;/*兼容IE6、IE7*/ 8     float:left;  9     height:50%; 10     margin-bottom:-50px;11 }12 .container {13     clear:both; 14     height:100px; 15     position:relative;16     background: #00ff00;17 }
Copy after login

chrome,Firefox,opera,IE6+都能够居中:

---------------------------------------------------------吃完栗子---------------------------------------------------------

3、父元素高度确定的 行内元素多行文本、图片)、块状元素

父元素高度确定的 行内元素多行文本、图片)、块状元素垂直居中有两种方法

  1. 加入table标签;
  2. 设置 display 为 table-cell,激活 vertical-align 属性。

方法一:

使用插入 table (包括tbody、tr、td)标签,同时设置 vertical-align:middle。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

 1 <table> 2   <tbody> 3     <tr> 4       <td class="wrap"> 5         <div> 6           <p>我是想要垂直居中的一段文字。</p> 7         </div> 8       </td> 9     </tr>10   </tbody>11 </table>
Copy after login

CSS:

1 .wrap{2    width:100px;3    height:200px;4    background:#ccc5 }
Copy after login

chrome,Firefox,opera,IE6+表现如下:

注:

1、因为 td 标签默认情况下就默认设置了 vertical-align 为 middle,所以我们不需要显式地设置了;

2、将 div 换为 img 效果一致。

---------------------------------------------------------吃完栗子---------------------------------------------------------

方法二:

在 chrome、Firefox 、opera、IE8 及以上的浏览器下可以设置块级元素的 display 为 table-cell,激活 vertical-align 属性,但注意 IE6、7 并不支持这个样式。

---------------------------------------------------------举个栗子---------------------------------------------------------

HTML:

1 <div>2   <p>我是想要垂直居中的一段文字。</p>3 </div>
Copy after login

CSS:

1 div{2   width:100px;3   height:200px;4   background:#ccc;5   display:table-cell;6   vertical-align:middle;7 }
Copy after login

chrome、Firefox 、opera、IE8 及以上的浏览器表现正常,IE6 和 IE7 则无法居中。

---------------------------------------------------------吃完栗子---------------------------------------------------------

垂直居中的方法比较多,至于用哪种方法还是要具体看情况,而且我相信还有更多的方法,欢迎大家补充。

 

 水平有限,错误欢迎指正。原创博文,转载请注明出处。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template