1. 实现div的水平居中和垂直居中
  2. 多元素水平居中
  3. 实现栅格化布局

1. 实现div的水平居中和垂直居中

实现效果:

这大概是最经典的一个题目了,所以放在第一个. 方法有好多, 一一列来

主要思路其实就是

  1. 使用position,相对父元素做绝对定位(设置百分比[由父元素宽高调节子元素大小]/设置margin和相对位置(确定宽高))
  2. 使用flex属性
  3. 使用tranfrom做相对位移的调节

1) 只适用: 宽高已定

设置position: absolute(父元素记得设置: relative), 然后top和left设置50%, 50%, 再设置margin-left=宽/2, margin-top:宽/2

        .div1{
width:500px;
height:500px;
border:1px solid black;
position: relative; /*很重要,不能忘*/
}
.div2{
background: yellow;
width:300px;
height:200px;
margin-left:-150px;
margin-top:-100px;
top:50%;
left:50%;
position: absolute;

2) 只适用: 固定宽高; 如果宽高随意,想靠内部撑开的话, 会占满整个父div 

依然是利用position:子div的上下左右都设置成0,然后margin设置auto。关键是要设置position:子absolute,父relative。

        .div1{
width:500px;
height:500px;
border:1px solid black;
position: relative; /*很重要,不能忘*/
}
.div2{
background: yellow;
width:300px;
height:200px;
margin:auto;
bottom:;
top:;
left:;
right:;
position: absolute;

3) 适用: 不论是否固定宽高都可用. 问题在于兼容性. ie9及以下不支持

设置父级flex属性: display:flex; justify-content:center; align-items: center;

这种方法在子级div有多个时也可以实现居中----具体看flex属性设置

        .div1{
width:500px;
height:500px;
border:1px solid black;
display: flex;
justify-content: center;  /*使垂直居中*/
align-items:center;    /*使水平居中*/ }
.div2{
background: yellow;
/*width:300px;
height:200px;*/ }

4) 适用: 要设宽度, 否则会使得宽度为父级div的宽度

父级元素设置display:table-cell ,然后vertical-align:middle。这种方法可以设置垂直居中. 这时候只要在子元素里设置margin:auto即可实现水平居中

但是这种方法好像会使父元素的居中无效。

        .div1{
width:500px;
height:500px;
border:1px solid black;
display:table-cell;
vertical-align: middle; }
.div2{
background: yellow;
width:300px;
/*height:200px;*/
margin:auto; }

5) 适用: 可不指定宽高

使用transform居中. 设置父级position:relative; 子级position:absolute. 然后top: 50%; left:50%; transform:translate(-50%,-50%)

        .div1{
width:500px;
height:500px;
border:1px solid black;
position: relative;
}
.div2{
background: yellow;
position: absolute;
/*width:200px;*/
top:50%;
left:50%;
transform:translate(-50%,-50%);
}

6) 适用: 指定宽高百分比

保证left和right的百分数一样就可以实现水平居中,保证top和bottom的百分数一样就可以实现垂直居中。但是这种方法不能由内部元素自动调节div的宽高,而是通过父元素大小控制的

        .div1{
width:500px;
height:500px;
border:1px solid black;
position: relative;
}
.div2{
background: yellow;
position: absolute;
left: 30%;
right: 30%;
top:40%;
bottom: 40%;
}

7) 使用display:inline-block加伪元素

        .div1{
width:600px;
height:200px;
border:1px solid black;
text-align: center;
}
.div1:after{
content:"";
display: inline-block;
vertical-align: middle;
height: 100%;
}
.div2{
background: black;
color:white;
display: inline-block;
}

box 容器通过 after或者before 生成一个高度 100% 的「备胎」,他的高度和容器的高度是一致的,相对于「备胎」垂直居中,在视觉上表现出来也就是相对于容器垂直居中了

参考: 怎么实现div的水平居中和垂直居中

2. 多元素水平居中

效果:

1) 把子级div设置成display:inline-block; 然后父级div设置text-align:center;

/**base style**/
div{
background:#000;
color:#fff;
height:50px;
width:50px;
text-align:center;
line-height:50px;
margin-left:10px;
} /**start here**/
main{
text-align:center;
}
div{
display:inline-block;
*display:inline;/*hack IE*/
*zoom:;/*hack IE*/
}

一个实现效果

2) 更方便灵活的做法还是使用flex-box, 设置水平居中 justify-content: center

main{
display:flex;
justify-content:center;
}

3. 实现栅格化布局

使用flex,

