在前端开发中经常会碰到各种类型布局的网页,这要求我们对css网页布局非常熟悉。其中水平垂直居中布局,多列布局等经常会被使用到,今天就来解决一下css布局方面的问题。

水平垂直居中的几种方法

说到水平垂直居中布局我们一般会立马想到以下几种情况:

实验参数设置

<div class="container">
123
<p class="inner">456</p>
<span class="inner">789</span>
<img class="inner" src="img/1.jpg">
</div>

未脱离文档流时

文本元素

/*方法一:*/
/*配合单行文字使用*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
line-height:400px;
}
/*方法二:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
}
.container:after{
display:inline-block;
content:"";
height:100%;
vertical-align:middle;
}

行内元素

/*方法一:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
display:table-cell;
vertical-align:middle;
}
/*方法二:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
}
.container:after{
display:inline-block;
cotent:"";
height:100%;
vertical-align:middle;
}

块状元素

/*方法一:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
display:table-cell;
vertical-align:middle;
}
/*方法二:*/
/*配合多行文本使用*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
display:table-cell;
vertical-align:middle;
}
.inner{
width:200px; /*需要给子元素一个宽度*/
margin: auto;
}

替换元素

常见的替换元素有:<img> <input> <textarea> <select> <button>

/*方法一:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
}
.container:after{
display:inline-block;
cotent:"";
height:100%;
vertical-align:middle;
}
.inner{
vertical-align:middle;
}
/*方法二:*/
.container{
height: 400px;
width: 400px;
border: 1px solid red;
text-align:center;
display:table-cell;
vertical-align:middle;
}
.inner{
vertical-align:middle;
}

水平垂直居中的终极方法:

.container{
height: 400px;
width: 400px;
border: 1px solid red;
display: flex;
align-items: center;
justify-content: center;
/*以下是个各种兼容代码*/
/* 老版本语法: 比较少用*/
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
}

优点:同样的代码解决各种问题

缺点:IE8及以下不兼容

脱离文档流时

行内元素、块状元素、替换元素

由于行内元素加上position:absolute;之后会生成一个块级框,与块状元素类似,其高宽可控

/*当知道子元素高宽时*/
.container{position:relative;}
.inner{
position: absolute;
width:100px;
height: 50px;
top:50%;
left:50%;
margin-left:-50px;
margin-top:-25px;
}
或者
.inner{
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
width:200px;
height:设置为适当的高度;
margin: auto;
}
/*当子元素高宽未知时*/
.inner{
position: absolute;
top:50%;
left:50%;
-webkit-transform: translate(-50%,-50%);
-o-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
}

常见的几种页面布局

固定布局

负边距除去列表右边框
<style type="text/css">
#div1 { width: 580px; height: 380px; margin: 0 auto; border: 3px solid lightblue; overflow: hidden; margin-top: 10px; }
.box { width: 180px; height: 180px; margin: 0 20px 20px 0; background: lightgreen; float: left; }
#div2 { margin-right: -20px; /*通过在外面包裹的div上添加负边距,除去列表的右边框*/}
</style>
<div id="div1">
<div id="div2">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
双飞翼布局
  1. 三列布局,中间宽度自适应,两边定宽;
  2. 中间栏要在浏览器中优先展示渲染;
  3. 允许任意列的高度最高;
  4. 要求只用一个额外的DIV标签;
  5. 要求用最简单的CSS、最少的HACK语句;
body,html { height: 100%; font: 20px/40px "microsoft yahei"; color: white; }
#container { width: 90%; margin: 0 auto; height: 100%; }
#header,#footer { height: 12.5%; background: deepskyblue; }
#main { height: 75%; }
#center,#left,#right { height: 100%; float: left; }
#center { width: 100%; background: lightgreen; }
#left { background: lightcoral; width: 20%; margin-left: -100%; }
/*左侧设置margin-left: -100%;使得left移上去*/
#right { background: lightblue; width: 20%; margin-left: -20%; }
/*右侧设置margin-left: -20%;使得right在右侧*/
#main-inner { margin: 0 20%; }
/*双飞翼布局和圣杯布局的区别在于是否有main-inner块,如果没有可直接通过设置
#center{padding: 0 20%;}
#left{position:relative;left:-leftwidth;}
#right{position:relative;right:-rightwidth;}
</style>
<div id="container">
<div id="header">
header
</div>
<div id="main">
<div id="center">
<div id="main-inner">
center
</div>
</div>
<div id="left">
left
</div>
<div id="right">
right
</div>
</div>
<div id="footer">
footer
</div>
</div>

流式布局

网页中主要的划分区域的尺寸使用百分数(搭配min-、max-属性使用)图片也作类似处理(width:100%, max-width一般设定为图片本身的尺寸,防止被拉伸而失真)。这种布局方式在Web前端开发的早期历史上,用来应对不同尺寸的PC屏幕,在当今的移动端开发也是常用布局方式。

缺点:宽度使用百分比定义,但是高度和文字大小等大都是用px来固定(现在用em,rem),所以在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度、文字大小还是和原来一样(即,这些东西无法变得“流式”),显示非常不协调。

弹性布局

由于前人总结的很好,我就不造轮子了

一劳永逸的搞定 flex 布局

由于flex是css3的属性,低版本浏览器不兼容

瀑布流布局

masonry实现瀑布流布局

具体使用方法可参考官网教程

响应式布局

@media screen and (max-width:320px){ /*视窗<=320px*/
/*css code */
}
@media screen and (min-width:769px)and(max-width:1000px){ /* 769px<=视窗<=1000px */
/*css code */
}

