博客列表 >响应式布局

响应式布局

向日葵
向日葵原创
2021年12月28日 22:57:53718浏览

响应式布局:媒体查询

响应式布局的最大特点就是随着设备屏幕的大小改变,页面布局发生改变。
而我们一般的布局前提是宽度受限而高度不受限的空间。
以下,我们一PC端布局为例,进行响应式布局的解析:
首先页面中有三个按钮

  1. <button class="btn small">按钮1</button>
  2. <button class="btn middle">按钮2</button>
  3. <button class="btn large">按钮3</button>
  4. <style>
  5. /* 小按钮 */
  6. .btn.small {
  7. font-size: 1.2rem;
  8. }
  9. /* 中按钮 */
  10. .btn.middle {
  11. font-size: 1.6rem;
  12. }
  13. /* 大按钮 */
  14. .btn.large {
  15. font-size: 1.8rem;
  16. }
  17. </style>
如何实现随着浏览器窗口的大小变化而按钮的大小也发生变化呢?
  • 我们先设置页面的默认文本大小为16px;(不设置的话,默认就是16px);
  1. html {
  2. font-size: 16px;
  3. }
  • 当屏幕大小小于1366px的时候,我们规定他的字体变小,为13.66px;
  1. @media (max-width 1366px) {
  2. html {
  3. font-size:13.66px;
  4. }
  5. }

  • 当屏幕大小大于1920px时,我们规定他的字体变大,为19.2px;
  1. @media (min-width : 1920px){
  2. html {
  3. font-size:19.2px;
  4. }
  5. }

  • 当屏幕大小介于1366到1920px之间时,我们设置他的根文本字号为18px;
  1. @media (min-width:1366px) and (max-width:1919px) {
  2. html {
  3. font-size:18px;
  4. }
  5. }

综上,我们可以总结一下响应式布局的写法,首先基本语法是@media开头,有两种写法:@media only screen and (max-width:XXXpx)=@media (max-width:XXXpx);
其中的max-width的含义为当屏幕宽度小于XX值的时候,min-width的含义为当屏幕宽度大于XX值的时候。即画一条轴来表示:

利用固定定位,写一个登录的蒙层

首先分析一下需求,我们需要一个登录页面的蒙层,那么势必是有一个原始页面,然后点击登录按钮之后,触发蒙层页面显示。

那么我这写了一个很简单的原始页面,有个头部,头部有个登录按钮,然后有一些简单的样式

  1. <header>
  2. <h1 class="title">霍格沃兹魔法学院</h1>
  3. <button onclick="document.querySelector('.modal').style.display='block'">
  4. 登录
  5. </button>
  6. </header>
  7. <style>
  8. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. body {
  15. background-image: url('images/bg.jpg');
  16. }
  17. header {
  18. background-image: url('images/mao.jpg');
  19. background-size: 100% 100%;
  20. padding: 0.5em 1em;
  21. display: flex;
  22. }
  23. header .title {
  24. font-weight: lighter; /*设置文本的粗细,normal默认,bold加粗,bolder更粗的,lighter更细的,或数字*/
  25. font-style: italic; /*设置文本样式,normal默认,italic斜体,oblique倾斜的*/
  26. color: azure;
  27. text-shadow: 1px 1px 1px #555; /*文本阴影效果 水平阴影位置,垂直阴影位置,模糊距离,颜色*/
  28. letter-spacing: 1px; /*设置h1,h2字母间距*/
  29. }
  30. header button {
  31. margin-left: auto;
  32. width: 5em;
  33. border: none;
  34. border-radius: 0.5em;
  35. }
  36. header button:hover {
  37. background-color: blueviolet;
  38. color: white;
  39. cursor: pointer; /*圆角*/
  40. box-shadow: 0 0 10px white;
  41. transition: 0.3s;
  42. }
  43. </style>

重点来了,写一个登录表单,在页面点击登录的时候跳出来

  1. <!-- 模态框表单 -->
  2. <div class="modal">
  3. <div
  4. class="modal-bg"
  5. onclick="this.parentNode.style.display='none'"
  6. ></div>
  7. <form action="a.php" method="post" class="modal-form">
  8. <fieldset style="display: grid; gap: 1em;">
  9. <legend>用户登录</legend>
  10. <input type="email" name="email" placeholder="email@email.com" />
  11. <input type="password" name="password" placeholder="******" />
  12. <button>登录</button>
  13. </fieldset>
  14. </form>
  15. </div>
  1. /* 模态框表单 */
  2. .modal .modal-form fieldset {
  3. background-color: lightcyan;
  4. border: none;
  5. padding: 2em;
  6. box-shadow: 0 0 5px #888;
  7. }
  8. /* 模态框表单标题 */
  9. .modal .modal-form fieldset legend {
  10. padding: 5px 1em;
  11. background-color: rebeccapurple;
  12. color: white;
  13. }
  14. .modal .modal-form {
  15. /* 固定定位 */
  16. position: fixed;
  17. /* 顶部留出预留 */
  18. top: 15em;
  19. /* 左右相等,把表单放正中间 */
  20. left: 20em;
  21. right: 20em;
  22. }
  23. .modal .modal-bg {
  24. position: fixed;
  25. /*全部铺满*/
  26. top: 0;
  27. left: 0;
  28. right: 0;
  29. bottom: 0;
  30. background-color: rgb(0, 0, 0, 0.5); /*0.5透明度*/
  31. }
  32. .modal {
  33. display: none;
  34. }

那么来看一下神奇的效果吧

flex布局

定义一个flex布局的容器:
display:flex
flex容器中的子元素被称为弹性项目或flex项目
flex容器上只要记住三个属性就可以了:
flex-flow:主轴方向 换行,例:flex-flow:row nowrap(不换行【wrap为可换行】)

place-content:项目在主轴上的排列和剩余空间的分配
【值:start起始边对齐,end结束边对齐,center居中对齐,space-between两端对齐,space-around分散对齐,space-evenly平均对齐】

place-items:项目在交叉轴上的对齐方式
【值:stretch如果子项加起来的尺寸小于对齐容器的尺寸,则任何未尺寸为 auto 的项将增加同等的大小(不是按比例),但也会受到 max-height/max-width (或等同的功能)的限制,因此所有项刚好能填满对齐容器;start:起始边对齐;end:结束边对齐;center:居中对齐】

flex容器上的flex属性

flex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。
flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。
注意:如果元素不是弹性盒模型对象的子元素,则 flex 属性不起作用。
flex:放大因子 收缩因子 计算宽度

参数 备注
放大因子(flex-grow): 一个数字,规定项目将相对于其他灵活的项目进行扩展的量。
收缩因子(flex-shrink): 一个数字,规定项目将相对于其他灵活的项目进行收缩的量。
计算宽度(flex-basis): 项目的长度。合法值:”auto”、”inherit” 或一个后跟 “%”、”px”、”em” 或任何其他长度单位的数字。
auto = 1 1 auto
none = 0 0 auto
initial = 0 1 auto (默认值)
inherit 从父级继承

另外flex的项目上还可以设置order属性,order=0的时候是默认值,order=1的时候会往后排,order=-1会往前排,也就是order越小越靠前!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议