移动端体验

1. flex布局体验

flex-direction:设置主轴的方向

justify-content:设置主轴上的子元素排列方式

flex-wrap:设置子元素是否换行

align-content:设置侧轴上的子元素的排列方式(多行)

align-items:设置侧轴上的子元素排列方式(单行)

flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap

1.1 传统布局与flex布局

传统布局

1.兼容性好

2.布局繁琐

3.局限性,不能再移动端很好的布局

flex 弹性布局

操作方便,布局极为简单,移动端应用很广泛

PC 端浏览器支持情况较差

IE 11或更低版本,不支持或仅部分支持

建议:

  1. 如果是PC端页面布局,我们还是传统布局。

  2. 如果是移动端或者不考虑兼容性问题的PC端页面布局,我们还是使用flex弹性布局

2.1 布局原理

flex 是 flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局。

1.当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。

2.伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局

总结flex布局原理:

就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式

3.1 常见父项属性

以下由6个属性是对父元素设置的

 flex-direction:设置主轴的方向

 justify-content:设置主轴上的子元素排列方式

 flex-wrap:设置子元素是否换行

 align-content:设置侧轴上的子元素的排列方式(多行)

 align-items:设置侧轴上的子元素排列方式(单行)

 flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap

3.2 flex-direction 设置主轴的方向

​ flex-direction 属性决定主轴的方向(即项目的排列方向)

​ 注意: 主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的。

row 从左到右

row-reverse 从右到左

column 从上到下

column 从下到上

3.3 justify-content 设置主轴上的子元素排列方式

justify-content 属性定义了项目在主轴上的对齐方式

注意: 使用这个属性之前一定要确定好主轴是哪个

flex-start 默认值从头部开始 如果主轴是x轴,则从左到右

flex-end 从尾部开始排列

center 在主轴居中对齐(如果主轴是x,则水平居中)

space-around 平分剩余空间

space-between 先两边贴边 再平分剩余空间

3.4 flex-wrap 设置子元素是否换行

默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,flex布局中默认是不换行的。

nowrap 不换行

wrap 换行

3.5 align-items 设置侧轴上的子元素排列方式(单行 )

该属性是控制子项在侧轴(默认是y轴)上的排列方式 在子项为单项(单行)的时候使用

flex-start 默认值 从上到下

flex-end 从下到上

center 挤在一起剧中(垂直)

strech 拉伸

3.6 align-content 设置侧轴上的子元素的排列方式(多行)

设置子项在侧轴上的排列方式 并且只能用于子项出现 换行 的情况(多行),在单行下是没有效果的。

flex-start 默认值在侧轴的头部开始排列

flex-end 在侧轴的尾部开始排列

center 在侧轴中间显示

space-around 子项在侧轴评分剩余空间

space-between 子项在侧轴先分布在两头,再平分剩余空间

stretch 设置子元素高度平分父元素高度

3.6 align-content 和 align-items 区别

  1. align-items 适用于单行情况下, 只有上对齐、下对齐、居中和 拉伸

  2. align-content 适应于换行(多行)的情况下(单行情况下无效), 可以设置 上对齐、 下对齐、居中、拉伸以及平均分

配剩余空间等属性值。

总结就是单行找 align-items 多行找 align-content

3.7 flex-flow

flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性

flex-flow: now wrap;

2. flex布局子项常见属性

  1. flex 子项目占的份数

flex 属性定义子项目分配剩余空间,用flex来表示占多少份数。

.item {
 flex : <number>; //default 0  默认为0 越大占的空间份数越多
}
  1. align-self 控制子项自己在侧轴的排列方式

    align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。

    默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。

    span:nth-child(2){
    // 设置自己在侧轴的排列方式
    align-self:flex-end;
    }
    
  1. order属性定义子项的排列顺序(前后顺序)

​ 数值越小,排列越靠前,默认为0。

​ 注意:和 z-index 不一样。

.item {
    order : <number>; //数值越小越靠前 默认为0
}

2.1. 背景线性渐变

背景渐变必须添加浏览器私有前缀

