CSS常见布局问题整理

  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: 0;
            top:0;
            left:0;
            right:0;
            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:1;/*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常见布局问题整理

时间: 2024-10-13 02:38:41

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

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

在使用div+css布局时,首先应该根据网页内容进行结构设计,仔细分析和规划你的页面结构,你可能得到类似这样的几块: 页面层容器.页面头部.标志和站点名称.站点导航(主菜单).主页面内容.子菜单.搜索框.页脚(版权和有关法律声明). 通常采用DIV元素来将这些结构定义出来,类似这样: <div id="Container"></div> 页面层容器 <div id="header"></div> 页面头部 <di

CSS常见布局解决方案

最近要准备移动端项目,大半年没好好写过CSS了,今天恶补了一下CSS的一些布局,下面做一些分享. 水平居中布局 1.margin + 定宽 <div class="parent"> <div class="child">Demo</div> </div> <style> .child { width: 100px; margin: 0 auto; } </style> 这种常见的写法就不再赘述了

css常见布局方式

布局是CSS中一个重要部分,下面总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式(包括传统的盒模型布局和比较新的flex布局实现). 一.居中方式 水平居中 水平居中对于子元素为行内元素还是块状元素,宽度一定还是宽度未定,采取的布局方案是不同. 行内元素:对父元素设置text-align:center;定宽块状元素: 设置左右margin值为auto;不定宽块状元素: 设置子元素为display:inline,然后在父元素上设置text-ali

HTML CSS常见布局

首先将页面划分为大的结构性区域,比如容器.页眉.内容区和页脚: 然后是内容区域本市,建立网格结构,分析页面结构 最后再各内容区中设计结构,确定页面布局. 1. 水平居中 使用display:inline 和 text-align /*.parent { text-align: center; } .child { display: inline-block; }*/ 使用margin:0 auto 设定 .child { width: 300px; margin: 0 auto; } 使用tab

css常见布局

一列布局 1.一列布局 不是自适应 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>一列布局</title> <style> *{margin:0;padding:0;} #header{ height:50px; background:blue; } #main{ width:960px; height:800px; /* 在实际

CSS常见简写规则整理

外边距(margin) margin-top margin-right margin-bottom margin-left 简写顺序为顺时针方向(上.右.下.左),如:margin: 1px 2px 3px 4px; 其中四边都相等时可简写为一个,如:margin: 1px; 当上下.左右分别相等时,也可简写,如:margin: 1px 2px; 代表上下1px,左右2px 只有左右相等时,可简写为:margin: 1px 2px 3px; 但只有上下相等时不可简写. 内边距(padding)

学习微信小程序之css16常见布局

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css常见布局</title> <style> *{ padding: 0;margin: 0; } .header,.nav,.main,.footer{ background-color: silver; border: 1px solid

DIV+CSS网页布局常用的一些基础知识整理

CSS命名规范一.文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: 二.常用类/ID命名规范页 眉:header内 容:content容 器:container页 脚:footer 版 权:copyright 导 航:menu主导航:mainMenu子导航:subMenu 标 志:logo标 语:banner标 题:title侧边栏:sidebar 图 标:Icon注 释:note

常见的布局方法整理[兼容]

一行两列左侧固定右侧自动适应 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv