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

文章目录

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

单独制作移动端页面(主流)

流式布局(百分比布局)

  • 流式布局,就是百分比布局,也称非固定像素布局。
  • 通过盒子的宽度设置成百分比来根据屏幕宽度进行伸缩,不受固定像素限制,内容向两侧填充。
  • 流式布局方式是移动web开发使用的比较常见的布局方式。

<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-scaleable=no">
    <title>流式布局title>
    <style>
        * {
      
            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;
        }
    style>
head>

<body>
    <section>
        <div>div>
        <div>div>
    section>
body>

html>

flex布局

传统布局与flex布局

  • 传统布局

    • 兼容性好
    • 布局繁琐
    • 局限性,不能在移动端很好的布局
  • flex弹性布局

    • 操作方便,布局极为简单,移动端应用广泛
    • PC端浏览器支持情况较差
    • IE11或更低版本,不支持或仅支持部分
  • 建议

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

初体验


<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
    <style>
        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;
        }
    style>
head>

<body>
    <div>
        <span>1span>
        <span>2span>
        <span>3span>
    div>
body>

html>

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移动端单独制作移动端页面布局介绍。_第1张图片

  • 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*/
}

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
    <style>
        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;
        }
    style>
head>

<body>
    <section>
        <div>div>
        <div>div>
        <div>div>
    section>
body>

html>

像这样中间灰色的盒子就将剩余空间分成一份。

  • 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文件。
  • 一个建议,我们媒体查询最好的方法是从小到大。
"stylesheet" href="mystyle.css" media="scree and (min-width: 320px)">
"stylesheet" href="mystyle.css" media="scree and (min-width: 640px)">

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;
      }
      
    • less运算:可以使用加减乘除算术运算。

      • 注意:乘号(*)除号(/),运算符的左右两侧必须有空格隔开,两个数参与运算如果只有一个数有单位,则最后的结果就以这个单位为准,两个数都有单位且不一样,最后的结果以第一个单位为准

rem适配方案

  • 让一些不能等比自适应的元素,达到当设备尺寸发生改变的时候,等比例适配当前设备。
  • 使用媒体查询根据不同设备按比例设置html的字体大小,然后页面元素使用rem做尺寸单位,当html字体大小变化元素尺寸也会发生变化,从而达到等比缩放的适配。
  • rem实际开发适配方案
    • 按照设计稿与设备宽度的比例,动态计算并设置html根标签的font-size大小(媒体查询)。
    • CSS中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为rem为单位的值。
  • rem适配方案技术使用(市场主流):
    • 技术方案1:less、媒体查询、rem。
    • 技术方案2(推荐):flexible.js、rem。
    • 总结:两种方案现在都存在、方案2更简单。

你可能感兴趣的:(web移动端)