web移动端单独制作移动端页面布局介绍。


文章目录

  • 单独制作移动端页面(主流)
    • 流式布局(百分比布局)
    • flex布局
      • 传统布局与flex布局
      • 初体验
      • flex布局原理
      • 常见父项属性
      • flex布局子项常见属性
    • rem适配布局
      • rem基础
      • 媒体查询
      • 媒体查询+rem实现元素动态大小变化
      • 引入资源(理解)
      • less基础
      • rem适配方案

单独制作移动端页面(主流) 流式布局(百分比布局)
  • 流式布局,就是百分比布局,也称非固定像素布局。
  • 通过盒子的宽度设置成百分比来根据屏幕宽度进行伸缩,不受固定像素限制,内容向两侧填充。
  • 流式布局方式是移动web开发使用的比较常见的布局方式。
流式布局 > * {margin: 0; padding: 0; }section {width: 100%; max-width: 980px; min-width: 320px; margin: 0 auto; }section div {float: left; width: 50%; height: 400px; }section div:nth-child(1) {background-color: pink; }section div:nth-child(2) {background-color: purple; } >


flex布局 传统布局与flex布局
  • 传统布局:
    • 兼容性好
    • 布局繁琐
    • 局限性,不能在移动端很好的布局
  • flex弹性布局:
    • 操作方便,布局极为简单,移动端应用广泛
    • PC端浏览器支持情况较差
    • IE11或更低版本,不支持或仅支持部分
  • 建议:
    • 如果是PC端页面布局,我们还是传统布局
    • 如果是移动端或者不考虑兼容性问题的PC端页面布局,我们还是使用flex弹性布局
初体验
Document > div {display: flex; width: 80%; height: 300px; background-color: pink; justify-content: space-around; }div span {/* width: 150px; */ height: 100px; background-color: purple; margin-right: 5px; flex: 1; }
>1 >2 >3


flex布局原理
  • flex是flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。
  • 当我们为父元素设置为flex布局以后,子元素的float、clear和vertical-align属性将失效。
  • 伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局。
  • 采用flex布局的元素,称为flex容器(flex container),简称容器。它的所有子元素将自动成为容器成员,称为flex项目,简称项目。
    • 体验中div就是flex父容器。
    • 体验中span就是子容器flex项目。
    • 子容器可以横向排列也可以纵向排列。
  • 总结:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式。
常见父项属性
  • 以下6个属性是对父元素设置的:
    • flex-derection:设置主轴的方向。
    • justify-content:设置主轴上的子元素排列方式。
    • flex-wrap:设置子元素是否换行。
    • align-content:设置侧轴上的子元素的排列方式(多行)。
    • align-items:设置侧轴上的子元素排列方式(单行)。
    • flex-flow:复合属性,相当于懂事设置了flex-directionflex-wrap
  • 主轴与侧轴:
    • 在flex不居中,是分别以主轴和侧轴两个方向,同样的叫法有:行和列,x轴和y轴。
    • 默认主轴方向就是x轴方向,水平向右。
    • 默认侧轴方向就是y轴方向,垂直向下。
  • 属性值
  • flex-direction属性决定主轴的方向(即项目的排列方式)
  • 注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的。
属性值 说明
row 默认从左到右
row-reverse 从右到左
column 从上到下
column-reverse 从下到上
div {/* 给父级添加flex属性 */ display: flex; width: 800px; height: 300px; background-color: pink; /* 默认的主轴是x轴,我们的元素是跟着主轴排列的*/ /* flex-direction: row; */ /* flex-direction: row-reverse; */ flex-direction: column; /* flex-direction: column-reverse; */ }div span {width: 150px; height: 100px; background-color: purple; }

web移动端单独制作移动端页面布局介绍。
文章图片

  • justify-content:设置主轴上的子元素排列方式。
    • justify-content属性定义了项目在主轴上的对齐方式。
    • 注意:使用这个属性之前一定要确定好那个是主轴。
