实例演示 rem+vw 布局的原理与 rem 的设置技巧

  • DPR: 设备像素比
  • 布局视图: 为了保证内容全部显示,一般设置为980px
  • 视觉视图:
  • 移动设备的布局视图: 375px、width = device-width
    width: 页面的布局的宽度
    device-width: 视觉视图的宽度, 设备宽度
    width = 980px
    device-width: 375px

    width = device-width
    width = 375px

  • 当前的布局视图,就是当前移动设备浏览器的可视区宽度

    1. 布局视图 = 视觉视图 : width = device-width
  • initial-scale=1.0: 1:1 还原视觉视图的布局, 叫理想视图
    1. 理想视图 = 视觉视图 : initial-scale=1.0
  • 目前主流的移动端布局方案: rem + vw

  • 浏览器的默认字号: 16px, 1rem = 16px

  • 为了计算方便, 推荐将 1rem = 100px
  • 通常如设计稿宽度是 750px , DPR = 2, 则 device-width = 750px / DPR = 750 / 2 = 375px
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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>rem+vw布局的原理与rem的设置技巧</title>
  8. </head>
  9. <body>
  10. <style>
  11. html {
  12. /* font-size: 100px; */
  13. font-size: calc(100vw / 3.75);
  14. }
  15. /* 因为 font-size是一个可以被继承的属性 */
  16. body {
  17. /* 把字号还原成浏览器默认的字号, 16px */
  18. /* font-size: 16px; */
  19. font-size: 0.16rem;
  20. }
  21. /* 到现在为止,
  22. 1rem = 100px html
  23. 1em = 16px body */
  24. </style>
  25. <div class="box">hello php.cn</div>
  26. <style>
  27. .box {
  28. /* 200px * 50px */
  29. width: 2rem;
  30. height: 0.5rem;
  31. border: 1px solid #000;
  32. background-color: lightgreen;
  33. box-sizing: border-box;
  34. }
  35. /* vw 是 当前屏幕宽度的 百分比 */
  36. /* 1vw = 1% */
  37. /* 当屏幕宽度小于320px的时候, 字号不要再小了,否则就看不清了 */
  38. @media screen and (max-width: 320px) {
  39. html {
  40. font-size: 85px;
  41. }
  42. }
  43. /* 当屏幕宽度大于640px的时候, 字号不要再放大了 */
  44. @media screen and (min-width: 640px) {
  45. html {
  46. font-size: 170px;
  47. }
  48. }
  49. </style>
  50. </body>
  51. </html>

Grid 布局相关属性

  • Grid 布局基本步骤:创建 Grid 容器 => 将 Grid 项目放到容器中相应食用油步 => 设置容器和项目属性

创建 Grid 容器(显式)

  • 隐式 Grid 容器,当显式不能放置所有项目时会自动创建
STT属性说明
1display: grid;声明容器为网格容器
2grid-template-columns: 30rem 30rem 30rem显示的划分列,生成指定数量的单元格来放置项目
3grid-template-rows: 30rem 30rem 30rem显示的划分行,与列组成单元格
4grid-auto-columns: auto;根据项目数量在容器中隐式生成行与列来放置项目,列宽自动
5grid-auto-rows: 150px;根据项目数量在容器中隐式生成行与列来放置项目,行高 150 PX
6grid-auto-flows: column;声明项目在网格中自动填充方案,列优先
7grid-auto-flows: row;声明项目在网格中自动填充方案,行优先

设置网格单元格数量尺寸单位

  • 使用repeat重复设置单元格时命名网格线会自动添加索引
  • repeat(3,[col-start] 100px [col-end]):只需设置命名前缀,编号会自动生成
  • grid-column-end: cil-end 3;: 前缀索引可以应用到自动生成的命名网格线
STT单位
1px: 固定宽度
1rem: 根据根元素字号大小
2%: 百分比
3auto: 自动计算
4fr: 比例
5repeat('重复次数', '每次大小'): 重复生成
6分组:
7minmax: 区间
8auto-fill: 自动填充

