欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

媒体查询、定位、Flex布局

程序员文章站 2022-06-02 18:57:20
...

1、媒体查询(实列演示)

  • 媒体:屏幕、打印机等
  • 查询:查询当前屏幕的宽度变化
  • 布局前提:在宽度受限,高度不受限的空间内完成
  • 根据页面宽度显示不同样式
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>媒体查询</title>
  8. <style>
  9. .html {
  10. font-size: 10px;
  11. }
  12. /* 按钮基本样式 */
  13. .btn {
  14. background-color: #46c1fa;
  15. color: #faf6f6;
  16. border: none;
  17. outline: none;
  18. }
  19. .btn:hover {
  20. /* 鼠标移入样式 */
  21. cursor: pointer;
  22. opacity: 0.8;
  23. transition: 0.3s; /* 延时 */
  24. }
  25. .btn.s {
  26. /* 1.2rem = 12px */
  27. font-size: 1.2rem;
  28. }
  29. .btn.m {
  30. font-size: 1.6rem;
  31. }
  32. .btn.l {
  33. font-size: 1.8rem;
  34. }
  35. /* PC优先,从最大的屏幕开始匹配
  36. > 414px
  37. /* only screen 仅支持屏幕,默认值可以省略
  38. @media only screen
  39. @media
  40. */
  41. @media (min-width: 414px) {
  42. html {
  43. font-size: 12px;
  44. }
  45. .btn {
  46. background-color: #c01ef1;
  47. }
  48. }
  49. @media (min-width: 375px) and (max-width: 413px) {
  50. html {
  51. font-size: 14px;
  52. }
  53. .btn {
  54. background-color: #e089fa;
  55. }
  56. }
  57. @media (max-width: 374px) {
  58. html {
  59. font-size: 16px;
  60. }
  61. .btn {
  62. background-color: #e2b9ee;
  63. }
  64. }
  65. </style>
  66. </head>
  67. <body>
  68. <!-- 媒体:屏幕、打印机等 -->
  69. <!-- 查询:查询当前屏幕的宽度变化,
  70. 布局前提:在宽度受限,高度不受限的空间内完成
  71. 根据页面宽度现实不同样式
  72. -->
  73. <button class="btn s">按钮一</button>
  74. <button class="btn m">按钮二</button>
  75. <button class="btn l">按钮三</button>
  76. </body>
  77. </html>

width >= 414px效果展示:
媒体查询、定位、Flex布局

375px <= width <= 414px效果展示:
媒体查询、定位、Flex布局

width < 375px效果展示:
媒体查询、定位、Flex布局

2、定位与固定定位实列

STT 定位 说明
1 position: static; 静态定位,默认文档流
2 position: relative; 相对定位,相对自身在文档流中原来位置
3 position: absolute; 绝对定位,相对距离自己最近的定位元素包含块
4 position: fixed; 固定定位,相对html根元素定位

固定定位实列(模态框)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>固定定位</title>
  8. <style>
  9. *{
  10. /* 初始化样式 */
  11. box-sizing: border-box;
  12. margin: 0;
  13. padding: 0;
  14. }
  15. .container{
  16. margin: auto;
  17. width: 380px;
  18. height: 228px;
  19. background-color: #F5DEB3;
  20. /* 固定定位 */
  21. position: fixed;
  22. /* 顶部要留出头部导航的位置 */
  23. top: 10em;
  24. /* 左右相等,将表单挤到正中间 */
  25. left: 20em;
  26. right: 20em;
  27. }
  28. .container > h2{
  29. margin-top: 10px;
  30. margin-left: 10px;
  31. }
  32. .form-login{
  33. display: flex;
  34. flex-direction: column;
  35. }
  36. .form-login-input{
  37. display: flex;
  38. height: 28px;
  39. margin-top: 10px;
  40. margin-left: 10px;
  41. }
  42. .form-login > button{
  43. background-color: #60e0f7;
  44. margin: 18px auto;
  45. width: 120px;
  46. height: 38px;
  47. }
  48. .motal{
  49. /* 固定布局,定位空间在整个屏幕 */
  50. position: fixed;
  51. /* 屏幕视口的四个顶点的坐标 */
  52. top: 0;
  53. left: 0;
  54. right: 0;
  55. bottom: 0;
  56. /* 背景半透明 */
  57. background-color: #3b393980;
  58. }
  59. </style>
  60. </head>
  61. <body>
  62. <div class="motal"></div>
  63. <div class="container">
  64. <h2>用户登录</h2>
  65. <form action="" class="form-login">
  66. <div class="form-login-input">
  67. <label for="">用户名:</label>
  68. <input type="text" neme="username" placeholder="example@mail.com">
  69. </div>
  70. <div class="form-login-input">
  71. <label for="">密码:</label>
  72. <input type="password" name="password" placeholder="password">
  73. </div>
  74. <div class="form-login-input">
  75. <label for="">验证码:</label>
  76. <input type="text" name="captcha">
  77. </div>
  78. <button>登录</button>
  79. </form>
  80. </div>
  81. </body>
  82. </html>

模态框效果展示:
媒体查询、定位、Flex布局

3、Flex 常用属性(实列演示)

  • 定义弹性容器: display: flex;
  • 创建 flex 行内容器: display: inline-flex;,多个才有效

3.1 flex-direction: 设置 flex 容器主轴方向

STT 代码 说明
1 flex-direction: row; 设置主轴方向: 水平,左到右,默认
2 flex-direction: row-reverse; 设置主轴方向: 水平,右到左
3 flex-direction: column; 设置主轴方向: 垂直,上到下,默认
4 flex-direction: column-reverse; 设置主轴方向: 垂直,下到上