属性值 说明
flex-start 默认值,从头部开始,如果主轴是x轴,则从左到右
flex-end 从尾部开始排列
center 在主轴居中对齐(如果主轴是x轴则水平居中)
space-around 平分剩余空间
space-between 先两边贴边,再平分剩余空间
  • flex-wrap:设置子元素是否换行。
    • 默认情况下,项目都排在一条线(又称"轴线")上。
    • flex-wrap属性定义,flex布局中默认是不换行的,如果装不开会缩小子元素的宽度。
属性值 说明
nowrap 默认值,不换行
wrap 换行
  • align-items:设置侧轴上的子元素排列方式(单行)
    • 该属性时控制子项在侧轴(默认是y轴)上的排列方式,在子项为单向的时候使用。
属性值 说明
flex-start 从上到下
flex-end 从下到上
center 垂直居中
stretch 拉伸(默认值)
  • align-content:设置侧轴上的子元素的排列方式(多行)
    • 设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的。
属性值 说明
flex-start 在侧轴的头部开始排列
flex-end 在侧轴的尾部开始排列
center 在侧轴中间显示
space-around 子项在侧轴平分剩余空间
space-between 子项在侧轴先分布在两头,再平分剩余空间
stretch 设置子项元素高度平分父元素高度(默认值)
  • align-contentalign-items的区别:
    • align-items使用于单行情况下,是有上对齐、下对齐、居中和拉伸。
    • align-content适用于换行(多行)情况下,单行情况下无效,可以设置上对齐、下对齐、居中、拉伸预计平均分配剩余空间等属性值。
    • 总结就是:单行找align-items,多行找align-content
  • felx-flowflex-directionflex-wrap属性的复合属性。
    • /* flex-direction: column; flex-wrap: wrap; */ flex-flow: column wrap;

    • 相当于简写。
flex布局子项常见属性
  • flex属性:定义子项目分配剩余空间,用flex来表示占多少份数。
.item { flex: ; /*default 0*/ }

Document > section {display: flex; width: 60%; height: 150px; margin: 0 auto; background-color: pink; }section div:nth-child(1) {width: 100px; height: 150px; background-color: red; }section div:nth-child(2) {flex: 1; background-color: slategray; }section div:nth-child(3) {width: 100px; height: 150px; background-color: skyblue; } >


像这样中间灰色的盒子就将剩余空间分成一份。
  • align-self:控制子项自己在侧轴上的排列方式。
    • align-self属性允许单个项目与其他项目不一样的对齐方式,可覆盖align-items属性。
    • 默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
span:nth-child(2) { /* 设置自己在侧轴上的排列方式 */ align-self: flex-end; }

  • order属性:定义项目的排列顺序。
    • 数值越小,排列越靠前,默认为0。
    • 注意:和z-index不一样。
rem适配布局 rem基础
  • rem单位
    • rem(root em)是一个相对单位,类似于em,em是父元素字体大小。
    • 不同的是rem的基准是相对与html元素的字体大小。
    • 比如,根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则会换成px表示就是24px。
  • 优势:可以通过修改html里面的文字大小来改变页面中元素大小,可以整体控制。
媒体查询
  • 什么是媒体查询?
    • 媒体查询(Media Query)是CSS3新语法。
    • 使用@media查询,可以针对不同的媒体类型定义不同的样式。
    • @media可以针对不同的屏幕尺寸设置不同的样式。
    • 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。
    • 目前针对很多苹果手机、Android手机、平板等设备都用得到多媒体查询。
  • 语法规范:
    • @media开头,注意@符号。
    • mediatype媒体类型。
    • 关键字 and not only。
    • media feature媒体特性 必须有小括号包含。
@media mediatype and|not|only (media feature) { CSS-Code; }

  • mediatype查询类型:
    • 将不同的终端设备划分成不同的类型,称为媒体类型。