.parent{
display: flex;
flex-direction: column;  /*按列的顺序*/
flex-wrap: wrap;  /*可换行*/
height: 440px;
width: 660px;
}

参考:  CSS常见布局问题整理

CSS常见布局问题整理的更多相关文章

  1. css常见布局方式

    CSS常见布局方式 以下总结一下CSS中常见的布局方式.本人才疏学浅,如有错误,请留言指出. 如需转载,请注明出处:CSS常见布局方式 目录: 使用BFC隐藏属性 float + margin abs ...

  2. css CSS常见布局解决方案

    CSS常见布局解决方案说起css布局,那么一定得聊聊盒模型,清除浮动,position,display什么的,但本篇本不是讲这些基础知识的,而是给出各种布局的解决方案.水平居中布局首先我们来看看水平居 ...

  3. 前端进阶系列(二):css常见布局解决方案

    水平居中布局 margin+定宽 <div class="parent"> <div class="child">Demo</di ...

  4. 总结CSS面试题目的考察点及常见布局问题整理

    整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考. 写这个博文内心有种莫名奇妙的自我谴责感,实在不应该把面试层叠样式“应试 ...

  5. <转载>div+css布局教程之div+css常见布局结构定义

    在使用div+css布局时,首先应该根据网页内容进行结构设计,仔细分析和规划你的页面结构,你可能得到类似这样的几块: 页面层容器.页面头部.标志和站点名称.站点导航(主菜单).主页面内容.子菜单.搜索 ...

  6. CSS常见布局解决方案

    最近要准备移动端项目,大半年没好好写过CSS了,今天恶补了一下CSS的一些布局,下面做一些分享. 水平居中布局 1.margin + 定宽 <div class="parent&quo ...

  7. CSS常见布局

    一.单列布局 1. 水平居中 1.1 使用inline-block和text-align .parent{text-align:center;} .child{display:inline-block ...

  8. CSS网页布局垂直居中整理

    一.使用CSS3处理垂直居中方式 1.使用Flex布局处理(推荐),简单好用 body,html{ width:100%; height:100%; } .out { width: 20%; heig ...

  9. css常见布局问题

    1.如何实现一个盒子在页面中上下左右居中 方法一:(盒子宽高固定时) .box{ width:400px; height:200px; background:#000; position:absolu ...

随机推荐

  1. CentOS7+CDH5.14.0安装CDH错误排查:HBase服务出现 该运行状况测试不良,因为 Service Monitor 未找到活动 Master

    错误:HBase服务出现 该运行状况测试不良,因为 Service Monitor 未找到活动 Master 如果重启服务之后无法排除该问题,请执行如下操作(CM换成自己的版本号): rm -f /o ...

  2. 小程序canvas绘制渐变色(简单入门)

    呀,曾经的我是那么的单纯,天真,粗略的翻了一遍小程序画布API,没有看见渐变色,就以为不支持渐变色 于是在项目中直接把原本的渐变色换成了单一颜色展示,发现很low啊 但是,自从上次小程序API文档更新 ...

  3. HNの野望

    1.标题 2.工作 3.学习 4.英语 5.健康 6.心理 7.绘画 8.看书

  4. 201771010134杨其菊《面向对象程序设计java》第十周学习总结

    第8章泛型程序设计学习总结 第一部分:理论知识 主要内容:   什么是泛型程序设计                   泛型类的声明及实例化的方法               泛型方法的定义      ...

  5. Winform .NET 利用NPOI导出大数据量的Excel

    前言:公司让做一个导出数据到Excel的小工具,要求是用户前端输入sql语句,点击导出按钮之后,将数据导出到Excel,界面如图所示:文件下端显示导出的进度 遇到的问题: 1.使用NPOI进行Exce ...

  6. C# WPF 通过委托实现多窗口间的传值

    在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值. 在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如 ...

  7. Chapter5_初始化与清理_用构造器初始化

    接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾 ...

  8. wzyxidian Scanner 与 Readable 的read()方法

    Readable接口中的read()方法实现了将字符串读入charBuffer中,但是只有在需要输出的时候才会调用. Scanner是文本扫描器类,利用Scanner扫描并输出charBuffer中的 ...

  9. 前端js收藏

    1 爱心特效 <script type="text/javascript"> (function(window,document,undefined){ var hea ...

  10. oracle 数据定义语言(DDL)语法

    DDL语言包括数据库对象的创建(create).删除(drop)和修改(alter)的操作 1.创建表语法 create table table_name( column_name datatype  ...