3.2 flex-wrap: 设置 flex 容器主轴方向

STT 代码 说明
1 flex-wrap: nowrap; 默认值,不换行,如果当前容器容纳不下,项目会自动收缩
2 flex-wrap: wrap; 换行,当前容器容纳不下项目,项目会换行显示,此时创建的容器为多行容器
3 flex-wrap: wrap-reverse; 反向换行

3.3 flex-flow: 设置 flex 容器主轴方向与项目换行的简写

STT 代码 说明
1 flex-flow: row nowrap; 水平 不换行,默认值
2 flex-flow: row wrap; 水平 换行
3 flex-flow: row wrap-reverse; 水平 反向换行
4 flex-flow: column nowrap; 垂直 不换行
5 flex-flow: column wrap; 垂直 换行
6 flex-flow: column wrap-reverse; 垂直 反向换行

3.4 justify-content: 设置 flex 项目在容器主轴方向上的对齐方式

STT 代码 说明
1 justify-content: flex-start; 主轴起始线对齐,默认
2 justify-content: flex-end; 主轴终止线对齐
3 justify-content: center; 居中对齐
4 justify-content: space-between; 两端对齐,剩余空间在第 1 个和最后 1 个项目之外的项目间平均分配
5 justify-content: space-around; 分散对齐,剩余空间在每个项目两侧平均分配
6 justify-content: space-evenly; 平均对齐,剩余空间在每个项目之间平均分配

3.5 align-content: 设置 flex 项目在多行容器中交叉轴方向上的对齐方式

STT 代码 说明
1 align-content: stretch; 项目拉伸,占据事整个交叉轴
2 align-content: flex-start; 所有项目与交叉轴启始线(顶部)对齐
3 align-content: flex-end; 所有项目与交叉轴终止线对齐
4 align-content: center; 所有项目与交叉轴中间线对齐,居中对齐
5 align-content: space-between; 两端对齐,剩余空间在头尾项目之外的项目间平均分配
6 align-content: space-around; 分散对齐,剩余空间在每个项目两侧平均分配
7 align-content: space-evenly; 平均对齐,剩余空间在每个项目之间平均分配

3.6 align-items: 设置 flex 项目在容器交叉轴方向上的对齐方式 |

STT 代码 说明
1 align-items: flex-start; 交叉轴起始线对齐,默认
2 align-items: flex-end; 交叉轴终止线对齐
3 align-items: center; 居中对齐

3.7 align-self: 单独设置某个 flex 项目在容器交叉轴方向上的对齐方式 |

STT 代码 说明
1 align-self: auto; 继承align-items属性值
2 align-self: flex-start; 与交叉轴启始线对齐
3 align-self: flex-end; 交叉轴终止线对齐
4 align-self: center; 交叉轴中间线对齐,居中对齐
5 align-self: stretch; 在在交叉抽上拉伸
6 align-self: baseline; 与基线对齐(与内容相关,用的很少)

3.8 flex-grow: 设置项目放大因子——分配主轴剩余空间

STT 代码 说明
1 flex-grow: 0;/flex-grow: initial; 项目不放大保持初始值
2 flex-grow: 1; 项目允许放大,剩余空间平均分配给每个项目
3 flex-grow: n; n 为整数,创建 flex 行内容器
  • 每个项目放大因子不同时,先求出所有因子之和,剩余空间/因子和*因子=对应项目的放大数

3.9 flex-shrink: 项目收缩因子——主轴空间小于项目空间时,收缩项目空间

STT 代码 说明
1 flex-shrink: 0; 项目禁止收缩
2 flex-shrink: 1;/flex-shrink: initial;; 项目允许收缩
3 flex-shrink: n; n 为整数,创建 flex 行内容器
  • 超出多少/收缩因子和*收缩因子=每个要收缩的值

3.10 flex-basis: 项目计算尺寸——设置项目大小

  • 在分配多余空间前,项目占据的主轴空间
  • 浏览器根据这个属性,计算主轴是否有多余空间
  • 该属性会覆盖项目原始大小(width/height)
  • 该属性会被项目的(min-width/min-height)值覆盖
STT 属性值 说明
1 flex-basis: auto; 默认值,项目原来的大小
2 flex-basis: *px; 项目像素
3 flex-basis: %; 项目百分比
  • 优先级:项目大小 < flex-basis < min-width/min-height

3.11 flex: 项目放大、项目收缩、计算尺寸简写

  • 三值语法:flex: flex-grow flex-shrink flex-basis,完整语法
STT 属性值 说明
1 flex: 0 1 auto; 默认值,不放大 可收缩 初始宽度
2 flex: 1 1 auto; 项目自动放大或收缩适应容器
3 flex: 0 0 100px; 项目按计算大小填充到容器
  • 双值语法:flex: flex-grow flex-basis
STT 属性值 说明
1 flex: 0 180px; 禁止放大,按计算大小填充到容器
  • 单值语法:flex: flex-grow flex-basis
STT 属性值 说明
1 flex: 1; flex: 1 1 auto;
2 flex: 180px; flex: 1 1 180px;
3 flex: initial; flex: 0 1 auto;
4 flex: auto; flex: 1 1 auto;
5 flex: none; flex: 0 0 auto;

3.12 order: 设置项目顺序

  • 选中项目==>order(n), n 是数字,支持负数;数字越小排序越靠前

实例演示查看地址

Flex 常用属性演示