day11 移动web1

目录

 

一、移动端特点

1、PC端网页和移动端网页有什么不同?

2、谷歌浏览器

3、分辨率

 4、视口

5、二倍图

 二、 百分比布局

1、什么是百分比布局?

三、Flex布局

1、主轴对齐方式

2、侧轴对齐方式

3、伸缩比

4、修改主轴方向

5、弹性盒子换行


一、移动端特点

1、PC端网页和移动端网页有什么不同?

  • PC屏幕大,网页固定版心
  • 手机屏幕小,网页宽度多数为100%

2、谷歌浏览器

使用谷歌模拟器调试移动端网页

3、分辨率

(1)屏幕尺寸概念

屏幕尺寸:指的是屏幕对角线的长度,一般用英寸来度量

 (1)移动端主流设备分辨率

PC分辨率:

  • 1920* 1080
  • 1366* 768
  • ……

缩放150%:

  • (1920/150%)*(1080/150%)

总结:

  • 硬件分辨率(出厂设置)
  • 缩放调节的分辨率(软件设置)

分辨率分类:

  • 物理分辨率:生产屏幕时就固定的,它是不可被改变的
  • 逻辑分辨率:由软件(驱动)决定的

而制作网页参考的是逻辑分辨率

手机各大型号分辨率:

 4、视口

  (1)什么是视口?
    视口简单理解就是可视区域大小我们称之为视口。在PC端,视口大小就是浏览器窗口可视区域的大小。在移动端, 视口大小并不等于窗口大小, 移动端视口宽度被人为定义为了980

 (2)为什么是980而不是其他的值?
    因为过去网页的版心都是980,乔老爷子为了能够让网页在移动端完美的展示, 所以将iOS手机视口的大小定义为了980。后来谷歌也觉得这是一个非常牛X的方案, 所以Android手机的视口也定义为了980

 (3)如何保证在移动端不自动缩放网页的尺寸?

    使用meta标签设置视口宽度,制作适配不同设备宽度的网页

  • viewport:视口
  • width=device-width:视口宽度=设备宽度
  • linitial-scale=1.0:缩放1倍(不缩放) 

5、二倍图

(1)什么是二倍图?

        当设备像素比很大时,图片会被放大,而放大会让图片看起来模糊。为此,我们可以使用二倍图的方式来提高图片的清晰度。从而提高分辨率,保证图片不会失真。

(2)怎么使用像素大厨软件测量二倍图中元素的尺寸

  • 设计稿参考iPhone6/7/8,设备宽度375px产出设计稿。
  • 二倍图设计稿尺寸:750px。

 二、 百分比布局

1、什么是百分比布局?

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

        百分比布局的特点是宽度自适应,而高度是固定的。基于这一特点,在互联网刚刚兴起的时候,人们要求也不高,所以一直沿用的百分比布局。但是随着技术的发展,为了提升用户体验,百分比布局也慢慢逐渐被淘汰了,现如今只有少数网站的部分布局还在使用这种方式,大部分网站现在都是使用的Flex布局。

三、Flex布局

        Flex布局又称为弹性布局,是一种浏览器提倡的布局模型,使得布局网页更简单、灵活,也避免浮动脱标的问题。

作用:

  • 基于Flex 精确灵活控制块级盒子的布局方式,避免浮动布局中脱离文档流现象发生。
  • Flex布局非常适合结构化布局

设置方式:

  • 父元素添加display: flex,子元素可以自动的挤压或拉伸

组成部分:

  • 弹性容器
  • 弹性盒子
  • 主轴
  • 侧轴/ 交叉轴

1、主轴对齐方式

属性:

  • justify-content

作用:

  • 调节主轴对齐方式来设置盒子之间的水平间距。

 代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>主轴对齐方式</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            display: flex;
            justify-content: flex-start;
            justify-content: flex-end;

            justify-content: center;

            /* 均分间距: 父级剩余尺寸分配成间距 */
            /* 间距出现在子级之间 */
            justify-content: space-between;

            /* 间距出现在子级的两侧 */
            /* 视觉效果: 子级之间的间距是父级两端间距的二倍 */
            justify-content: space-around;

            /* 各个地方的间距都相等 */
            justify-content: space-evenly;
            
            height: 200px;
            margin: auto;
            border: 1px solid #000;
        }
        
        .box div {
            width: 100px;
            height: 100px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>

</html>

展示效果:

 2、侧轴对齐方式

属性:

  • align-items(添加到弹性容器)
  • align-self:控制某个弹性盒子在侧轴的对齐方式(添加到弹性盒子)

作用:

  • 调节侧轴对齐方式来设置盒子之间的垂直间距。

 代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>侧轴对齐方式</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            display: flex;
            /* align-items: center; */
            /* 默认值, 表示拉伸: 去掉子级的高度 */
            /* align-items: stretch; */

            height: 300px;
            margin: auto;
            border: 1px solid #000;
        }
        
        .box div {
            /* width: 100px; */
            /* height: 100px; */
            background-color: skyblue;
        }

        /* 单独设置某个弹性盒子的侧轴对齐方式 */
        
        .box div:nth-child(2) {
            align-self: center;
            height: 50px;
        }
    </style>
</head>

<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>

</html>

展示效果:

 3、伸缩比

属性:

  • flex : 值;

取值分类:

  • 数值(整数)

注意: 只占用父盒子剩余尺寸

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            display: flex;
            height: 300px;
            border: 1px solid #000;
        }

        .box div {
            height: 200px;
            margin: 0 20px;
            background-color: skyblue;
        }

        .box div:nth-child(1) {
            width: 50px;
        }

        /* flex: 先计算父级剩余尺寸, 看需要把父级分成多少份(把所有flex属性值相加), 每个子级占用自己对应的份数 */
        .box div:nth-child(2) {
            flex: 2;
        }

        .box div:nth-child(3) {
            flex: 3;
        }

        

        
    </style>
</head>
<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>
</html>

展示效果:

4、修改主轴方向

在Flex布局中,弹性盒子默认是沿着水平方向排列的。而且我们如果想要修改主轴的排列方向可以使用flex-direction来进行修改

属性:flex-direction

5、弹性盒子换行

默认情况下,多个弹性盒子哪怕宽度不够都是排列在一行的,如下图所示:

代码:

 展示效果:

 可以看到8个盒子的总宽度为800,但是iphone手机模拟器的宽度只有667,可盒子全部还是一样在一行排列,这就是弹性盒子的特性。而如果我们需要换行排列的话,则需要使用如下属性:

属性:flex-wrap:wrap;(默认值nowrap)

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>弹性盒子换行</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            display: flex;

            /* 弹性盒子换行 */
            /* 默认值: 不换行 */
            flex-wrap: nowrap;

            /* 换行 */
            flex-wrap: wrap;

            /* 调节行对齐方式 */
            /* align-content: flex-start;
            align-content: flex-end; */

            align-content: center;
            align-content: space-around;
            align-content: space-between;
            align-content: space-evenly;
            /* align-content: stretch; */

            height: 500px;
            border: 1px solid #000;
        }
        
        .box div {
            width: 100px;
            height: 100px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
    </div>
</body>

</html>

展示效果:

 根据上图可以看到,盒子虽然换行排列了,但是我们实际代码中没有设置行间距,但是却自动加上了,说明使用flex-wrap:wrap;换行,行的间距是有默认值的。而如果不想要间距可以设置如下属性来调整行对齐方式

属性:align-content

取值:

  • 取值与justify-content基本相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值