background:-webkit-linear-gradient(left,red,blue) 从左到右 由红色渐变为蓝色

起始方向可以是:方位名词或者度数,如果省略默认为top top left,左上角

3. 移动端--rem适配布局

3.1. 1. rem 基础

rem 单位

rem (root em)是一个相对单位,类似于em,em是父元素字体大小。

不同的是rem的基准是相对于html元素的字体大小。

比如,根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则换成px表示就是24px。

rem的优势:父元素文字大小可能不一致, 但是整个页面只有一个html,可以很好来控制整个页面的元素大小。

/* 根html 为 12px */
html {
font-size: 12px;
}
/* 此时 div 的字体大小就是 24px */
div {
font-size: 2rem;
}

2. 媒体查询

媒体查询(Media Query)是CSS3新语法。

使用 @media 查询,可以针对不同的媒体类型定义不同的样式

@media 可以针对不同的屏幕尺寸设置不同的样式

当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面

目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询

2.2 语法规范

用 @media 开头 注意@符号

mediatype 媒体类型

关键字 and not only

media feature 媒体特性 必须有小括号包含

2.2.1. mediatype 查询类型

将不同的终端设备划分成不同的类型,称为媒体类型

all 用于所有设备

print 用于打印机和打印预览

screen 用于电脑屏幕,平板电脑,智能手机

2.2.2. 关键字

关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。

and:可以将多个媒体特性连接到一起,相当于“且”的意思。

not:排除某个媒体类型,相当于“非”的意思,可以省略。

only:指定某个特定的媒体类型,可以省略。

3. 媒体特性

每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂且了解三个。注意他们要加小括号包含

width min-width max-width

2.3 媒体查询+rem实现元素动态大小变化

rem单位是跟着html来走的,有了rem页面元素可以设置不同大小尺寸

媒体查询可以根据不同设备宽度来修改样式

媒体查询+rem 就可以实现不同设备宽度,实现页面元素大小的动态变化

2.4 引入资源(理解)

当样式比较繁多的时候,我们可以针对不同的媒体使用不同 stylesheets(样式表)。

原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。

//语法规范
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">

//示例
<link rel="stylesheet" href="styleA.css" media="screen and (min-width: 400px)">

3.2. 2. Less 基础

2.1 Less 介绍

Less (Leaner Style Sheets 的缩写) 是一门 CSS 扩展语言,也成为CSS预处理器。

做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法上,为CSS加入程序式语言的

特性。

它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且

降低了 CSS 的维护成本,就像它的名称所说的那样,Less 可以让我们用更少的代码做更多的事情。

Less中文网址: Less 中文网

常见的CSS预处理器:Sass、Less、Stylus

2.2 Less 安装

① 安装nodejs,可选择版本(8.0),网址:下载 | Node.js 中文网

② 检查是否安装成功,使用cmd命令(win10 是 window +r 打开 运行输入cmd) --- 输入“ node –v ”查看版本即可

③ 基于nodejs在线安装Less,使用cmd命令“ npm install -g less ”即可

④ 检查是否安装成功,使用cmd命令“ lessc -v ”查看版本即可

我们首先新建一个后缀名为less的文件, 在这个less文件里面书写less语句。

2.3Less 使用

Less 变量

Less 编译

Less 嵌套

Less 运算

2.4 Less 变量

变量是指没有固定的值,可以改变的。因为我们CSS中的一些颜色和数值等经常使用。

@变量名:值;

2.4.1 变量命名规范

必须有@为前缀

不能包含特殊字符

不能以数字开头

大小写敏感

@color:pink;

2.4.2 变量使用规范

//直接使用
body{
color:@color;
}
a:hover{
color:@color;
}

2.5 Less 编译

本质上,Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则

最终会通过解析器,编译生成对应的 CSS 文件。

所以,我们需要把我们的 less文件,编译生成为css文件,这样我们的html页面才能使用。

2.6 Less 嵌套

#header {
    //1.less嵌套 子元素的样式可以直接写到父元素的里面
    .logo {
    width: 300px;
    }
}

