当前位置: 首页 > news >正文

移动进阶之高效开发

响应式布局

媒体查询的语法

/* 4.媒体特性 *//* width / max-width / min-width *//* -webkit-device-pixel-ratio / -webkit-max-device-pixel-ratio / -webkit-min-pixel-ratio *//* orientation: landscape / portrait *//* @media screen and (min-width: 320px) {body {background-color: red;}} *//* @media screen and (width: 320px) {body {background-color: red;}} *//* dpr <= 2 且屏幕水平方向 */@media (-webkit-max-device-pixel-ratio: 2) and (orientation: landscape) {body {background-color: red;}}

获取像素比 

// 获取 dprconsole.log(window.devicePixelRatio);

媒体查询(断点)不能实时显示但是性能好 宽高等比例缩放 

按钮点击显示/隐藏

<!-- 导航 --><nav id="nav" class="nav-layout"><ul class="nav-list"><li><a href="./index.html" class="nav-link">首页</a></li><li><a href="javascript:;" class="nav-link">免费课程</a></li><li><a href="javascript:;" class="nav-link">实战课程&amp;金职位</a></li><li><a href="javascript:;" class="nav-link">专栏/手记/猿问</a></li><li><a href="javascript:;" class="nav-link">慕课教程</a></li></ul></nav>
<script>// 点击切换按钮,展开或收起导航菜单{const $toggleBtn = document.getElementById('header-toggle');const $nav = document.getElementById('nav');const navExtendedClassName = 'nav-layout-extended';const toggleBtnExtendedClassName = 'header-toggle-active';$toggleBtn.addEventListener('click',function () {// 判断有就移除样式 没有就添加样式this.classList.toggle(toggleBtnExtendedClassName);$nav.classList.toggle(navExtendedClassName);},false);}</script>
/* nav */
.nav-list {background-color: #fff;
}
.nav-link {display: block;height: 40px;line-height: 40px;padding: 0 20px;color: #363636;font-size: 14px;font-weight: bold;
}
.nav-link:hover {color: #1428a0;
}.nav-layout {overflow: hidden;position: absolute;top: 48px;left: 0;width: 100%;height: 0;/*因为高度为0 不显示设置溢出隐藏*//* background-color: #fff; */transition: height 0.5s;
}
.nav-layout-extended {height: 200px;
}

移动端媒体查询策略从小到大

/* 576px 768px 992px 1200px */
.course-item {width: 100%;
}
@media (min-width: 576px) {.course-item {width: 50%;}
}
@media (min-width: 768px) {.course-item {width: 33.333333%;}.header-toggle {display: none;}.nav-layout {/* 改为默认样式即可 不需要绝对定位 */position: static;height: auto;}.nav-list {display: flex;/* 从右往左排列 */justify-content: flex-end;}
}
@media (min-width: 992px) {.course-item {width: 25%;}
}
@media (min-width: 1200px) {.course-item {width: 16.666667%;}
}

Grid网格布局

Grid容器的属性

grid-template-rows 定义每一行的行高(可以给网格线起名字):[r1] 150px [r2] 150px [r3] 150px [r4] 150px

grid-template-columns 定义每一列的列宽(可以给网格线起名字):[c1] 150px [c2] 150px [c3] 150px [c4] 150px

上面2个属性取值可以是:百分比 fr份数(片段) auto(先于fr计算,获取必要的最小空间) repeat(4,25%) minmax(150px,300px)

grid-auto-flow: row/column 先填满第一行再填满第二行

grid-auto-rows 定义浏览器自动创建的多余空格的行高

grid-auto-columns 定义浏览器自动创建的多余空格的列宽

gap/row-gap/column-grap 行/列间距

grid-template-areas 定义区域(可以给每个区域的起始网格线命名 区域名-start 终止网格线命名 区域名-end)

align-items 垂直对齐 justify-items 水平对齐  place-items 前两者的合并

属性值可以是 start对齐单元格的起始边缘 end对齐单元格的结束边缘  (项目不一定总是铺满单元格)

