初步了解六 Flex、web

flex伸缩布局与移动web开发

流式布局(百分比布局),flex 弹性布局(强烈推荐),less+rem+媒体查询布局,混合布局

一 移动web开发:流式布局(百分比布局,非固定像素布局)

  1. 视口(viewport)
    定义:视口(viewport)就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口。

    1. 布局视口 layout viewport
      一般移动设备的浏览器都默认设置了一个布局视口,用 于解决早期的PC端页面在手机上显示的问题。
      iOS, Android基本都将这个视口分辨率设置为 980px,所以PC上的网页大多都能在手机上呈现,只不过元素看上去很小,一般默认可以通过手动缩放网页。
    2. 视觉视口 visual viewport
      字面意思,它是用户正在看到的网站的区域。注意:是网站的区域。
      我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度。
    3. 理想视口 ideal viewport
      1.为了使网站在移动端有最理想的浏览和阅读宽度而设定理想视口,对设备来讲,是最理想的视口尺寸。
      2.需要手动添写meta视口标签通知浏览器操作
      3.meta视口标签的主要目的:布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们布局的视口就多宽
      总结:我们开发最终会用理想视口,而理想视口就是将布局视口的宽度修改为视觉视口
    4. meta标签
      例:
      {meat name=“viewport” (meat标签名是 视口)
      content=“width=device-witch,(内容 宽度=设备的宽度 自适应)
      user-scalable=no, (用户不可以缩放)
      initial-scale=1.0, (初始化没有缩放比)
      maximum-scale=1.0,(最大缩放比为1 不可放大)
      minimun-scale=1.0”}(最小缩放比为1 不可缩小)
      初步了解六 Flex、web_第1张图片
      最标准的viewport设置:
      视口宽度和设备保持一致
      视口的默认缩放比例1.0
      不允许用户自行缩放
      最大允许的缩放比例1.0
      最小允许的缩放比例1.0
  2. 二倍图

    1. 物理像素&物理像素比
      物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。
      开发时候的1px 不是一定等于1个物理像素

    2. 一个px的能显示的物理像素点的个数,称为物理像素比或屏幕像素比。
      如果把1张100*100的图片放到手机里面会按照物理像素比给我们缩放

    3. lRetina(视网膜屏幕)是一种显示技术,可以将把更多的物理像素点压缩至一块屏幕里,从而达到更高的分辨率,并提高屏幕显示的细腻程度。
      1.对于一张 50px * 50px 的图片,在手机或 Retina 屏中打开,按照刚才的物理像素比会放大倍数,这样会造成图片模糊
      2.在标准的viewport设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题
      3.通常使用二倍图, 因为iPhone 6 的影响背景图片 注意缩放问题

    4. 背景缩放background-size
      background-size 属性规定背景图像的尺寸
      background-size: 背景图片宽度 背景图片高度;

      1. 单位:长度|百分比|cover|contain;
        1.cover把背景图像扩展至足够大,以使背景图像完全覆盖背景区域(最短处在背景上平铺)。
        2.contain把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域(最长处在背景上平铺)。
  3. 移动开发选择和技术解决方案

    1. 单独制作移动端页面(主流)
      通常情况下,网址域名前面加 m(mobile)
      可以打开移动端。通过判断设备,如果是移动设备打开,则跳到移动端页面。
      也就是说,PC端和移动端为两套网站,pc端是pc断的样式,移动端在写一套,专门针对移动端适配的一套网站

    2. 响应式页面兼容移动端(其次)
      响应式网站:即pc和移动端共用一套网站,只不过在不同屏幕下,样式会自动适配。

    3. 移动端技术解决方案
      移动端浏览器基本以 webkit 内核为主,因此我们就考虑webkit兼容性问题。
      我们可以放心使用 H5 标签和 CSS3 样式。
      同时我们浏览器的私有前缀我们只需要考虑添加 webkit 即可。

    4. 移动端公共样式
      移动端 CSS 初始化推荐使用 normalize.css/
      Normalize.css:保护了有价值的默认值
      Normalize.css:修复了浏览器的bug
      Normalize.css:是模块化的
      Normalize.css:拥有详细的文档
      官网地址: http://necolas.github.io/normalize.css/

    5. 移动端大量使用 CSS3盒子模型box-sizin
      传统模式宽度计算:盒子的宽度 = CSS中设置的width + border + padding 。
      CSS3盒子模型: 盒子的宽度= CSS中设置的宽度width 里面包含了 border 和 padding。
      也就是说,我们的CSS3中的盒子模型, padding 和 border 不会撑大盒子了。移动端可以全部CSS3 盒子模型

      1. CSS3盒子模型
        box-sizing: border-box;
      2. 传统盒子模型
        box-sizing: content-box;
    6. 移动端特殊样式

      1. CSS3盒子模型
        box-sizing: border-box;
        -webkit-box-sizing: border-box;
      2. 点击高亮我们需要清除清除 设置为transparent 完成透明
        -webkit-tap-highlight-color: transparent;
      3. 在移动端浏览器默认的外观在iOS上加上这个属性才能给按 钮和输入框自定义样式
        -webkit-appearance: none;
      4. 禁用长按页面时的弹出菜单
        img,a { -webkit-touch-callout: none; }

    flex 弹性布局

    1. 特点 :
      操作方便,布局极其简单,移动端使用比较广泛,如果是pc端页面布局,还是采用传统方式,如果是移动端或者是不考虑兼容的pc则采用flex。

    2. flex布局原理

      1. flex 是 flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局。
      2. 当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
      3. 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。
    3. 父项常见属性(重点)
      flex-direction:设置主轴的方向;
      justify-content:设置主轴上的子元素排列方式
      flex-wrap:设置子元素是否换行
      align-content:设置侧轴上的子元素的排列方式(多行)
      align-items:设置侧轴上的子元素排列方式(单行)
      flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap

      1. flex-direction设置主轴的方向
        在 flex 布局中,是分为主轴和侧轴两个方向,同样的叫法有 : 行和列、x 轴和y 轴。

        默认主轴方向就是 x 轴方向,水平向右
        默认侧轴方向就是 y 轴方向,水平向下

        注意: 主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的
        1:row 默认值 从左到右
        2:row-reverse 从右到左
        3:column 从上到下
        4:column-reverse 从下到上

      2. justify-content 设置主轴上的子元素排列方式
        flex-start 默认值 从头开始 如果主轴是X轴,则从左到右
        flex-end 从尾部开始排列
        center 在主轴居中对齐(如果主轴是X轴则水平居中)
        space-around 平分剩余空间
        space-between 先两边贴边,再平分剩余空间
        space-evenly 直接平分剩余空间(不以子元素的盒子为标准)

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

      4. align-items 设置侧轴上的子元素排列方式(单行)
        该属性是控制子项在侧轴(默认是Y轴)上的排列方式 在子项为单项(单行)的时候使用
        flex-start 从头部开始
        flex-end 从尾部开始
        center 居中显示
        stretch 拉伸

      5. align-content 设置侧轴上的子元素的排列方式(多行)
        设置子项在侧轴上的排列方式 并且只能用于子项出现 换行的情况(多行),在单行下是没有效果的。
        flex-start 默认值 在侧轴的头部开始排列
        flex-end 在侧轴的尾部开始排列
        center 在侧轴中间显示
        space-around 子项在侧轴平分剩余空间
        space-between 子项在侧轴先分布在两头,再平分剩余空间
        stretch 设置子项元素高度平分父元素高度

      6. align-content与align-items的区别
        align-items 适用于单行情况下,只有上对齐、下对齐、居中和拉伸
        align-centent 适应于换行(多行)的情况下(单行情况下无效),可以设置 上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。
        总结 : 单行找align-items 多行找align-centent

      7. flex-flow属性是flex-direction和flex-wrap属性的复合属性
        flex-flow :row wrap;

    4. flex布局中 子项的常见属性
      flex 子项目占的份数
      align-self 控制子项自己在侧轴的排列方式
      order 定义子项的排列顺序(前后顺序)

      1. flex 属性
        flex 属性定义子项目分配剩余空间,用flex来表示占多少份(也可以用百分比定义,常用于flex的多行表示)
        例:item {
        flex:number
        }

      2. align-self 控制子项自己在侧轴上的排列方式
        align-self 属性允许单个项目有于其他项目不一样的对齐方式,可覆盖align-items 属性。
        默认值为auto 表示继承父元素的align-items属性,如果没有父元素,则等于stretch (拉伸)。
        例:
        span:nth-child(2){
        /设置自己在侧轴的排列顺序/
        align-self:flex-end;
        }

      3. order 属性定义项目的排列顺序
        数字越小,排列越靠前,默认为0,数字可以为负数。可以交换盒子之间的前后顺序
        注意:和z-index 不一样。
        .item {
        order : number;
        }

      4. 常见初始化样式
        body {
        max-width:540px;
        min-width:320px;
        margin: 0 auto;
        font: normal 14px/1.5 Tahoma,“Lucida Giamde”,Verdana,“Microsoft Yahei”,STXihei,hei;
        color: #000;
        background:#f2f2f2;
        overflow:hidden;
        -webkit-tap-highlight-color:transparent;
        }

