1.简易场景实现自适应:浮动、页面居中、元素宽度不写固定而设置百分比自动匹配大小。这样在页面宽度发生变化时,能利用以上特性实现简易的自适应效果。
2.若是实际开发中有复杂场景的需求,通常经过编写多套CSS代码,而后用媒体查询技术,让页面根据不一样屏幕尺寸来加载不一样代码模块以实现适配不一样屏幕的目的。这种方式须要编写多套代码,虽然工做量大,但对于不一样屏幕尺寸的设备都有单独一套CSS代码,维护起来更方便。
3.响应式布局,响应式布局是指根据不一样屏幕尺寸自动调整页面显示效果实现自适应(也要用到媒体查询技术)。响应式布局通常有栅格系统布局,flex布局。bootstrap框架的核心就是栅格系统。 (后面详细介绍栅格系统的实现方式)。css
媒体查询可针对不一样设备场景使用不一样css,通常栅格系统和多套代码逻辑匹配页面是都要用媒体查询来肯定页面大小。媒体查询技术的原理:经过匹配不一样屏幕设备的特征,让不一样特征下的CSS代码生效。bootstrap
经常使用匹配特征 media featureswidth/height:
浏览器宽高max-width:
表示小于最大宽度时生效min-width:
表示大于最小宽度时生效device-width/device-height:
设备屏幕分辨率宽高resolution:
设备分辨率orientation:
portrait(纵向),高度大于等于宽度时,landscape(横向),高度小于宽度时浏览器
特征匹配操做符
当媒体类型匹配且表达式为真的时候,对应style就会起做用:
1.and框架
@media (min-width: 700px) and (orientation: landscape) { ... }
表示最小宽度限制在700px,当浏览器宽度大于等于700px且为横向时CSS代码生效布局
2.逗号分隔flex
@media (max-width: 500px), handheld and (orientation: landscape) { ... }
表示最大宽度限制在500px,当浏览器宽度小于等于500px或者手持设备且为横向时生效spa
媒体查询引入
link 引入方式code
<link rel="stylesheet" type="text/css" href="styleB.css" media="screen and (min-width: 600px) and (max-width: 800px)">
@media导入继承
@media screen and (max-width: 990px){ .container{ background: orange; } }
传统的布局方式:浮动+position定位+display属性对简单布局需求可轻易实现,但对于绝对居中这种常见的场景的实现却不太容易,同时浮动布局也会产生一些反作用效果。Flex弹性布局,用来为盒状模型提供最大的灵活性,能够简便、完整、响应式地实现各类页面布局。目前,它已经获得了全部浏览器的支持。
flex的基本概念:
1.任何一个容器元素都能指定成flex容器
块级元素:display:flex
行内元素也能使用flex布局: display:inline-flex;
2.使用Flex布局的元素称为 Flex 容器(flex container),简称"容器"。它的全部子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。
容器中有两个轴线,水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫作main start,结束位置叫作main end;交叉轴的开始位置叫作cross start,结束位置叫作cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫作main size,占据的交叉轴空间叫作cross size。图片
3.flex container容器的6个属性flex-direction
方向 row(行排列默认)/row-reverse/column(纵向)/column-reverse
flex-direction:row时主轴为X方向/column时主轴为Y方向
flex-wrap
换行 nowrap(默认不换行)/wrap/
flex-flow
上面两个属性的简写 flex-flow:row wrap 上面两个属性可写成一行
justify-content
主轴对齐方式 :
*space-between(多余空间放中间)
space-around(多余空间放两边)
flex-start(item元素靠近主轴起点)
flex-end(item元素靠近主轴终点)
center(item元素居中)*
align-items
交叉轴对齐方式
*stretch伸展(默认值,前提是item元素宽/高度不肯定),全部元素宽/高度都撑满整个container
flex-start(item元素靠近交叉轴起点)
flex-end(item元素靠近交叉轴终点)
center(item元素居中)
baseline (item元素第一行文字的baseline对齐)*
align-content
多轴线在交叉轴方向的对齐方式(多行/多列),为何不是主轴,由于已经换行了是多行啊。
flex-start item靠近交叉轴起点
flex-end item元素靠近交叉轴终点
center item元素靠近交叉轴中心点
space-between item元素与交叉轴两端对齐
space-around item元素每根轴线两侧间隔相等,轴线之间的间隔比轴线与边框的间隔大一倍
stretch (默认值)item元素占满整个交叉轴
flex item的6个属性order item
元素的顺序
flex-grow
有多余空间item元素分配比例,默认为0即不放大
flex-shrink
空间不够时item元素收缩比例,默认为1即缩小一倍
flex-basis
指定item元素在分配多余空间以前占用主轴大小main size(px/%),默认auto即项目自己大小
flex
上面三个属性的简写,注意顺序
align-self
指定单个item元素自身的对齐方式,可覆盖align-item属性,默认auto继承align-item的属性
*flex-start
flex-end
center
baseline
stretch*
栅格系统是一种自适应页面的布局方式,用于经过一系列的行(row)与列(column)的组合来建立页面布局,实际要展现的内容能够放入这些建立好的栅格中。当页面宽度发生改变时,每一个栅格的大小会自动调整以适应页面尺寸。
栅格系统的实现原理:
1.将页面中每行布局分红12个等份,每一等份即一个grid。1个grid占1/12,2个grid占2/12,依此类推。页面上全部grid由父容器container包裹,全部grid设置浮动或者设置成行内元素保持在一行,一行排列不下时自动换行。全部grid设置成border-box。
2.定义不一样屏幕尺寸时grid不一样的css class名称,好比:
默认屏幕尺寸时使用:grid-df-1,grid-df-2
屏幕小尺寸使用:grid-sm-1,grid-sm-2
屏幕中等尺寸使用:grid-md-1,grid-md-2
屏幕大尺寸使用:grid-lg-1,grid-lg2
3.用媒体查询
@media screen and (min-width:768px){ ...... }
限制不一样浏览器宽度(即不一样屏幕尺寸)时container的固定宽度。同时设置不一样屏幕尺寸时,grid对应的css 宽度比例。
4.设置每一个grid在不一样屏幕尺寸时须要占的格数。这时media queries会在不一样屏幕尺寸的大小时,让每一个grid显示应有的比例。好比<div class="grid-df-1 grid-sm-12 grid-md-3 grid-lg-6"></div>即该div在默认屏幕尺寸时占1格,在sm尺寸时占12格,在md尺寸时占3格,在lg尺寸时占6格
代码示例:
@media screen and (min-width:768px){ #container{ width:768px; } .grid-sm-1{ width:8.3333333%; } .grid-sm-2{ width:16.666666%; } .grid-sm-3{ width:25%; } .grid-sm-4{ width:33.333333%; } .grid-sm-5{ width:41.666666%; } .grid-sm-6{ width:50%; } .grid-sm-7{
实现效果以下,当页面宽度为正常大小时
当页面宽度小于媒体查询设定的最大宽度时