`
block
  • 浏览: 42499 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Css实现水平垂直居中

    博客分类:
  • Web
阅读更多
  • 问题:假设有一个div,高宽都为200px,如何使得div内的内容水平居中?
    很简单,设置该div的style.textAlign为center。
    <div style="text-align:center;width:200px;height:200px;border:1px solid black;">
     水平居中示例。
    </div>
    水平居中示例。
  • 问题:假设有一个div,高宽都为200px,如何使得div内的内容垂直居中?

    使用table的话,解决这个问题相当简单。
    <table width="200" height="200" style="border:1px solid black;">
     <tr>
      <td valign="middle">哈哈哈</td>
     </tr>
    </table>
    使用Table垂直居中

    <table width="200" height="200" style="border:1px solid black;">
     <tr>
      <td valign="middle"><img src="http://www.google.cn/images/nav_logo3.png"/></td>
     </tr>
    </table>

    <table width="200" height="200" style="border:1px solid black;">
     <tr>
      <td valign="middle">
       <div>
       使用Table垂直居中<br />
       使用Table垂直居中<br />
       使用Table垂直居中<br />
       </div>
      </td>
     </tr>
    </table>
    使用Table垂直居中
    使用Table垂直居中
    使用Table垂直居中

    若不使用table,这个问题则有些复杂。
    如果只考虑某一个浏览器,也不会复杂到哪里去,但若考虑兼容所有浏览器,需要下一定的功夫。
    由于Html元素我们可以分为三种:非可替换元素(如span、label等)、可替换元素(img)、块元素(div)。
    我们可以把这个问题分成简单的三个问题。
    1. div中只有文字,高度宽度未知。
    2. div中只有图片,高度宽度未知。(但图片大小小于div。)
    3. div中还有一个div,高度宽度已知。
    第一个问题,可以使用line-height等于该div的高度来解决,这样会限制该div内只能有一行文字。
    <div style="width:200px;height:200px;border:1px solid black;line-height:200px;">
     文字的垂直居中。
    </div>
    文字的垂直居中。
    对于多行文字的div,纯css实现目前比较无奈,IE应该是没有办法做到。
    不过IE提供了expression,可以在这里面写一些js脚本,再加上position的relative和absolute,可以搞定多行文字的垂直居中。
    display的table和table-cell,FF是支持的。可以实现多行文字的垂直居中。
    下面代码中的_position、_left、_top的写法是专门针对IE的。
    <div style="width: 300; height: 200;border:1px solid #C0C0C0;_position:relative;display:table;">
    	<div style="text-align:center;display:table-cell;_position: absolute;_top:expression((this.parentNode.offsetHeight-this.offsetHeight)/2);_left:expression((this.parentNode.offsetWidth-this.offsetWidth)/2);vertical-align:middle;">
    		多行文字
    		<br />
    		垂直居中
    	</div>
    </div>
    多行文字
    垂直居中

    第二个问题,针对非IE浏览器,我们可以使用WEB标准里面的display:table-cell;vertical-align;middle;来解决。
    针对IE浏览器,则可以使用font-size的hack来解决。
    <div style="width:200px;height:200px;border:1px solid black;line-height:200px;display: table-cell;vertical-align:middle;*display: block;*font-size:175px;*font-family:Arial;">
     <img src="http://www.google.cn/images/nav_logo3.png" style="vertical-align:middle;"/>
    </div>
    注意这里font-size的大小不是200px,这是因为IE对字体大小的算法与html元素的算法不同。
    一般情况下,这个font-size约为高度的0.873,本例为200*0.873 约为175。
    *font-family:Arial;是防止非utf-8引起的hack失效问题,如gbk编码。

    第三个问题,若html文件添加了doctype,则可以使用margin:auto;来解决。
    但是我们考虑的是一般情况下,这个问题该如何解决。则此方案被否决。
    若是该div的宽度和高度都是未知的,我目前也想纯CSS的方法来解决这个问题,而且这种场景,个人认为相对较少。
    这种情况下,我们可以使用negative margin来解决这个问题,也就是说使用负值的Margin来解决这个问题。

    negative margin的概念一开始比较难理解。
    可以这么考虑一下,margin-top:20px;使得div的显示往下移动20px的距离。
    而margin-top:-20px;则会使得div的显示往上移动20px的距离。

    看到这里可能还没明白negative margin对我们来说有什么意义。
    对,仅仅使用negative margin对我们来说就是没有任何作用。
    若配合使用left:50%;top:50%;,则你就可以理解negative margin的意义了。
    没错。只要我们margin-top、margin-bottom分别设置为内部该div的高度的一半的负值,div可以达到垂直居中的效果。
    margin-left、margin-right分别设置为内部该div的高度的一半的负值。div可以达到水平居中的效果。
    需要注意的是:下面代码中left和top使用了50%,position:relative;是必须的。
    <div style="width:200px;height:200px;border:1px solid black;">
     <div style="left:50%;top:50%;width:100px;height:100px;margin:-50px -50px;border:1px solid blue;position:relative;">
      negative margin实现的垂直居中。
     </div>
    </div>
    negative margin实现的垂直居中。

    文章参考列表:
    1. 由浅入深漫谈margin属性
    2. Vertical Centering in CSS
    3. Vertical centering using CSS
12
3
分享到:
评论
8 楼 redfeather 2009-01-13  
学习一下!
7 楼 sutrong 2008-12-13  
CSS掌握的很牛经
6 楼 dearshor 2008-12-12  
受教了
期待博主更多的关于CSS方面的知识的介绍。
5 楼 linginfanta 2008-12-12  
强人,学习了。
4 楼 diddyrock 2008-12-12  
高手!
楼下保持队形
3 楼 daoyongyu 2008-12-11  
高手!
2 楼 xieye 2008-12-11  
高手!!
=========
1 楼 whaosoft 2008-12-11  
 
页面高手!

相关推荐

    CSS实现完美垂直居中 - 蓝色理想

    尽管现代布局更倾向于使用Flexbox和Grid,但旧版CSS中,可以将父元素设为`display: table`,子元素设为`display: table-cell`,并用`vertical-align: middle`来实现垂直居中。 10. **CSS `calc()` 函数**: 当...

    CSS 实现盒子水平居中、垂直居中和水平垂直居中….docx

    CSS 盒子水平居中、垂直居中和水平垂直居中的实现方法 在 CSS 中,实现盒子水平居中、垂直居中和水平垂直居中是非常常见的需求。本文将介绍五种不同的方法来实现这些效果,并对每种方法的优缺点进行分析。 一、...

    DIV+CSS水平垂直居中

    本文将详细介绍DIV+CSS水平垂直居中的方法和实现原理。 一、使用position:absolute实现水平垂直居中 使用position:absolute可以将DIV元素水平垂直居中,方法是将DIV元素的left和top属性设置为50%,然后通过margin-...

    CSS 图片水平垂直居中于DIV

    总之,实现CSS中的图片水平垂直居中是一个常见的挑战,但通过理解不同的布局模式和定位方式,我们可以灵活地选择合适的方法来解决这个问题。无论是在简单的网页还是复杂的响应式设计中,这些技巧都将大有裨益。

    div+css垂直居中和水平居中

    7. **水平垂直居中**: 结合以上方法,可以同时实现水平和垂直居中: ```css .container { display: flex; justify-content: center; align-items: center; } ``` 或者使用CSS Grid: ```css .container ...

    图片水平垂直居中

    首先,我们可以使用CSS的Flexbox布局来实现图片的水平垂直居中。Flexbox是一个强大的容器模型,它允许我们轻松地调整子元素的布局、对齐和分布,而无需复杂的定位技巧。 1. 创建一个包含图片的容器: ```html `...

    div框水平垂直居中跟内容垂直居中.html

    div框水平垂直居中跟内容垂直居中

    全面总结使用CSS实现水平垂直居中效果的方法

    要实现水平垂直居中,我们可以利用CSS的多种属性和方法。以下详细介绍了几种不同的实现方案: 第一种方法是最原始的方法,它适用于单行文本的居中。这种方案的核心在于,将元素的高度和行高设置为相同的数值。如果...

    DIV+CSS 图片垂直居中效果

    综上所述,"DIV+CSS 图片垂直居中效果"可以通过多种方法实现,具体选择哪种取决于项目需求、浏览器兼容性和响应式设计的需求。在提供的`index.html`、`images`和`css`文件中,我们可以看到实际的代码应用和图片资源...

    CSS解决未知高度的DIV垂直居中

    ### CSS解决未知高度的DIV垂直居中 #### 知识点概述 在Web开发中,实现元素的垂直居中是一项常见的需求。对于已知高度的元素来说,这相对容易实现。但对于那些高度未知或者动态变化的元素,尤其是嵌套在另一个未知...

    css水平垂直居中

    ### CSS 水平垂直居中的实现方法 在前端开发中,经常需要将元素在页面中进行水平垂直居中处理,特别是在响应式布局或者需要精确控制元素位置的情况下尤为重要。本篇文章将详细介绍如何通过 CSS 实现内容的水平垂直...

    js实现水平垂直居中

    本话题将深入探讨如何使用纯JavaScript实现水平垂直居中的方法。 一、固定宽高的元素居中 对于具有固定宽度和高度的元素,可以使用JavaScript动态设置元素的`margin`属性来实现居中。以下是一种简单的方法: ```...

    使用css实现div垂直居中的示例

    本示例将详细解释如何使用CSS来实现`div`元素的垂直居中。 首先,我们要理解CSS布局的基本概念。在网页中,元素的位置可以通过设置`position`属性来控制,其主要值有`static`(默认值)、`relative`、`absolute`和`...

    css实现垂直居中

    以下是一些主要的CSS技术,它们可以帮助你实现"css实现垂直居中": 1. **Flexbox布局** Flexbox是现代CSS布局模式,特别适合处理容器内子元素的对齐问题。要实现垂直居中,可以设置容器的`display`属性为`flex`,...

    css图片垂直居中

    本篇文章将深入探讨如何利用CSS实现图片的垂直居中效果。 首先,我们来看几种常见且实用的CSS方法: 1. **Flexbox布局**: Flexbox是CSS3引入的一种新的布局模式,特别适合处理容器内元素的对齐问题。要使图片在...

    DIV水平垂直居中

    总之,实现`div`的水平垂直居中有多种方法,包括CSS的Flexbox、Grid、绝对定位等,以及JavaScript/jQuery的动态调整。选择哪种方法取决于项目需求和浏览器兼容性要求。在实际开发中,通常会结合使用这些技术来达到...

    div+css文本水平垂直居中,兼容ie、谷歌等浏览器

    div+css文本水平垂直居中,兼容ie、谷歌等浏览器

    [css]实现垂直居中水平居中的几种方式 - 霪霖笙箫 - 博客园1

    "CSS 实现垂直居中水平居中的几种方式" CSS 中实现垂直居中水平居中的几种方式是非常重要的,以下是几种常见的实现方式: 1. 容器内(Within Container) 在容器内实现垂直居中水平居中可以通过设置容器的 ...

    CSS实现垂直居中的5种方法.rar

    对于固定尺寸的元素,可以使用绝对定位实现垂直居中。容器需设置`position: relative;`,而子元素设置`position: absolute;`,`top: 50%;`和`transform: translateY(-50%);`。 ```css .container { position: ...

Global site tag (gtag.js) - Google Analytics