移动端布局

rem+vw

  • 如何运用响应式单位vw?
  1. 让我们先来看下下面我们熟悉的这段代码。
    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>Document</title>
    8. </head>
    9. <body></body>
    10. </html>
    其中viewport" content="width=device-width, initial-scale=1.0这段代码我们再熟悉不过了,我们几乎每一个html页面的头部都会见到这段代码,那这段代码是干什么用的呢?我们来看下下面这张表格。来了解一下这三个名词的概念。
序号属性定义
1DPR设备像素比
2布局视图:width默认980px
3视觉视图:device-width移动设备的布局视图
4initial-scale=1.0理想试图=视觉试图

看了这个表格我们应该已经知道这段代码是什么意思了。那么我们要在手机视窗为375px的页面布局应该怎么额做呢?通常我们布局的话都会用一个固定的参考单位,也就是rem,而rem是根据html根字号来取的值,所以我们要先给rem设置一个值,如下。

  1. <style>
  2. html {
  3. font-size: 100px;
  4. }
  5. </style>

但是这个100px设置出来的rem是一个固定的值,那么如何用到响应式布局里呢?很简单,只需要一个函数就可以实现calc()如下写成这样就可以了:

  1. <style>
  2. html {
  3. font-size: calc(100vw / 3.75);
  4. }
  5. </style>

手机视窗的宽度为375px,屏幕宽度是100vw,那一个vw就是1%的375也就是3.75,那么100vw/3.75不就等于375/3.75=100嘛。这样写的好处大大滴,如果我们要适配其他的时候呢只要修改这个3.75就ok啦。
那么这些写完了,我们又遇到了一个问题,我们知道元素的字号是会继承与被继承的,我们给body里写个p标签就会出现以下的情况!

  1. <body>
  2. <p>hello word</p>
  3. </body>

p标签错误
我们看到了一个超级大的p标签沾满了整个屏幕!!!!!怎么办???
不要急,只需简单的一个代码就可以,如下我们再把body里的字号再设置一下不久ok了嘛

  1. <style>
  2. html {
  3. font-size: calc(100vw / 3.75);
  4. }
  5. body {
  6. font-size: 0.16rem;
  7. }
  8. </style>

p标签正常
这不就又正常了嘛。那么问题又来了,如果屏幕很小或者屏幕很大,该怎么办呢?总不能让它无限放大和缩小吧?也很简单,这里我们只需要用媒体查询给他个限制就可以了,上代码

  1. @media screen and (max-width: 320px) {
  2. html {
  3. font-size: 85px;
  4. }
  5. }
  6. @media screen and (min-width: 640px) {
  7. html {
  8. font-size: 170px;
  9. }
  10. }