将项目填充到指定单元格

  • 默认从左上角开始,从左到右,从上到下依次从 1 开始编号
  • 如果从右下角开始,由下向上,由右向左依次从-1 开始编号
  • 开始线编号为当前项目默认编号时可省略
  • 根据网格线可以将项目放到网格线形成的封闭矩形区域中
  • 网格线编号支持语义化自定义
  1. grid-template-columns: [col1-s] 100px [col1-e col2-s] 100px;
  2. grid-template-rows: [row1-s] 100px [row1-e] 100px;
  3. grid-column-start: col2-s;
  4. grid-row-start: row1-s;
STT示例说明
1grid-row-start: 1;设置开始行线编号,默认即从 1 开始
1grid-row-end: 3;设置结束行线编号为 3
2grid-column-start: 1;设置开始列线编号,默认即从 1 开始
2grid-column-end: 2;设置开始列线编号为 2
3grid-row: 1 / 3;简写,开始行线编号 / 结束行线编号
4grid-colum: 1 / 2;简写,开始列线编号 / 结束列线编号
5grid-row-start: 2 span 2设置开始行线编号为 2 跨 2 行,== grid-row: 1 / 3;
6grid-colum-start: 2 span 2设置开始列线编号为 2 跨 2 列,== grid-colum: 1 / 3;
7grid-row: 3 / span 2设置开始行线编号为 3,然后跨 2 行
8grid-colum: 2 / span 2设置开始行线编号为 3,然后跨 2 列
9grid-area: 1 1 3 2网格区域行开始/列开始/行结束/列结束
9grid-area: 3 / 1 / span 1 / span 3;行 3 开始,列 1 开始,行跨 1,列跨 3

自定义命名网格区域: grid-template-areas

  • 可以每一个网格区域设置一个语义化的名称
  • 具有名称的网格区域称之为命名区域
  • 名称相同的网格区域会自动合并形成更大的区域空间
  • 项目设置的区域名称后会自动填充到容器中对应的命名区域
  1. .container {
  2. /* 创建网格区域 */
  3. display: grid;
  4. grid-template-columns: 30rem 30rem 30rem;
  5. grid-template-rows: 30rem 30rem 30rem;
  6. /* 设置命名网格区域相同名称的命名区域会合并 */
  7. grid-template-areas:
  8. "header header header"
  9. "left main rigth"
  10. "footer footer footer";
  11. }
  12. .item {
  13. grid-area: header;
  14. }

网格区域占位符

  • 当项目默认已填充到正确的区域中无需设置时,可以使用.作为占位符
  1. .container {
  2. /* 设置命名网格区域相同名称的命名区域会合并 */
  3. grid-template-areas:
  4. "header header header"
  5. ". . ."
  6. "footer footer footer";
  7. }
  8. .item {
  9. grid-area: header;
  10. }

命名网格区域线默认名称

  • 区域起始行列: 区域名称-start; 如: header-start、header-start, 表示区域起始行和起始列;
  • 区域结束行列: 区域名称-end; 如: header-end、header-end, 表示区域结束行和结束列;
  1. .item {
  2. grid-area: header-start / header-start / header-end / header-end;
  3. }

项目在”容器”中的对齐方式

  • 容器必须有剩余空间
STT属性说明
1justify-content: start/end/center;设置项目在容器水平方向的对齐方式:开始/结束/居中;默认开始
2justify-content: space-between/space-around/space-evenly;设置项目在容器水平方向的对齐方式:两端/分散/平均;
3align-content: start/end/center;设置项目在容器垂直方向的对齐方式:开始/结束/居中;默认开始
4align-content: space-between/space-around/space-evenly;设置项目在容器垂直方向的对齐方式:两端/分散/平均;
5place-content: '水平方向' '垂直方向';简写

项目在所在的”单元格”中的对齐方式

  • 单元格必须有剩余空间
STT属性说明
justify-items: start/end/center;设置所有项目在单元格/网格区域中,水平方向的对齐方式: 开始/结束/居中;默认开始
align-items: start/end/center;设置所有项目在单元格/网格区域中,垂直方向的对齐方式: 开始/结束/居中;默认开始
place-items: '水平方向' '垂直方向';简写