清除浮动的几种方法

空标签

<div style="clear:both;"></div>

优点:简单明了

缺点:增加无意义的空标签,违背了结构表现分离,给后期维护带来了问题。

利用BFC

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

BFC布局规则:

  • 内部的Box会在垂直方向,一个接一个地放置。
  • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  • 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  • BFC的区域不会与float box重叠。
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  • 计算BFC的高度时,浮动元素也参与计算

以下元素会生成BFC:

根元素
float属性不为none
overflow不为visible
position为absolute或fixed
display为inline-block, table-cell, table-caption, flex, inline-flex中任何一个

after伪类样式

给父元素增加clearfix类即可,推荐使用

.clearfix:after{
content: ".";
display: block;
height: 0px;
clear: both;
visibility: hidden;
}

参考文章:

  1. CSS3与页面布局学习总结(四)——页面布局大全
  2. 一劳永逸的搞定 flex 布局

CSS页面布局常见问题总结的更多相关文章

  1. CSS 页面布局、后台管理示例

    CSS 页面布局.后台管理示例 页面布局 1.头部菜单 2.中间内容/中间左侧菜单 3.底部内容 <div class='pg-header'> <div style='width: ...

  2. css页面布局

    写在前面: 页面布局整体上可以分为两类:固定宽度(一般固定960px):流式布局:将流式布局转换为固定布局很容易,只需要外围再包括一个div,为其设置宽度即可. html默认的布局方式是将每个块状标签 ...

  3. css页面布局总结

    W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...

  4. CSS页面布局与网格(上)

    1.布局规划 1.1 网格 网格系统是设计师在切分布局时作为参照的一组行和列. 1.2 布局辅助类 类名用于为布局添加样式.为了让样式可以重用,让类名表达其意图. .column { /* 一般列的样 ...

  5. 第6天:DIV+CSS页面布局实战

    今天我从早上9:00写代码一直写到下午18:00,写的我差点抑郁了,还好最后终于写出了一个完整页面,没有做动画效果,就是练习了一下DIV+CSS布局,做的是福务达(www.zzfwd.cn)的主页,真 ...

  6. 一、CSS概述 二、CSS的选择器(认识) 三、CSS样式和属性(练习) 四、重构商城首页DIV+CSS(页面布局)(重点) 浮动/更改显示方式

    一.CSS概述###<1>概念 DIV,就是一个HTML元素,块级元素,通常结合CSS进行页面的布局. CSS,层叠样式表,给HTML元素增强显示. ###<2>作用 样式定义 ...

  7. 3种常见的CSS页面布局--双飞翼布局、粘连布局、左右两列布局

    一.左右两列布局 1.代码如下,可先粘贴复制,自行运行 <!DOCTYPE html><html> <head> <meta charset="UT ...

  8. dic+css页面布局分享

    HTML部分代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  9. 第五章 CSS页面布局基础

    1.标准文档流 在正常流中,在没有使用浮动或者定位的情况下,文本元素按照从上到下.从左到右的格式布局.这是浏览器的默认行为.在正常流中,块级元素从上到下依次排列,而行级元素从左到右依次排列.正常流中的 ...

随机推荐

  1. linux下静态链接库和动态链接库

    关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...

  2. Hive SQL基础操作

    创建表 hive 查看本地的文件#Can execute local commands within CLI, place a command in between ! and ;!cat data/ ...

  3. [EXP]Microsoft Windows CONTACT - Remote Code Execution

    [+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org [+] Source: http://hyp3 ...

  4. web自动化测试(java)---测试过程中遇到的错误合集

    摸索测试,不管是安装.调测第一个用例都会遇到各种各样的问题,或是自己的问题或是程序本身设置问题 只有把所有问题记录下来,才对得起自己的经历 1.设置firefox的执行文件错误 Exception i ...

  5. 13-03 Java 基本类型包装类概述,Integer类,Character

    基本类型包装类概述 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据.常用的操作之一:用于基本数据类型与字符串之间的转换.基本类型和包装类的对应Byte,Short,Inte ...

  6. python基础学习笔记 - 备忘

    基础中的基础 Python标识符 命名规则: Python标识符区分大小写. 可以包括英文.数字以及下划线,但不能以数字开头. 以下划线开头的标识符是有特殊意义的: a)         以单下划线开 ...

  7. Retrofit2+Rxjava2的用法

    近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门... 由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方, ...

  8. JVM笔记11-类加载器和OSGI

    一.JVM 类加载器: 一个类在使用前,如何通过类调用静态字段,静态方法,或者new一个实例对象,第一步就是需要类加载,然后是连接和初始化,最后才能使用. 类从被加载到虚拟机内存中开始,到卸载出内存为 ...

  9. C++虚表详解

    所有结果均为32位系统,指针为4个字节 简单继承 class A { public: int a; }; class B : public A { public: int b; }; 对象B的内存布局 ...

  10. pycharm专业版破解

    网上找的用license server破解的地址都不可用== 有个方法倒是靠谱的,记录一下: 1.将C:\Windows\System32\drivers\etc里面的hosts文件打开,然后在文件中 ...