align-content 设置整个内容区域的垂直位置(上中下)start end center

justify-content 设置整个内容区域的水平位置(左中右)start end center

属性值space-around 每个项目的两侧间隔相等 space-between 项目与项目间隔相等 space-evenly 前2者结合体

Grid项目的属性

grid-column-start/end 从第几个网格线开始,到第几个网格线结束 number|name|span number

grid-row-start/end 从第几个网格线开始,到第几个网格线结束 number|name|span number

grid-area 指定项目放在哪个区域/位置  区域名|左上角到右下角

align-self/justify-self/place-self针对单个项目

圣杯布局

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>圣杯布局</title><style>* {padding: 0;margin: 0;}body {/* display: flex;flex-direction: column; */display: grid;grid-template-rows: 80px 1fr 80px;/* grid-template-columns: 100%; */grid-template-columns: 200px auto 200px;grid-template-areas:'header header header''nav main sidebar''footer footer footer';height: 100vh;font-size: 24px;}.header-layout,.footer-layout {height: 80px;}.header-layout {background-color: red;grid-area: header;}.footer-layout {background-color: yellow;grid-area: footer;}.body-layout {/* flex-grow: 1;display: flex; */display: grid;grid-template-columns: 200px auto 200px;grid-template-rows: 100%;grid-template-areas: 'nav main sidebar';}.main-layout {/* flex-grow: 1; */background-color: gray;grid-area: main;}.nav-layout {/* width: 200px; */background-color: green;/* grid-column-start: 1;grid-column-end: 2;grid-row-start: 1;grid-row-end: 2; *//* order: -1; */grid-area: nav;}.aside-layout {/* width: 200px; */background-color: lightblue;grid-area: sidebar;}/* 垂直水平居中 *//* .flex-center {display: flex;justify-content: center;align-items: center;} */.grid-center {display: grid;justify-items: center;align-items: center;}</style></head><body><header class="header-layout grid-center">头部</header><!-- <div class="body-layout"> --><main class="main-layout grid-center">主体部分</main><nav class="nav-layout grid-center">导航</nav><aside class="aside-layout grid-center">侧栏</aside><!-- </div> --><footer class="footer-layout grid-center">底部</footer></body>
</html>

http://www.lryc.cn/news/25683.html

相关文章:

  • 用户手册:遥测服务之推送至 TDengine
  • 软件测试的主要工作内容是什么
  • 【云原生kubernetes】k8s中job与cronjob使用详解
  • js-cookie的使用
  • c++11 关键字 override 使用
  • 从16K跳槽到20K,最后算下来年薪却还降了,我笑了····
  • 线性表 链表表示
  • 面试题JavaScript篇(二)
  • 项目管理工具dhtmlxGantt甘特图入门教程(十五):从MS项目导入/导出(下)
  • 2023 年 6 大智能合约语言
  • 家用洗地机哪款最好用?全球洗地机十大品牌
  • 【2223sW2】LOG1
  • Spring Cloud配置application.yml与bootstrap.yml区别及多profile配置 | Spring Cloud 6
  • springboot通过aop实现全局日志(是否自定义注解都可以)
  • k8s面试题-进阶
  • 预览版Edge申请微软new Bing失败解决方案
  • Spring中Bean生命周期及循环依赖
  • 【3.1】MySQL锁、动态规划、Redis缓存,过期删除与淘汰策略
  • Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别
  • 计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准)
  • 操作留痕功能实现与探讨
  • 深入浅出消息队列MSMQ
  • Maven多模块开发
  • QT之OpenGL帧缓冲
  • $ 6 :选择、循环
  • 【项目设计】高并发内存池 (四)[pagecache实现]
  • 玩转qsort——“C”
  • 【干货】又是一年跳槽季!Nginx 10道核心面试题及解析
  • 【线程安全的HashMap有哪些,CurrentHashMap底层是怎么实现线程安全的】
  • C语言-结构体【详解】