grid布局

  • 什么是grid布局?
    1.grid布局又叫网格布局,顾名思义就是把容器划分成一个网格表,在其中布局。
    我们来看下下方的这段代码

    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>grid布局详解</title>
    8. <style>
    9. /* 初始化 */
    10. * {
    11. padding: 0;
    12. margin: 0;
    13. box-sizing: border-box;
    14. }
    15. .continer {
    16. width: 30em;
    17. height: 30em;
    18. background-color: wheat;
    19. /* 设为grid容器 */
    20. display: grid;
    21. /* 为容器划分列 */
    22. grid-template-columns: 10em 10em 10em;
    23. /* 为容器划分行 */
    24. grid-template-rows: 10em 10em 10em;
    25. }
    26. .item {
    27. background-color: seagreen;
    28. }
    29. </style>
    30. </head>
    31. <body>
    32. <!-- 这里们先写一个简单的代码,一个div作为容器下面再放上一个div -->
    33. <div class="continer">
    34. <div class="item">item1</div>
    35. </div>
    36. </body>
    37. </html>

    这行代码看完我们再来看下他的效果:
    grid
    相信看完这些应该对grid布局有一个直观的了解了吧。我们再来深入一步了解他。

  • 如何在项目中为它分配在容器中的占用空间呢?这也叫网格区域
    代码:

    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>grid布局详解</title>
    8. <style>
    9. /* 初始化 */
    10. * {
    11. padding: 0;
    12. margin: 0;
    13. box-sizing: border-box;
    14. }
    15. .continer {
    16. width: 30em;
    17. height: 30em;
    18. background-color: wheat;
    19. /* 设为grid容器 */
    20. display: grid;
    21. /* 为容器划分列 */
    22. grid-template-columns: 10em 10em 10em;
    23. /* 为容器划分行 */
    24. grid-template-rows: 10em 10em 10em;
    25. }
    26. .item {
    27. background-color: seagreen;
    28. /* 起始行/结束行 */
    29. grid-row: 1/2;
    30. /* 起始列/结束列 */
    31. grid-column: 1/2;
    32. /* 起始行/起始列/结束行/结束列 */
    33. grid-area: 2/1/3/4;
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <!-- 这里们先写一个简单的代码,一个div作为容器下面再放上一个div -->
    39. <div class="continer">
    40. <div class="item">item1</div>
    41. </div>
    42. </body>
    43. </html>

    设置开始行结束行grid-row 设置开始列结束列grid-columns
    行和列一起设置grid-area
    有些时候我们并不关心行列号是多少我们可以用跨行命令span来代替
    例如grid-row:1/2=grid:1/span1span的意思呢就是跨越多少格.
    我们可以把行和列的设置写在一起像这样grid-area:1/1/2/2或者grid-area:1/1/span1/span1这两种写法是一样的。含义就是grid-area:起始行/起始列/结束行/结束列

    下面我们来了解一下行列间距gap
    上代码:

    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>Document</title>
    8. <style>
    9. * {
    10. padding: 0;
    11. margin: 0;
    12. box-sizing: border-box;
    13. }
    14. /* grid容器 */
    15. .continer {
    16. display: grid;
    17. width: 30em;
    18. height: 30em;
    19. background-color: wheat;
    20. grid-template-columns: repeat(3, 1fr);
    21. grid-template-rows: repeat(3, 1fr);
    22. gap: 1em;
    23. }
    24. .item {
    25. background-color: seagreen;
    26. }
    27. </style>
    28. </head>
    29. <body>
    30. <!-- grid容器 -->
    31. <div class="continer">
    32. <div class="item">item1</div>
    33. <div class="item">item2</div>
    34. <div class="item">item3</div>
    35. <div class="item">item4</div>
    36. <div class="item">item5</div>
    37. <div class="item">item6</div>
    38. <div class="item">item7</div>
    39. <div class="item">item8</div>
    40. <div class="item">item9</div>
    41. </div>
    42. </body>
    43. </html>
  • 隐式网格
    先上代码:
    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>Document</title>
    8. <style>
    9. * {
    10. padding: 0;
    11. margin: 0;
    12. box-sizing: border-box;
    13. }
    14. /* grid容器 */
    15. .continer {
    16. display: grid;
    17. width: 30em;
    18. height: 30em;
    19. background-color: wheat;
    20. grid-template-columns: repeat(3, 10em);
    21. grid-template-rows: repeat(3, 10em);
    22. gap: 1em;
    23. /* 调整下容器的宽高以容纳超出网格的项目 */
    24. width: 50em;
    25. height: 50em;
    26. }
    27. .item {
    28. background-color: seagreen;
    29. /* 限定一个项目的大小 */
    30. width: 6em;
    31. height: 6em;
    32. }
    33. </style>
    34. </head>
    35. <body>
    36. <!-- grid容器 -->
    37. <div class="continer">
    38. <div class="item">item1</div>
    39. <div class="item">item2</div>
    40. <div class="item">item3</div>
    41. <div class="item">item4</div>
    42. <div class="item">item5</div>
    43. <div class="item">item6</div>
    44. <div class="item">item7</div>
    45. <div class="item">item8</div>
    46. <div class="item">item9</div>
    47. <!-- 我们再来给容器内添加两个项目看看会发生什么情况 -->
    48. <div class="item">item10</div>
    49. <div class="item">item11</div>
    50. <!-- 超出我们划定的9个网格了!! -->
    51. </div>
    52. </body>
    53. </html>
    效果:
    隐式网格
    我们可以看到再次在容器中添加了两个项目后超出了我们设置的三行三列的网格范围了,但是网格自动给他们两个又划出了网格,我们称这个超出的网格为隐式网格。那么为什么隐式网格会出现在下方而不是其他地方呢?这和我们grid容器的属性有关,有这样一个属性:
  1. <style>
  2. /* 排列方式:行优先 */
  3. grid-auto-flow: row;
  4. /* 排列方式:列优先 */
  5. grid-auto-flow: column;
  6. </style>

行优先:先沿着沿着行的方向优先分布,行没有空间后再沿着列,列优先的话就是反着来。
那么我们发现隐式网格的行高要比在网格内的高很多,这该怎么办呢?
隐式网格行高属性grid-auto-rows:;隐式网格列高grid-auto-columns

  • grid项目对齐

grid项目对齐参照物有两个,分别是容器和单元格
上代码:

  1. <style>
  2. /* 项目在容器内的对齐方式:垂直方向,平行方向 */
  3. place-content: center center;
  4. /* 项目在网格内的对齐方式:垂直方向,平行方向 */
  5. place-items: center center;
  6. </style>

效果:
place
有五个值start end center space-between space-around
当然我们也可以单独设置某一个项目在单元格内的对齐防止:place-self
代码:

  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>Document</title>
  8. <style>
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. box-sizing: border-box;
  13. }
  14. /* grid容器 */
  15. .continer {
  16. display: grid;
  17. width: 30em;
  18. height: 30em;
  19. background-color: wheat;
  20. grid-template-columns: repeat(3, 10em);
  21. grid-template-rows: repeat(3, 10em);
  22. gap: 1em;
  23. /* 调整下容器的宽高以容纳超出网格的项目 */
  24. width: 50em;
  25. height: 50em;
  26. /* 排列方式:行优先 */
  27. grid-auto-flow: row;
  28. /* 设置隐式单元格行高 */
  29. grid-auto-rows: 10em;
  30. /* 项目在容器内的对齐方式:垂直方向,平行方向 */
  31. place-content: center;
  32. /* 项目在网格内的对齐方式:垂直方向,平行方向 */
  33. place-items: center;
  34. }
  35. .item {
  36. background-color: seagreen;
  37. /* 限定一个项目的大小 */
  38. width: 6em;
  39. height: 6em;
  40. }
  41. .item:nth-of-type(6) {
  42. place-self: end start;
  43. }
  44. </style>
  45. </head>
  46. <body>
  47. <!-- grid容器 -->
  48. <div class="continer">
  49. <div class="item">item1</div>
  50. <div class="item">item2</div>
  51. <div class="item">item3</div>
  52. <div class="item">item4</div>
  53. <div class="item">item5</div>
  54. <div class="item">item6</div>
  55. <div class="item">item7</div>
  56. <div class="item">item8</div>
  57. <div class="item">item9</div>
  58. <!-- 我们再来给容器内添加两个项目看看会发生什么情况 -->
  59. <!-- <div class="item">item10</div>
  60. <div class="item">item11</div> -->
  61. <!-- 超出我们划定的9个网格了!! -->
  62. </div>
  63. </body>
  64. </html>

效果:
place-self

更多相关文章

  1. Android界面布局——视图/容器易混淆点总结
  2. 【Android】GridView添加网格线
  3. Android(安卓)开发中 Parcel存储类型和数据容器
  4. Android中在GridView网格视图上实现item拖拽交换的方法
  5. Android(安卓)学习手札(三) 视图(View)
  6. Android中ViewGroup等容器控件的使用
  7. Android网格布局实现--recyclerview
  8. android GridView(网格视图)
  9. Android的Spinner组件的XML属性(备查)

随机推荐

  1. Android必知必会-自定义Scrollbar样式
  2. Android学习【0】安装android studio报错
  3. android耗时任务_IntentService
  4. android 与服务器用 http Post方法通迅
  5. Android中的Bundle的具体使用
  6. Android(安卓)OpenGL ES: 第一个程序
  7. android camera支持
  8. Android使用AnalogClock和DigitalClock
  9. 【Android(安卓)UI设计与开发】第07期:底
  10. 初识Android(安卓)回调机制