rem布局

  1. rem单位
    rem(root em)是一个相对单位,类似于em,不同的是em是相对父元素字体的大小;rem是相对html元素的字体大小。
    例如:根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则换成px表示就是24px。
    rem的优势:父元素文字大小可能不一致, 但是整个页面只有一个html,可以很好来控制整个页面的元素大小。

  2. 媒体查询(Media Query)

    1. 媒体查询(Media Query)是CSS3新语法。
      特点 :+ 使用 @media查询,可以针对不同的媒体类型定义不同的样式。
      @media 可以针对不同的屏幕尺寸设置不同的样式。
      当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面 。
      目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询。

    2. 媒体查询语法规范
      用 @media开头 注意@符号;
      mediatype 媒体类型
      关键字 and not only
      media feature 媒体特性必须有小括号包含
      例 :
      @media mediatype and|not|only (media feature) {
      CSS-Code;
      }

    3. mediatype 查询类型
      将不同的终端设备划分成不同的类型,称为媒体类型
      初步了解六 Flex、web_第2张图片

    4. 关键字
      关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。
      1.and:可以将多个媒体特性连接到一起,相当于“且”的意思。
      2.not:排除某个媒体类型,相当于“非”的意思,可以省略。
      3.only:指定某个特定的媒体类型,可以省略。

    5. 媒体特性
      每种媒体类型都具体各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。
      初步了解六 Flex、web_第3张图片

    6. 媒体查询书写规则
      注意: 为了防止混乱,媒体查询我们要按照从小到大或者从大到小的顺序来写

  3. less 基础(LeanerStyle Sheets)

    1. 维护css弊端
      CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。
      CSS 需要书写大量看似没有逻辑的代码,CSS 冗余度是比较高的。
      不方便维护及扩展,不利于复用。
      CSS 没有很好的计算能力
      非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码项目。
    2. Less 介绍
      1. Less(LeanerStyle Sheets 的缩写)是一门 CSS扩展语言,也成为CSS预处理器。
        做为 CSS的一种形式的扩展,它并没有减少CSS的功能,而是在现有的CSS语法上,为CSS加入程序式语言的特性。
        它在CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情。
        常见的CSS预处理器:Sass、Less、Stylus
        一句话:Less是一门 CSS 预处理语言,它扩展了CSS的动态特性。

      2. Less 使用之变量
        变量是指没有固定的值,可以改变的。因为我们CSS中的一些颜色和数值等经常使用。
        @变量名:值;
        注意: 必须有@为前缀
        不能包含特殊字符
        不能以数字开头
        大小写敏感
        @color: pink;

      3. Less 嵌套

        1. // 将css改为less
          #header .logo {
          width: 300px;
          }

          #header {
          .logo {
          width: 300px;
          }
          }

        2. (交集|伪类|伪元素选择器) ,利用&进行连接
          a:hover{
          color:red;
          }

          a{
          &:hover{
          color:red;
          }
          }

      4. Less 运算
        任何数字、颜色或者变量都可以参与运算。就是Less提供了加(+)、减(-)、乘(*)、除(/)算术运算。
        例子: /Less 里面写/
        @witdh: 10px + 5;
        div {
        border: @witdh solid red;
        }
        /生成的css/
        div {
        border: 15px solid red;
        }
        /*Less 甚至还可以这样 */
        width: (@width + 5) * 2;
        乘号( *)和除号(/)的写法
        运算符中间左右有个空格隔开 1px + 5
        对于两个不同的单位的值之间的运算,运算结果的值取第一个值的单位
        如果两个值之间只有一个值有单位,则运算结果就取该单位

  4. rem适配方案
    less+rem+媒体查询 flexible.js+rem

    1. less+rem+媒体查询

    2. flexible.js+rem

你可能感兴趣的:(学习)