设置某个项目在所在的”单元格”中的对齐方式

STT属性说明
justify-self: start/end/center;设置某个项目在单元格/网格区域中,水平方向的对齐方式: 开始/结束/居中;默认开始
align-self: start/end/center;设置某个项目在单元格/网格区域中,垂直方向的对齐方式: 开始/结束/居中;默认开始
place-self: ‘水平方向’ ‘垂直方向’;`简写

设置容器行与列之间的间距

  • gap: 5px;设置行列间距,行与列间距相等可只写一个值;
  • gap: 行间距 列间距;
  • column-gap: 列间距;
  • row-gap: 行间距;
  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>grid布局中相关属性</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. outline: none;
  13. box-sizing: border-box;
  14. }
  15. .container {
  16. background-color: #f2f3bb;
  17. width: 40rem;
  18. height: 40rem;
  19. /* 创建网格容器 */
  20. display: grid;
  21. grid-template-columns: repeat(3, 10rem);
  22. grid-template-rows: repeat(3, 10rem);
  23. gap: 0.5rem;
  24. /* 设置所有项目在容器水平对方方式 */
  25. /* justify-content: start; */
  26. /* justify-content: end; */
  27. /* justify-content: center; */
  28. /* 设置所有项目在容器垂直对方方式 */
  29. /* align-content: start; */
  30. /* align-content: end; */
  31. /* align-content: center; */
  32. place-content: center center; /* 所有项目在容器对齐方式 */
  33. /* 设置所有项目在单元格/网格区域水平对方方式 */
  34. justify-items: start;
  35. justify-items: end;
  36. justify-items: center;
  37. /* 设置所有项目在单元格/网格区域垂直对方方式 */
  38. align-items: start;
  39. align-items: end;
  40. align-items: center;
  41. place-items: center center; /* 所有项目在单元格格/网格区域对齐方式 */
  42. }
  43. .item {
  44. width: 5rem;
  45. height: 5rem;
  46. background-color: #df93f7;
  47. }
  48. /* 设置单个项目在单元格/网格区域对齐方式 */
  49. .item.i2 {
  50. background-color: #93e8f7;
  51. /* 水平方向 */
  52. /* justify-self: start; */
  53. justify-self: end;
  54. /* justify-self: center; */
  55. /* 垂直方向 */
  56. /* align-self: start; */
  57. align-self: end;
  58. /* align-self: center; */
  59. place-self: end end;
  60. }
  61. </style>
  62. </head>
  63. <body>
  64. <!-- Grid容器 -->
  65. <div class="container">
  66. <div class="item i1">item1</div>
  67. <div class="item i2">item2</div>
  68. <div class="item i3">item3</div>
  69. <div class="item i4">item4</div>
  70. <div class="item i5">item5</div>
  71. <div class="item i6">item6</div>
  72. </div>
  73. </body>
  74. </html>

更多相关文章

  1. android 绘图
  2. Android(安卓)使用SVG
  3. Android百度地图——定位SDK(版本v3.1)(二)
  4. Android应用开发——TextView控件属性列表
  5. android通过adb设置以太网共享
  6. Android:设置圆形头像,Android截取圆形图片
  7. 【安卓学习笔记】Android(安卓)Studio第9课——进度条ProgressBa
  8. Android(安卓)ListView 滑动背景为黑色的解决办法[转]
  9. Mac 下设置android NDK的环境

随机推荐

  1. Android录屏命令、Android录Gif、Android
  2. 为什么说Android令人沮丧
  3. Android 知识图谱:该如何入门Android开发?
  4. Android Studio目录结构
  5. android切换效果、Flutter信息类App、仿
  6. Google:Android正在走出碎片化泥沼
  7. Android(安卓)自定义View (三部曲)
  8. 我的Android相关文章目录
  9. Java事件模型与Android事件模型的比较
  10. Service与Android系统设计(3)