彻底研究 CSS ——段落的垂直对齐
文章目录
如果文字内容只有一行,可以设置 line-height 与height 相同来使文字垂直居中。
* css 代码:
1 2 3 4 5 6 7 8 |
.one_line { width: 500px; height: 100px; line-height: 100px; background-color: #9bd; margin: 20px; padding: 20px; } |
* html 代码:
1 2 3 |
<div class="one_line"> 这是一行文字内容的垂直对齐 </div> |
* 效果:
但是对于超过一行的文本,或者浏览器窗口变窄的情况话,设置 line-height 的方法就不起作用了。怎么样才能有效解决未知高度的垂直居中问题(在一个DIV标签里有未知高度的文本或图片的情况下)。下面是解决该问题比较完善的一个解决方案。
在标准浏览器(Mozilla, Opera, Safari 等)中,可将父级元素显示方式设定为 table(display: table;),内部子元素定为 table-cell(display: table-cell;),通过 vertical-align(vertical-align: middle;)特性使其垂直居中,但非标准浏览器是不支持的。
在非标准浏览器(IE)中,只能在子元素里设距顶部 50%,里面再套个元素距顶部 -50% 来实现垂直居中。
* css 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
.more_line { width: 500px; height: 100px; background-color: #9bd; margin: 20px; padding: 20px; } .outer { display: table; overflow: hidden; position: relative; } .middle { display: table-cell; vertical-align: middle; position: absolute; top: 50%; } .inner { position: relative; top: -50%; } |
* html 代码:
1 2 3 4 5 6 7 |
<div class="outer more_line"> <div class="middle"> <div class="inner"> 这是多行文字内容的垂直对齐。这是多行文字内容的垂直对齐。这是多行文字内容的垂直对齐。 </div> </div> </div> |
* 效果:
由于需要每次都加入三个 div,和 css 样式,比较复杂也不好记,在这里,可以利用 jquery 将其自定义为插件的方式以方便调用。
插件名称为:jquery.verticalCenter.js,使用的时候用$(“.vc”).verticalCenter();
* jquery-verticalCenter.js 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
;(function($) { $.fn.extend({ verticalCenter: function() { return this.each(function() { var _html = $(this).html(); $(this).attr("style", "display:table;\#position:relative;overflow:hidden;"); var html = "<div style='\#position:absolute;\#top:50%;display:table-cell;vertical-align:middle;'>"; html += "<div style='\#position:relative;\#top:-50%;'>"; html += _html; html += "</div>"; html += "</div>"; $(this).html(html); $("img", $(this)).css("vertical-align", "middle"); $("input", $(this)).css("vertical-align", "middle"); }); } }); })(jQuery); |
例子:
* html 代码:
1 2 3 4 5 6 7 8 |
<div class="vc"> 这是多行文字内容使用 jquery-plugin 的垂直对齐。这是多行文字内容使用jquery-plugin 的垂直对齐。 </div> <div class="vc test_img"> <img src="test.gif" /> <input type="text" /> 这是混合的使用 jquery-plugin 的垂直对齐。 </div> |
* javascript 代码:
1 2 3 4 5 6 7 8 |
<script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.verticalCenter.js"></script> <script type="text/javascript"> $(function() { $(".vc").verticalCenter(); }); </script> |
* 效果:
文章作者 wenzhixin
上次更新 2012-05-06