如何响应式布局-初学篇
一. 弹性布局
实现弹性布局的方法
浮动+百分比
//css样式
.box{
width:100%;
border: 1px solid #000000;
padding: 10px;
}
aside{
width:30%;
float: left;
background: red;
padding: 10px;
}
article{
width: 65%;
margin-left: 10px;
float: left;
background: yellow;
}
Flex布局
在屏幕和浏览器窗口大小发生改变时,可以灵活的调整布局。
控制元素在页面的布局方向。
按照不同于DOM所指定排序方式对屏幕上的元素重新排序。
//css样式
display: flex;
常用属性:
属性 | 说明 |
---|---|
flex | 伸缩性 |
flex-direction | 伸缩流方向 |
flex-wrap | 伸缩换行 |
justify-content | 主轴对齐 |
align-items | 侧轴对齐 |
1) 伸缩性flex
flex属性的具体数值并不代表具体的宽度值, 而是一个比例值.
.box{
display: flex;
border: 1px solid #000000;
padding: 10px;
}
aside{
flex: 1;
background: red;
padding: 10px;
}
article{
flex: 1;
margin-left: 10px;
background: yellow;
}
2) 伸缩流方向 flex-direction
flex-direction : row | row-reverse | column | column-reverse ;
row : 默认值, 元素从左到右排列
row-reverse: 元素从右到左排列
column :元素从上到下排列
column-reverse: 元素从下到上排列
3) 伸缩换行 flex-wrap
flex-wrap: nowrap | wrap | wrap-reverse ;
nowrap: 默认值, 伸缩容器单行显示, 伸缩项目不会换行
wrap: 伸缩容器多行显示, 伸缩项目会换行
wrap-reverse: 伸缩容器多行显示, 伸缩项目会换行, 且颠倒行顺序
4) 主轴对齐 justify-content
设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式 (适用于父类容器上)。
justify-content: flex-start | flex-end | center | space-between | space-around ;
flex-start: 默认值。项目位于容器的开头。让子元素从父容器的开头开始排序
flex-end: 项目位于容器的结尾。让子元素从父容器的后面开始排序
center: 项目位于容器的中心。让子元素在父容器中间显示
space-between: 项目位于各行之间留有空白的容器内。左右的盒子贴近父盒子,中间的平均分布空白间距
space-around: 项目位于各行之前、之间、之后都留有空白的容器内。相当于给每个盒子添加了左右margin外边距
5) 侧轴对齐 align-items
设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式
align-items: flex-start| flex-end| center| stretch| baseline ;
stretch :如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。
center :弹性盒子元素在该行的侧轴(纵轴)上居中放置。
flex-start :弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴(纵轴)起始边界。
flex-end :弹性盒子元素的侧轴(纵轴)结束位置的边界紧靠住该行的侧轴(纵轴)结束边界。
baseline :如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐。
二. 响应式布局的实现方式及应用
媒体查询
媒体类型
值 | 设备类型 |
---|---|
All | 所有设备 |
Braille | 盲人用点字法触觉回馈设备 |
Embossed | 盲人打印机 |
Handheld | 便携设备 |
打印用纸或打印预览视图 | |
Projection | 各种投影设备 |
Screen | 电脑显示器 |
Speech | 语音或音频合成器 |
Tv | 电视机类型设备 |
Tty | 使用固定密度字母栅格的媒介,比如电传打字机和终端 |
常用的有 all, screen, print 三种
媒体类型的引入方式
@media方式
@media 媒体类型 {
选择器{/*样式代码写在这里...*/}
}
link方式
<link href = "style1.css" rel="stylesheet"/>
媒体特性
媒体特性是CSS3对媒体类型的增强版
可以将媒体特性看成 “媒体类型(判断条件) + CSS (符合条件的样式规则) "
@media 媒体类型 and (媒体特征) {CSS样式}
属性 | 值 | Min/Max | 描述 |
---|---|---|---|
device-width | Length | Yes | 设置屏幕的输出宽度 |
device-height | Length | Yes | 设置屏幕的输出高度 |
width | Length | Yes | 渲染界面的宽度 |
height | Length | Yes | 渲染界面的高度 |
Orientation | Portrait/andscape | No | 横屏或竖屏 |
Resolution | 分辨率(dpildpcm) | Yes | 分辨率 |
Color | 整数 | Yes | 每种色彩的字节数 |
color-index | 整数 | Yes | 色彩表中的色彩数 |
关键词
and :同时满足这两者时生效,到达限定范围
@media screen and ( max-width: 1200px) {样式代码..}
only :指定某种特定的媒体类型,可以用来排除不支持媒体查询的浏览器
<link href = "style1.css" media =”only screen and (max- width: 500px)"/>
not :排除某种指定的媒体类型,即排除符合表达式的设备
@media not print and ( max- width: 1200px) {样式代码..}
媒体查询的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*大于1024px*/
@media all and (min-width: 1024px){
.box{
width: 1024px;
padding: 30px;
margin: 10px auto 0;
background: red;
}
h2{
font-size: 28px;
}
h2 strong{
font-size: 14px;
color: silver;
float: right;
margin-right: 30px;
}
.list{
margin-top: 30px;
display: flex;
justify-content: space-around;
}
.list li img{
width: 90%;
}
.list li p{
font-size: 12px;
}
}
/*640px到1023px*/
@media all and (min-width: 640px) and (max-width: 1023px){
.box{
width: 640px;
padding: 24px;
margin: 10px auto 0;
background: yellow;
display: flex;
flex-direction: column;
}
h2{
font-size: 20px;
}
h2 strong{
font-size: 16px;
color: silver;
float: right;
margin-right: 24px;
}
.list{
margin-top: 30px;
display: flex;
flex-wrap: wrap;
}
.list li img{
width: 90%;
}
.list li p{
font-size: 14px;
}
}
/*320px到639px*/
@media all and (min-width: 320px) and (max-width: 639px){
.box{
width: 320px;
padding: 20px;
margin: 10px auto 0;
background: blue;
display: flex;
flex-direction: column;
}
h2{
font-size: 22px;
}
h2 strong{
font-size: 18px;
color: silver;
float: right;
margin-right: 20px;
}
.list{
margin-top: 30px;
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.list li img{
width: 100%;
}
.list li p{
font-size: 16px;
}
}
</style>
</head>
<body>
<div class="box">
<h2>热门活动<strong>更改</strong></h2>
<ul class="list">
<li>
<img src="/pic/1595039824696_hxy.jpg" width="250px">
<p>推荐活动 | 原创音乐现金榜T榜</p>
</li>
<li>
<img src="/pic/1595039824696_hxy.jpg" width="250px">
<p>推荐节目 | TAImusic爆笑来袭</p>
</li>
</ul>
</div>
</body>
</html>