移动端基础之flex布局(二)

本文对比了传统布局和flex布局的优缺点,深入讲解了flex布局原理,包括主轴、侧轴的概念,以及justify-content、align-items等属性的用法。并详细介绍了在携程网移动端页面中如何应用flex布局,涵盖了搜索指数、焦点图、导航栏等多个区域的布局实现。
摘要由CSDN通过智能技术生成

传统布局与flex布局的比较

传统布局

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

flex布局

  • 操作方便,布局及其简单
  • pc端支持情况较差
  • IE11以下的版本 仅部分支持

注意事项

  • pc端页面布局 建议使用传统布局
  • pc端页面布局 如不考虑兼容性 可使用flex布局

flex布局原理

flex:弹性布局,用来为盒装模型提供最大的灵活性,任何一个容器都可以指定为flex布局

采用flex布局的元素,被称为容器,它的所有子元素会自动成为容器成员,称为flex项目

注意事项

  • 当我们的父盒子设为flex布局之后,子元素的float clear 及vertical-align属性将失效
  • 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局

原理

通过给父盒子添加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>体验flex布局</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            /* 使用flex布局 */
            display: flex;
            width: 80%;
            height: 400px;
            margin: 20px auto;
            background-color: purple;
            justify-content: space-around;
        }
        
        div span {
            /* 每个子元素占用1等分 */
            flex: 1;
            height: 60px;
            margin-right: 5px;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

.

flex父项属性

flex-direction:设置主轴的方向

在flex布局中,分为主轴和侧轴

默认的主轴是x方向 水平向右

默认的侧轴是y轴 水平向下

在这里插入图片描述

<!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>flex-direction</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            /* 设置flex属性 */
            display: flex;
            width: 1000px;
            height: 600px;
            margin: 200px auto;
            background-color: pink;
            /* 设置主轴方向 */
            /* flex-direction: row; */
            /* flex-direction: row-reverse; */
            /* flex-direction: column; */
            flex-direction: column-reverse;
        }
        
        span {
            width: 150px;
            height: 150px;
            text-align: center;
            line-height: 150px;
            margin: 5px;
            background-color: yellow;
        }
    </style>
</head>

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

</html>

在这里插入图片描述

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>justify-content</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            /* 使用fiex属性 */
            display: flex;
            /* 设置主轴上子元素的排列方式 */
            justify-content: space-between;
            width: 80%;
            height: 400px;
            margin: 2px auto;
            background-color: purple;
        }
        
        span {
            width: 200px;
            height: 200px;
            text-align: center;
            line-height: 200px;
            margin: 20px;
            background-color: red;
        }
    </style>
</head>

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

</html>

在这里插入图片描述

flex-wrap:控制子元素是否换行

在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>flex-wrap</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            /* 设置flex属性 */
            display: flex;
            /* 设置子元素是否换行 */
            flex-wrap: wrap;
            width: 80%;
            height: 600px;
            margin: 20px auto;
            background-color: purple;
        }
        
        span {
            width: 200px;
            height: 200px;
            text-align: center;
            line-height: 200px;
            margin: 10px;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
        <span>6</span>
        <span>7</span>
        <span>8</span>
    </div>
</body>

</html>

在这里插入图片描述

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

在这里插入图片描述


<!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>align-items</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            /* 设置flex布局 */
            display: flex;
            /* 设置主轴上的对齐方式*/
            justify-content: center;
            /* 设置侧轴上的对齐方式 */
            align-items: center;
            width: 80%;
            height: 500px;
            margin: 20px auto;
            background-color: pink;
        }
        
        span {
            width: 200px;
            height: 200px;
            border-radius: 50%;
            background-color: red;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

在这里插入图片描述

align-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>align-content</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            display: flex;
            /* 设置主轴上的子元素的对齐方式 */
            justify-content: center;
            /* 设置侧轴上的子元素的对齐方式 */
            align-content: center;
            /* 设置换行 */
            flex-wrap: wrap;
            width: 80%;
            height: 600px;
            margin: 20px auto;
            background-color: purple;
        }
        
        span {
            width: 150px;
            height: 150px;
            border-radius: 50%;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

在这里插入图片描述

align-items与align-content的区别

在这里插入图片描述

flex-flow

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

在这里插入图片描述

<!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>flex-flow</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            display: flex;
            /* 设置主轴方向与是否换行 */
            flex-flow: row wrap;
            /* 设置主轴上的子元素的对齐方式 */
            justify-content: center;
            /* 设置侧轴上的子元素的对齐方式 */
            align-content: center;
            width: 80%;
            height: 600px;
            margin: 20px auto;
            background-color: purple;
        }
        
        span {
            width: 150px;
            height: 150px;
            border-radius: 50%;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

在这里插入图片描述

flex子项属性

flex属性

flex属性定义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>flex属性</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            display: flex;
            width: 80%;
            height: 600px;
            margin: 20px auto;
            background-color: purple;
        }
        
        span:nth-of-type(1) {
            /* flex表示占用的分数 */
            flex: 1;
            background-color: pink;
        }
        
        span:nth-of-type(2) {
            /* flex表示占用的分数 */
            flex: 2;
            background-color: yellow;
        }
        
        span:nth-of-type(3) {
            /* flex表示占用的分数 */
            flex: 1;
            background-color: red;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

在这里插入图片描述

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>align-self</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            display: flex;
            justify-content: center;
            width: 80%;
            height: 500px;
            background-color: pink;
            margin: 20px auto;
        }
        
        div span {
            width: 200px;
            height: 200px;
            border-radius: 50%;
            background-color: yellow;
        }
        
        div span:nth-of-type(2) {
            /* 定义某个子项可以与其它项目在侧轴上拥有不一样的排列方式 */
            align-self: flex-end;
        }
    </style>
