网页垂直水平居中方法总结

web前端开发经常用到的就是使元素在容器里面进行水平垂直居中。相对于垂直居中来说,水平居中或许比较容易。如果是块级元素直接设置其margin:auto即可完成水平居中;如果是内联元素,可以通过display:inline-block(display:block)变成块级元素再进行设置margin值或者通过text-align:center即可使水平居中。若是垂直居中,如果是内联元素,可以设置vertical-align:middle可以使其垂直居中(前提是父容器里面只有一个子元素才生效)。所以下面在平时总结了以下几种垂直居中的方法。

    1. 最常用的方法,也是日常web前端开发中用得最多的通过设置line-height属性与当前元素的高度值一致,但是缺点就是目前的元素的高度必须设置为固定值,没有了更多的灵活性,先举个例子demo(下面举例的html结构类似):
// html结构
<div class="parent">
    demo 
</div>
// css样式使文本元素垂直水平居中
div.parent{
  width:100px;
  height:100px;
  vertical-align:middle;
  line-height:100px;
}
    1. 通过绝对定位元素来使元素进行垂直水平居中,缺点就是子元素必须设置固定的宽度高度值且会以最近的一个设置posiiton为relative的父元素进行定位,如果没有这样的父元素,就以body文档为定位:
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  position:relative;
  width:200px;
  height:200px;
}
div.child{
  position:absolute;
  width:100px;
  height:100px;
  margin:auto;
  left:0;
  top:0;
  bottom:0;
  right:0;
}
    1. 通过table-cell方法进行定位居中,父元素设置宽高度即可:
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  display:table;
}
div.child{
  display:table-cell;
  text-aglin:center;
  vertical-align:middle;  
}
    1. 通过CSS3的弹性盒子模型flex进行布局定位:
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  width:100%;
  height:200px;
  display:flex;
  justify-content:center;
  align-items:center;
}
// 或者直接设置子元素
div.parent{
  width:100%;
  height:200px;
  display:flex;
  justify-content:center;
}
div.child{
  align-self:center;
}
    1. 通过flex的旧版本进行水平垂直居中对齐(其中box-orient类似于新版的flex-direction):
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  width:100%;
  height:200px;
  display:box;
  box-align:center;
  box-pack:center;
}
    1. 通过绝对定位absolute加margin负值进行居中对齐:
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  width:100px;
  height:100px;
  position:relative;
}
div.child{
  position:absolute;
  top:50%;
  left:50%;
  right:auto;
  bottom:auto;
  width:50px;
  height:50px;
  margin-left:-25px;
  margin-top:-25px;
}
  • 7.通过CSS3的transform属性的位移值translate来进行水平垂直居中
// html结构
<div class="parent">
  <div class="child">demo</div>
</div>
// css样式
div.parent{
  width:100px;
  height:100px;
  position:relative;
}
div.child{
  position:absolute;
  top:50%;
  left:50%;
  right:auto;
  bottom:auto;
  width:50px;
  height:50px;
  transform:translate(-50%,-50%);
}
  • 8.利用上层元素的浮动来进行垂直居中:
// html结构
<div class="content"></div>
<div class="next">demo</div>
// css样式
div.content{
  height:50%;
  float:left;
  margin-bottom:-120px;
}
div.next{
  clear:both;
  height:240px;
  position:relative;
}

暂时可以想到与可以总结到的有这几种方法,如果有其他的水平垂直居中的方法,欢迎提出。如果有出入,欢迎提出错误所在。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 12,533评论 3 30
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 10,128评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 8,899评论 0 6
  • 之一 菜场门口那一块地真是卖东西的好地方。 隔三差五,卖调料的,卖酱的,卖碗的,卖养生杂粮粉的轮换着来摆摊,生意火...
    快乐苦虫阅读 2,444评论 1 1