• 前端因不会响应式而毕业了?怎么将页面变得像路飞一样,一套代码兼容多个终端。


    什么是响应式呢? 

        一般企业定制官网都是响应式的网站,而有的小伙伴还是不会来看看吧。

    • 响应式简单来说一套代码能够兼容多个终端(平板,手机,pc),它的原理就是在不同的屏幕尺寸下,通过 css3 的媒体查询新特性来实现的,它可以在同的屏幕尺寸来去响应不同的css代码。

    • 响应式需要一个父级来作为容器,来配合子元素实现变化效果,然后就可以利用媒体查询去改变布局容器的大小,然后再去改变里面子及元素的布局,大小,排列,这样就可以不同的尺寸现实不同的页面效果了。

    响应式的布局尺寸

    • 超小屏幕(手机小于 768px )设置宽度 100%

    • 小屏幕(平板,大于768px)设置宽度 750px(为什么宽度会小一些是因为两边要留白 )

    • 中等屏幕(桌面显示器,大于等于992px)宽度设置970px

    • 大屏幕(大桌面显示器,大于等于1200px) 宽度设置 1170px

    响应式常用的属性

    • 媒体类型(media type) :常用all,screen,print。

    1. all 所有设备
    2. screen 彩色电脑屏幕
    3. print 文档打印或者打印预览模式
    4. speech 演讲
    5. tv 电视
    6. speech 用于屏幕阅读器
    • 多媒体特性 media feature

    1. max-width 定义输出设备中的页面最大可见区域宽度。
    2. min-width 定义输出设备中的页面最小可见区域宽度。
    3. min-aspect-ratio 定义输出设备中的页面可见区域宽度与高度的最小比率。
    4. min-color 定义输出设备每一组彩色原件的最小个数。
    5. min-color-index 定义在输出设备的彩色查询表中的最小条目数。
    6. min-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最小比率。
    7. min-device-width 定义输出设备的屏幕最小可见宽度。
    8. min-device-height 定义输出设备的屏幕的最小可见高度。
    9. min-height 定义输出设备中的页面最小可见区域高度。
    10. min-monochrome 定义在一个单色框架缓冲区中每像素包含的最小单色原件个数
    11. min-resolution 定义设备的最小分辨率。
    12. monochrome 定义在一个单色框架缓冲区中每像素包含的单色原件个数。如果不是单色设备,则值等于0
    13. orientation 定义输出设备中的页面可见区域高度是否大于或等于宽度。(检测设备目前处于横向还是纵向状态。)
    14. resolution 定义设备的分辨率。如:96dpi, 300dpi, 118dpcm
    15. scan 定义电视类设备的扫描工序。
    16. width 定义输出设备中的页面可见区域宽度。
    17. height 定义输出设备中的页面可见区域高度。
    • and / not / only / all

    not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)。

    only: 用来定某种特别的媒体类型。

    all: 所有设备,这个应该经常看到。在Media Query中如果没有明确指定Media Type,那么其默认为all

    可以使用关键词"and"将多个媒体特性结合在一起。也就是说,一个Media Query中可以包含0到多个表达式,表达式又可以包含0到多个关键字,以及一种媒体类型。当屏幕在600px~900px之间时,body的背景色渲染为“#f5f5f5”,如下所示。

    1. @media screen and (min-width:600px) and (max-width:900px){
    2.  body {background-color:#f5f5f5;}
    3. }
    • 实现横屏和竖屏的媒体查询

    1. /* 竖屏 */
    2. @media screen and (orientation: portrait) and (max-width: 720px) { 对应样式 }
    3. /* 横屏 */
    4. @media screen and (orientation: landscape) { 对应样式 }
    • 可以使用多条语句来将同一个样式应用于不同的媒体类型和媒体特性中。style.css样式被用在宽度小于或等于480px的手持设备上,或者被用于屏幕宽度大于或等于960px的设备上

    1. 上面代码中style.css样式被用在宽度小于或等于480px的手持设备上,或者被用于屏幕宽度大于或等于960px的设备上
    • 逻辑操作符 and:

    1. 合并多个媒体属性
    2. eg:@media screen and (min-width: 600px) and (max-width:100px)
    3. 合并多个媒体属性或合并媒体属性与媒体类型, 一个基本的媒体查询,即一个媒体属性与默认指定的screen媒体类型

    • 指定备用功能:

    1. eg:@media screen and (min-width: 769px), print and (min-width: 6in)
    2.  
    3. 没有or关键词可用于指定备用的媒体功能。相反,可以将备用功能以逗号分割列表的形式列出,这会将样式应用到宽度超过769像素的屏幕或使用至少6英寸宽的纸张的打印设备。(逗号代表或)

    • 指定否定条件:

    eg:@media not screen and (monochrome)
    要指定否定条件,可以在媒体声明中添加关键字not,不能在单个条件前使用not。该关键字必须位于声明的开头,而且它会否定整个声明。所以,上面的示例会应用于除单色屏幕外的所有设备。

    css3 media 的媒体查询

    1. 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>Documenttitle>
    8. head>
    9. <style>
    10. * {
    11. margin: 0;
    12. padding: 0;
    13. }
    14. li {
    15. list-style: none;
    16. }
    17. /*
    18. 响应式的布局尺寸,这个是根据领导的需求来定义的
    19. */
    20. /* - 超小屏幕(手机小于 768px )设置宽度 100% */
    21. @media screen and (max-width: 768px) {
    22. .container {
    23. width: 100%;
    24. background-color: skyblue;
    25. }
    26. .container ul {
    27. flex-wrap: wrap;
    28. }
    29. .container ul li {
    30. width: 33.33%;
    31. height: 30px;
    32. line-height: 30px;
    33. }
    34. }
    35. /* - 小屏幕(平板,大于768px)设置宽度 750px(为什么宽度会小一些是因为两边要留白 ) */
    36. @media screen and (min-width: 768px) {
    37. .container {
    38. width: 750px;
    39. background-color: blue;
    40. }
    41. .container ul {
    42. justify-content: space-around;
    43. align-items: center;
    44. }
    45. .container ul li {
    46. width: 100px;
    47. height: 30px;
    48. line-height: 30px;
    49. }
    50. }
    51. /* - 中等屏幕(桌面显示器,大于等于992px)宽度设置970px */
    52. @media screen and (min-width: 992px) {
    53. .container {
    54. width: 970px;
    55. background-color: pink;
    56. }
    57. .container ul {
    58. justify-content: space-around;
    59. align-items: center;
    60. }
    61. .container ul li {
    62. width: 100px;
    63. height: 30px;
    64. line-height: 30px;
    65. }
    66. }
    67. /* - 大屏幕(大桌面显示器,大于等于1200px) 宽度设置 1170px */
    68. @media screen and (min-width: 1200px) {
    69. .container {
    70. width: 1170px;
    71. background-color: red;
    72. }
    73. .container ul {
    74. justify-content: space-around;
    75. align-items: center;
    76. }
    77. .container ul li {
    78. width: 100px;
    79. height: 30px;
    80. line-height: 30px;
    81. }
    82. }
    83. .container {
    84. height: auto;
    85. margin: auto;
    86. }
    87. .container ul {
    88. display: flex;
    89. }
    90. style>
    91. <body>
    92. <div class="container">
    93. <ul>
    94. <li>导航栏li>
    95. <li>导航栏li>
    96. <li>导航栏li>
    97. <li>导航栏li>
    98. <li>导航栏li>
    99. <li>导航栏li>
    100. ul>
    101. div>
    102. body>
    103. html>

    Bootstrap 响应式框架

    • Bootstrap 提了栅格布局(指的就是把页面平均分成12个列) container 宽度是固定的,在不同的屏幕下container 的宽度是不同的,看以上代码。

    超小屏幕(手机)<768px小屏设备(平板)>= 768px中等屏幕(桌面)>= 992px宽设备(大桌面显示器)>= 1200px
    .container最大宽度自动(100%)750px970px1170px
    类前缀.col-xs-.col-sm-.col-md-.col-lg-
    列(column)数12121212

    行(row)必须放到container布局容器里面 我们实现列的平均划分需要给列添加类前缀

    xs-extra small:超小;sm-small:小;md-medium:中等;lg-large:大;

    在不同的屏幕尺寸下显示不同的尺寸 列(column)大于12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列

    每一列默认有左右15像素的padding 可以同时为一列指定多个设备的类名,以便划分不同份数例如class="col-md-4co-sm-6"

    1. 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">
    7. <title>Bootstrap 101 Templatetitle>
    8. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
    9. integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    10. head>
    11. <style>
    12. [class^="col"] {
    13. border: 1px solid rgb(177, 171, 171);
    14. }
    15. * {
    16. padding: 0;
    17. margin: 0;
    18. }
    19. .container .row:first-of-type {
    20. background-color: pink;
    21. }
    22. style>
    23. <body>
    24. <div class="container">
    25. <div class="row">
    26. <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
    27. 平均正好12分,铺满整个container 容器
    28. div>
    29. <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
    30. 栅格布局
    31. div>
    32. <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
    33. 栅格布局
    34. div>
    35. <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
    36. 栅格布局
    37. div>
    38. div>
    39. <br>
    40. <div class="row">
    41. <div class="col-md-4">
    42. col-md-4 中等的时候将布局 分成 3 份 会有溢出
    43. div>
    44. <div class="col-md-4">
    45. 栅格布局
    46. div>
    47. <div class="col-md-4">
    48. 栅格布局
    49. div>
    50. <div class="col-md-4">
    51. 栅格布局
    52. div>
    53. div>
    54. <br>
    55. <div class="row">
    56. <div class="col-sm-6">
    57. col-sm-6 平板的时候将布局 分成 2 份 正好铺满
    58. div>
    59. <div class="col-sm-6">
    60. 栅格布局
    61. div>
    62. <div class="col-sm-6">
    63. 栅格布局
    64. div>
    65. <div class="col-sm-6">
    66. 栅格布局
    67. div>
    68. div>
    69. <br>
    70. <div class="row">
    71. <div class="col-xs-12">
    72. col-xs-12 手机的时候将布局 分成 1 份 正好铺满
    73. div>
    74. <div class="col-xs-12">
    75. 栅格布局
    76. div>
    77. <div class="col-xs-12">
    78. 栅格布局
    79. div>
    80. <div class="col-xs-12">
    81. 栅格布局
    82. div>
    83. div>
    84. <br>
    85. <div class="row">
    86. <div class="col-lg-6">
    87. 证明:大屏下 如果份数相加小于12份呢,会保留那一份
    88. div>
    89. <div class="col-lg-2">
    90. 栅格布局
    91. div>
    92. <div class="col-lg-2">
    93. 栅格布局
    94. div>
    95. <div class="col-lg-1">
    96. 栅格布局
    97. div>
    98. div>
    99. <br>
    100. <div class="row">
    101. <div class="col-lg-6">
    102. 证明:大屏下 如果份数相加大于12份呢,则会进行换行
    103. div>
    104. <div class="col-lg-2">
    105. 栅格布局
    106. div>
    107. <div class="col-lg-2">
    108. 栅格布局
    109. div>
    110. <div class="col-lg-3">
    111. 栅格布局
    112. div>
    113. div>
    114. <br>
    115. <div class="row">
    116. <div class="col-lg-4">
    117. <div class="row">
    118. <div class="col-lg-6">1div>
    119. <div class="col-lg-6">2div>
    120. <div class="col-lg-6">3div>
    121. <div class="col-lg-6">4div>
    122. div>
    123. div>
    124. <div class="col-lg-4">列嵌套盒子div>
    125. <div class="col-lg-4">3div>
    126. div>
    127. <br>
    128. <div class="row">
    129. <div class="col-lg-4">偏移的份数 12 - 4+4div>
    130. <div class="col-lg-4 col-md-offset-4">右侧偏移 col-md-offset-4div>
    131. div>
    132. <div class="row">
    133. <div class="col-lg-8 col-md-offset-2">左偏移 col-md-offset-2div>
    134. div>
    135. <br>
    136. <div class="row">
    137. <div class="col-lg-4 col-lg-push-8">col-lg-push-8 向右div>
    138. <div class="col-lg-8 col-lg-pull-4">col-lg-pull-4 向左div>
    139. div>
    140. <br>
    141. <div class="row">
    142. <div style="background-color: rgb(95, 202, 148);" class="col-lg-3 hidden-lg">大屏幕下我会隐藏哦div>
    143. <div style="background-color: rgb(171, 92, 224);" class="col-lg-3 hidden-xs">超小屏幕下我会隐藏哦div>
    144. <div style="background-color: rgb(231, 114, 94);" class="col-lg-3 hidden-sm">小屏幕下我会隐藏哦div>
    145. <div style="background-color: rgb(59, 137, 182);" class="col-lg-3 hidden-md">中屏幕下我会隐藏哦div>
    146. div>
    147. div>
    148. <script src="https://cdn.jsdelivr.cn/npm/jquery@1.12.4/dist/jquery.min.js"
    149. integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"
    150. crossorigin="anonymous">script>
    151. <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
    152. integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
    153. crossorigin="anonymous">script>
    154. body>
    155. html>

    bootstrap 的响应式工具,不得尺寸进行隐藏

    • 为了加快对移动设备友好的页面开发工作,利用媒体查询功能,并使用这些工具类可以方便的针对不同设备 展示或隐藏页面内容。

    • 相反也有我们的 visible-xs,-sm,-md,-lg 指定的尺寸下会显示哦

    类名超小屏小屏中屏大屏
    .hidden-xs隐藏可见可见可见
    .hidden-sm可见隐藏可见可见
    .hidden-md可见可见隐藏可见
    .hidden-lg可见可见可见隐藏

    实战练习跟着上面的笔记练习一下吧

     

    效果在这里看:Document

    网页的源代码

    1. 克隆: git colone https://gitee.com/szhihao/responsive-web-page.git
    2. 地址是: https://gitee.com/szhihao/responsive-web-page

    总结

    响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局。

    传统的开发方式是PC端开发一套,手机端再开发一套,而使用响应式布局只要开发一套就够了。

    响应式设计与自适应设计的区别:响应式开发一套界面,

    通过检测视口分辨率,针对不同客户端在客户端做代码处理,

    来展现不同的布局和内容;自适应需要开发多套界面,

    通过检测视口分辨率,来判断当前访问的设备是pc端、平板、手机,

    从而请求服务层,返回不同的页面。CSS3媒体查询可以让我们针对不同的媒体类型定义不同的样式,

    当重置浏览器窗口大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。

  • 相关阅读:
    带UI的Qt自定义标题栏
    《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)
    机器人控制器编程实践指导书旧版-实践四 步进电机(执行器)
    上海亚商投顾:三大指数小幅下跌 光刻机概念股午后走强
    PyQT5 普通按钮互斥选中
    微信小程序云开发-云函数发起https请求简易封装函数
    使用极域电子教室控制学员机开机问题
    ICMP协议(二)
    Scala爬虫程序爬取建筑业数据采集
    基于SpringBoot+Vue+uniapp微信小程序的学生实习与就业管理系统的详细设计和实现
  • 原文地址:https://blog.csdn.net/qq_54753561/article/details/126455943