解释说明
all 用于所有设备
print 用于打印机和打印预览
scree 用于电脑屏幕、平板电脑、智能手机等
  • 关键字:
    • 关键字将媒体类型或多个媒体特性连接到一起作为媒体查询的条件。
    • and:可以将多个媒体特性连接到一起,相当于"且"的意思。
    • not:排除某个媒体类型,相当于"非"的意思,可以省略。
    • only:指定某个特定的媒体类型,可以省略。
  • 媒体特性:
    • 每种媒体类型都具有各自不同的特性,根据不同类型的媒体特性设置不同的展示风格。我们暂且了解三个。注意他们要加小括号包含。
解释说明
width 定义输出设备中页面可见区域的宽度
min-width 定义输出设备中页面最小可见区域的宽度
max-width 定义输出设备中页面最大可见区域的宽度
/* 这句话的意思就是:在我们屏幕上,并且,最大的宽度是800像素 设置我们想要的样式 */@media screen and (max-width: 800px) {body {background-color: pink; } } /* 媒体查询可以根据不同的屏幕尺寸来改变不同的样式 */ @media screen and (max-width: 500px) {body {background-color: purple; } }


媒体查询+rem实现元素动态大小变化
  • rem单位是跟着html来走的,有了rem页面元素可以设置冉大小尺寸。
  • 媒体查询可以根据不同设备宽度来修改样式。
  • 媒体查询+rem就可以涉嫌不同设备宽度,实现页面元素大小的动态变化。
引入资源(理解)
  • 当样式比较繁多的时候,我们可以针对不同的媒体使用不同的stylesheets(样式表)。
  • 原理,就是直接在link中判断设备的尺寸,然后引用不同的css文件。
  • 一个建议,我们媒体查询最好的方法是从小到大。

less基础
  • less介绍:
    • less(Learn Style Sheets的缩写)是一门CSS扩展语言,也成为CSS预处理器。
    • 作为CSS的一种形式的扩展,它并没有减少CSS的功能,而是在现有的CSS语法上,为CSS加入编程式语言的特性。
    • 它在CSS的语法基础上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了CSS的编写,并且降低了CSS的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情。
    • Less中文网址
    • 常见的CSS预处理器:Sass、Less、Stylus。
    • 总结:Less是一门CSS预处理语言,它扩展了CSS的动态特性。
  • less使用:
    • 我们首先新建一个后缀名为less的文件,在这个less文件里面书写less语句。
    • less变量:变量是指没有固定的值,可以改变的。因为我们CSS中的一些颜色和数值经常相等。@变量名:值;
      • 规范:必须有@为前缀;不能包含特殊字符;不能以数字开头;大小写敏感。
    • less编译:本质上less包含一套自定义的语法以及一个解析器。用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的CSS文件。所以,我们需要把我们的less文件,编译生成为css文件,这样我们的html页面才能使用。使用vscode的easy less插件可以转换。
    • less嵌套:使用方法如下,子元素的样式直接写到父元素里面就好了。如果有伪类、伪类选择器、交集选择器,我们内层选择器的前面需要加&。
      .header { width: 200px; height: 200px; background-color: pink; a { color: red; &hover { color: blue; } } }

      转化为css:
      .header { width: 200px; height: 200px; background-color: pink; } .header a {color: red; } .header a:hover {color: blue; }

    • 【web移动端单独制作移动端页面布局介绍。】less运算:可以使用加减乘除算术运算。
      • 注意:乘号(*)除号(/),运算符的左右两侧必须有空格隔开,两个数参与运算如果只有一个数有单位,则最后的结果就以这个单位为准,两个数都有单位且不一样,最后的结果以第一个单位为准。
rem适配方案
  • 让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。
  • 使用媒体查询根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化元素尺寸也会发生变化,从而达到等比缩放的适配。
  • rem实际开发适配方案:
    • 按照设计稿与设备宽度的比例,动态计算并设置html根标签的font-size大小(媒体查询)。
    • CSS中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为rem为单位的值。
  • rem适配方案技术使用(市场主流):
    • 技术方案1:less、媒体查询、rem。
    • 技术方案2(推荐):flexible.js、rem。
    • 总结:两种方案现在都存在、方案2更简单。

    推荐阅读