</head>

<body>
    <div>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

</html>

在这里插入图片描述

order属性定义子项的排列顺序

数值越小,排名越靠前,默认为0

<!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>order</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            display: flex;
            justify-content: center;
            width: 80%;
            height: 500px;
            background-color: pink;
            margin: 20px auto;
        }
        
        div span {
            width: 200px;
            height: 200px;
            text-align: center;
            line-height: 200px;
            border-radius: 50%;
            background-color: purple;
        }
        
        div span:nth-of-type(2) {
            /* 定义子项的排列顺序  值越小 排名越靠前*/
            order: -1;
        }
    </style>
</head>

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

</html>

在这里插入图片描述

携程网

在这里插入图片描述

初始化操作

技术选型

  • 采用单独制作移动端页面的案例
  • 使用flex布局

搭建文件夹结构

在这里插入图片描述

设置视口及引入初始化样式

<meta name="viewport" content="width=device-width, user-scalable=no,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">

body设置样式

body {
  max-width: 540px;
  min-width: 320px;
  margin: 0 auto;
  font: normal 14px/1.5 Tahoma,"Lucida Grande",Verdana,"Microsoft Yahei",STXihei,hei;
  color: #000;
  background: #f2f2f2;
  overflow-x: hidden;
  -webkit-tap-highlight-color: transparent;
}

search-index区域

在这里插入图片描述

  • search-index设置固定定位 由两个div组成
  • 1号盒子为search区域 放大镜的技术是由伪元素 精灵图组合而成
  • 2号盒子为user区域 用户头像的技术是由伪元素 精灵图组合而成

focus(焦点图)区域

在这里插入图片描述

  • div嵌套一张图像即可 图像的宽度设置为100%

local-nav(局部导航栏)区域

在这里插入图片描述

在这里插入图片描述

  • div嵌套ul ul嵌套5个li 每个li占1等份 li嵌套a a嵌套两个span
  • 图像使用的精灵图技术 可以使用属性选择器更加合适快捷

nav(导航栏)区域

在这里插入图片描述

  • 大盒子为nav nav嵌套nav-common(导航公共部分) nav-common包含nav-item nav-item包含a标签
  • a里面的文字设置水平垂直居中
  • 白色的缝隙是由边框组成

sidebar-nav(侧边栏导航)区域

在这里插入图片描述
在这里插入图片描述

  • div嵌套ul ul嵌套li li嵌套a a嵌套span

sell-box(销售)区域

在这里插入图片描述

  • sell-box由两部分组成
  • 1号盒子为sell-hd 里面包含h2与a链接 图像使用的是伪元素选择器
  • 2号盒子为sell-bd 里面包含div div包含a a包含img

footer(页脚)区域

在这里插入图片描述

  • div嵌套ul ul嵌套li li占用1等份 li嵌套span span设置背景图像

copyright(版权)区域

在这里插入图片描述

  • div嵌套p 设置居中对齐即可

效果图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值