//2.如果有伪类、交集选择器、伪元素选择器,我们内层选择器的前面需要加&
//  不加的话会被解析为父选择器的后代
a{
    &:hover{
    color:red;
    } 
}

2.7 Less 运算

任何数字、颜色或者变量都可以参与运算。就是Less提供了加(+)、减(-)、乘(*)、除(/)算术运算。

/*Less 里面写*/
@witdh: 10px + 5;
div {
border: @witdh solid red;
}
/*生成的css*/
div {
border: 15px solid red;
}
/*Less 甚至还可以这样 */
width: (@width + 5) * 2;

注意

乘号(*)和除号(/)的写法

运算符中间左右有个空格隔开 1px + 5

对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位

如果两个值之间只有一个值有单位,则运算结果就取该单位

3.3. 3. rem 适配方案

3.1 rem 适配方案技术使用(市场主流)

技术方案1

less

媒体查询

rem

技术方案2(推荐)

flexible.js

rem

总结:

  1. 两种方案现在都存在。

  2. 方案2 更简单,现阶段大家无需了解里面的js代码。

    适配方案1 : 动态设置 html 标签 font-size 大小

① 假设设计稿是750px

② 假设我们把整个屏幕划分为15等份(划分标准不一可以是20份也可以是10等份)

③ 每一份作为html字体大小,这里就是50px

④ 那么在320px设备的时候,字体大小为320/15 就是 21.33px

⑤ 用我们页面元素的大小 除以不同的 html 字体大小会发现他们比例还是相同的

⑥ 比如我们以 750为标准设计稿

⑦ 一个100100像素的页面元素 在 750屏幕下, 就是 100 / 50 转换为rem 是 2rem 2 rem 比例是 1比1

⑧ 320屏幕下, html 字体大小为 21.33 则 2rem = 42.66px 此时宽和高都是 42.66 但是 宽和高的比例还是 1比1

⑨ 但是已经能实现不同屏幕下 页面元素盒子等比例缩放的效果

元素大小取值方法

① 最后的公式: 页面元素的rem值 = 页面元素值(px) / (屏幕宽度 / 划分的份数)

② 屏幕宽度/划分的份数 就是 html font-size 的大小

③ 或者: 页面元素的rem值 = 页面元素值(px) / html font-size 字体大小

4. vw vh 体验

4.1.1. 相对单位

相对视口的尺寸计算结果

vw:viewport width

1vw = 1/100视口宽度

vh:viewport height

1vh = 1/100视口高度

4.1.1.1. 目标:实现在不同宽度的设备中,网页元素尺寸等比缩放效果

vw单位尺寸

  1. 确定设计稿对应的vw尺寸 (1/100视口宽度)

    查看设计稿宽度 → 确定参考设备宽度 (视口宽度) → 确定vw尺寸 (1/100 视口宽度)

  2. vw单位的尺寸 = px单位数值 / ( 1/100 视口宽度 )

vw单位尺寸

  1. 确定设计稿对应的vw尺寸 (1/100视口宽度)

    查看设计稿宽度 → 确定参考设备宽度 (视口宽度) → 确定vw尺寸 (1/100 视口宽度)

  2. vw单位的尺寸 = px单位数值 / ( 1/100 视口宽度 )

  vh单位尺寸

  1. 确定设计稿对应的vh尺寸 (1/100视口高度)

   查看设计稿宽度 → 确定参考设备高度 (视口高度) → 确定vh尺寸 (1/100 视口高度)

  2. vh单位的尺寸 = px单位数值 / ( 1/100 视口高度 )

4.1.1.2. 了解 rem 和 vw / vh 的区别

rem : 市场比较常见:

需要不断修改html文字大小

需要媒体查询media

需要 flexible.js

vw/vh : 将来趋势

省去各种判断和修改

代表:b站..

5. 响应式 bootstrap体验

BootStrap 使用步骤

1: 引入 :bootstrap提供的css代码

<limk rel= "stylesheet" href="./bootstrap-3.3.7/css/bootstrap.min.css">

2: 调用类 :使用BootStrap提供的样式

container : 响应式布局版心类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值