CSS 响应式布局的方法

参考链接

媒体查询

根据设备视口尺寸选择性生效

CSS3 @media 限制生效

媒体查询可针对不同设备场景使用不同css,一般栅格系统和多套代码逻辑匹配页面是都要用媒体查询来确定页面大小。
媒体查询技术的原理:通过匹配不同屏幕设备的特征,让不同特征下的CSS代码生效。

常用匹配特征 media features

width/height: 浏览器宽高
max-width: 表示小于最大宽度时生效
min-width: 表示大于最小宽度时生效
device-width/device-height: 设备屏幕分辨率宽高
resolution: 设备分辨率
orientationportrait(纵向),高度大于等于宽度时,landscape(横向),高度小于宽度时

特征匹配操作符
当媒体类型匹配且表达式为真的时候,对应style就会起作用:

  1. and
@media (min-width: 700px) and (orientation: landscape) {
 ...
 }
当浏览器宽度大于等于700px且为横向时CSS代码生效
  1. 逗号分隔 表示or
@media (max-width: 500px), handheld and (orientation: landscape) {
 ...
 }
当浏览器宽度小于等于500px或者手持设备且为横向时生效

media属性 限制生效

link 设置media属性

<link rel="stylesheet" type="text/css" href="styleB.css" media="screen and (min-width: 600px) and (max-width: 800px)">

picture 设置media属性

<picture>
  <source srcset="img_smallflower.jpg" media="(max-width: 400px)">
  <source srcset="img_flowers.jpg">
  <img src="img_flowers.jpg" alt="Flowers">
</picture>

Flex布局

传统的布局方式:
浮动+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 宽度比例。
  1. 设置每个grid在不同屏幕尺寸时需要占的格数。这时media queries会在不同屏幕尺寸的大小时,让每个grid显示应有的比例。比如
    即该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%;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值