移动端视口设置
<!--移动端视口设置 初始化大小 和 禁止缩放
Width属性,用来设置视口的宽度 device-width特殊值 定义输出设备的屏幕可见宽度
initial-scale 初识缩放比
maximum-scale 最大缩放比
minimum-scale 最小缩放比
user-scalable 用户是否可以进行缩放-->
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
css3盒模型
/*CSS3盒子模型 CSS3盒子模型: 盒子的宽度 = CSS中设置的宽度width 里面包含了 border 和 padding*/
box-sizing: border-box;
/*传统盒子模型 传统模式宽度计算:盒子的宽度 = CSS中设置的width + border + padding */
box-sizing: content-box;
/*常规用的特殊样式*/
/*点击高亮我们需要清除清除 设置为transparent 完成透明*/
-webkit-tap-highlight-color: transparent;
/*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/
-webkit-appearance: none;
/*禁用长按页面时的弹出菜单*/
img,a { -webkit-touch-callout: none; }
单独制作移动端页面
流式布局
流式布局,就是百分比布局,也称非固定像素布局。
通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充。
流式布局中通过max-width和min-width设置宽度最大宽度和最新宽度
max-width 最大宽度 (max-height 最大高度)
min-width 最小宽度 (min-height 最小高度)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<title>流式布局</title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
body{
width: 100%;
min-width: 320px;
max-width: 640px;
margin: 0 auto;
box-sizing: border-box;
}
#app{
height: 45px;
}
#app ul li{
float: left;
height: 45px;
background: #333;
}
#app li:nth-child(1){
width: 8%;
}
#app li:nth-child(2){
width: 10%;
}
#app li:nth-child(3){
width: 57%;
}
#app li:nth-child(4){
width: 25%;
}
</style>
</head>
<body>
<div id="app">
<ul>
<li>8</li>
<li>10</li>
<li>57</li>
<li>25</li>
</ul>
</div>
</body>
</html>
flex弹性布局
flex意为”弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局。
当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
通过对父元素设置display:flex将父元素设置为弹性布局
父项常见属性
flex-direction:设置主轴的方向
justify-content:设置主轴上的子元素排列方式
flex-wrap:设置子元素是否换行
align-items:设置侧轴上的子元素排列方式(单行)
align-content:设置侧轴上的子元素的排列方式(多行)
flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
flex-direction
属性值 设置主轴的方向 | 含义 |
---|---|
row | 默认从左到右 |
row-reverse | 从右到左 |
column | 从上到下 |
column-reverse | 从下到上 |
justify-content
属性值 设置主轴上的子元素排列方式 | 含义 |
---|---|
flex-start | 默认值 从头部开始 如果主轴是X轴 则从左到右 |
flex-end | 从尾部开始排列 |
center | 在主轴居中对齐 |
space-around | 平分剩余空间 |
space-between | 先两边贴边 在平分剩余空间 |
flex-wrap
属性值 设置子元素是否换行 | 含义 |
---|---|
nowrap | 默认值 不换行(如果装不开会缩小子元素的宽度) |
wrap | 换行 |
align-items
属性值 设置侧轴上的子元素排列方式(单行) | 含义 |
---|---|
flex-start | 从侧轴头开始 |
flex-end | 从侧轴尾部开始排列 |
center | 侧轴居中显示 |
stretch | 拉伸 |
align-content
属性值 设置侧轴上的子元素排列方式(多行) | 含义 |
---|---|
flex-start | 从侧轴的头部开始排列 |
flex-end | 从侧轴的尾部开始排列 |
center | 在侧轴居中对齐 |
space-around | 平分侧轴的剩余空间 |
space-between | 先两边贴边 在平分剩余侧轴的空间 |
子项常见属性
属性 | 值 | 含义 |
---|---|---|
flex | 默认值为0 可以通过整数进行设置 也可写百分比 | 分配剩余空间用flex来表示占多少份数 |
align-self | 与align-items属性值相同 | 子项自己在侧轴上的位置可以覆盖父项设计 |
order | 默认值为0 可以通过整数进行设置 | 设置子项的排列位置 越小越靠前 |
flex布局中图片在上文字在下布局思路
默认主轴是X轴—-通过flex-direction:colum将主轴设为Y轴—-通过juesity-content:center居中对齐
实现代码
<style>
.local-nav {
height: 64px;
background: #fff;
border-radius: 8px;
margin: 3px 4px;
/*对ul设置flex布局 让下面的li进行横向排列*/
display: flex;
}
.local-nav li {
/*让li平分ul剩余宽度*/
flex: 1;
padding: 0;
margin: 0;
}
.local-nav li a {
/*将li中的a标签设置成flex 将主轴设为Y 实现上图下字效果*/
display: flex;
flex-direction: column;
/*设置侧轴 也就是X轴居中 就是让图片居中*/
align-items: center;
}
.local-nav-icon {
width: 32px;
height: 32px;
background: #42b983;
margin-top: 8px;
background: url("./images/localnav_bg.png") no-repeat 0 0;
background-size: 32px;
}
</style>
<ul class="local-nav">
<li>
<a href="#">
<span class="local-nav-icon"></span>
<span>景点玩乐</span>
</a>
</li>
<li>
<a href="#">
<span class="local-nav-icon"></span>
<span>景点玩乐</span>
</a>
</li>
</ul>
less+rem+媒体查询布局
rem
rem (root em)是一个相对单位不同的是rem的基准是相对于html元素的字体大小。
比如,根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则换成px表示就是24px
rem的优势:父元素文字大小可能不一致, 但是整个页面只有一个html,可以很好来控制整个页面的元素大小。
媒体查询
- 使用 @media查询,可以针对不同的媒体类型定义不同的样式
- @media 可以针对不同的屏幕尺寸设置不同的样式
- 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
- 目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询
@media mediatype and|not|only (media feature) {
CSS-Code;
}
- mediatype 查询类型
将不同的终端设备划分成不同的类型,称为媒体类型
all 用于索引设备
print 用于打印机和打印预览
screen 用于电脑屏幕 平板电脑 智能手机等
关键字
关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。
- and:可以将多个媒体特性连接到一起,相当于“且”的意思。
- not:排除某个媒体类型,相当于“非”的意思,可以省略。
- only:指定某个特定的媒体类型,可以省略。
- 媒体特性
每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个。
注意他们要加小括号包含
width: 定义输出设备中页面可见区域宽度
min-width:定义输出设备中页面最小可见区域宽度
max-width:定义输出设备中页面最大可见区域宽度
<style>
/*@media 屏幕上 且最大宽度为800px max-width:800px 宽度<800px body显示为红色*/
@media screen and (max-width: 800px) {
body {
background-color: #fa5a55;
}
}
</style>
媒体查询引入资源
根据不同的屏幕尺寸调用不同的CSS文件—-响应式可以使用这种方式<link rel="stylesheet" href="./media1.css" media="screen and (min-width:320px)">
<link rel="stylesheet" href="./media2.css" media="screen and (min-width:640px)">
响应式布局
媒体查询
- 响应式布局的容器 固定宽度
- 大屏 ( >=1200px) 宽度定为 1170px
- 中屏 ( >=992px) 宽度定为 970px
- 小屏 ( >=768px) 宽度定为 750px
-
Bootstarp
bootstrap布局容器
Bootstrap 需要为页面内容和栅格系统包裹一个 .container 或者.container-fluid 容器,它提供了两个作此用处的类。
.container 响应式布局的容器 固定宽度
- 大屏 ( >=1200px) 宽度定为 1170px
- 中屏 ( >=992px) 宽度定为 970px
- 小屏 ( >=768px) 宽度定为 750px
- 超小屏 (100%)
| | 超小屏幕 手机 (<768px) | 小屏幕 平板 (≥768px) | 中等屏幕 桌面显示器 (≥992px) | 大屏幕 大桌面显示器 (≥1200px) |
| --- | --- | --- | --- | --- |
| 栅格系统行为 | 总是水平排列 | 开始是堆叠在一起的,当大于这些阈值时将变为水平排列C | | |
| `.container`
最大宽度 | None (自动) | 750px | 970px | 1170px | | 类前缀 |.col-xs-
|.col-sm-
|.col-md-
|.col-lg-
|
<div class="container">
<div class="row">
<div class="col-md-3">1</div>
<div class="col-md-3">2</div>
<div class="col-md-3">3</div>
<div class="col-md-3">4</div>
</div>
</div>
超小屏幕手机 (<768px) | 小屏幕平板 (≥768px) | 中等屏幕桌面 (≥992px) | 大屏幕桌面 (≥1200px) | |
---|---|---|---|---|
.visible-xs-* |
可见 | 隐藏 | 隐藏 | 隐藏 |
.visible-sm-* |
隐藏 | 可见 | 隐藏 | 隐藏 |
.visible-md-* |
隐藏 | 隐藏 | 可见 | 隐藏 |
.visible-lg-* |
隐藏 | 隐藏 | 隐藏 | 可见 |
.hidden-xs |
隐藏 | 可见 | 可见 | 可见 |
.hidden-sm |
可见 | 隐藏 | 可见 | 可见 |
.hidden-md |
可见 | 可见 | 隐藏 | 可见 |
.hidden-lg |
可见 | 可见 | 可见 | 隐藏 |
.container-fluid
- 流式布局容器 百分百宽度
- 占据全部视口(viewport)的容器。
列偏移
使用.col-md-offset-*
类可以将列向右侧偏移。这些类实际是通过使用*
选择器为当前元素增加了左侧的边距(margin)。例如,.col-md-offset-4
类将.col-md-4
元素向右侧偏移了4个列(column)的宽度。<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 col-md-offset-4">.col-md-4 .col-md-offset-4</div>
</div>
<div class="row">
<div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div>
<div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">.col-md-6 .col-md-offset-3</div>
</div>