第三篇:Day7-9 响应式布局+JS DOM进阶——实现“多端兼容+动态数据渲染”(对标职场“移动端适配”核心需求)

一、为什么这3天是职场"适配能力"的核心关卡?

现在职场中"移动端优先"已成为行业共识------产品不仅要适配电脑端,还要兼容手机、平板等多设备,同时需支持"动态数据更新"(如商品列表、新闻资讯)。很多新手卡在"电脑端好看,手机端错乱""静态页面不会加动态数据",核心是没掌握"响应式布局体系"和"DOM批量操作"逻辑。

这3天我们聚焦2个职场必过关卡:1. 一套代码适配多端(响应式布局完整方案);2. 动态渲染数据(对接后端接口的前置能力),帮你解决"多端兼容"和"数据交互"两大核心痛点。

二、Day7:响应式布局体系------一套代码适配所有设备

1. 职场避坑:响应式不是"写多套代码"

新手常误解"响应式=电脑端一套代码+手机端一套代码",这会导致开发效率低、维护成本高。职场正确做法是"一套代码+设备适配规则",核心原理是"根据设备宽度自动调整样式",关键依赖3个核心技术:视图端口设置、媒体查询、弹性单位。

2. 核心知识点:响应式三驾马车(附职场用法)

核心技术 核心作用 职场代码示例 注意事项
视图端口(viewport) 让手机端正确识别页面宽度 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 必须写在HTML头部,否则手机端会缩放显示
媒体查询(media query) 根据设备宽度切换样式 @media (max-width: 768px) { /* 手机端样式 */ } 常用断点:768px(手机/平板分界)、1200px(平板/电脑分界)
弹性单位 实现元素大小自适应 width: 50%; font-size: 1rem; padding: 2vw; 优先用%、rem、vw,少用固定px

3. 实战:响应式新闻列表(对接职场"多端内容展示"需求)

需求:电脑端3列展示、平板端2列展示、手机端1列展示,标题字体大小随设备自适应。

复制代码

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>响应式新闻列表</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: "Microsoft YaHei", sans-serif; padding: 20px; } .news-container { /* 开启弹性布局,支持换行 */ display: flex; flex-wrap: wrap; gap: 20px; max-width: 1400px; margin: 0 auto; } .news-item { /* 电脑端3列:100%/3 - 间距偏移 */ flex: 1 1 calc(33.333% - 14px); border: 1px solid #eee; border-radius: 8px; padding: 16px; } .news-title { /* 弹性字体:rem基于根元素字体大小 */ font-size: 1.2rem; margin-bottom: 8px; color: #333; } .news-desc { font-size: 0.9rem; color: #666; line-height: 1.5; } /* 平板端:768px-1200px 2列展示 */ @media (max-width: 1200px) { .news-item { flex: 1 1 calc(50% - 10px); } } /* 手机端:≤768px 1列展示 */ @media (max-width: 768px) { .news-item { flex: 1 1 100%; } .news-title { /* 手机端标题缩小 */ font-size: 1rem; } } </style> </head> <body> <div class="news-container" id="newsContainer"> </div> </body> </html>

职场验收标准:1. 拖动浏览器窗口缩小,当宽度≤1200px时自动变为2列,≤768px时变为1列;2. 各设备下内容无溢出、无横向滚动条;3. 字体大小随设备自适应,可读性良好。

三、Day8-9:JS DOM进阶------动态数据渲染+批量操作

1. 职场认知:动态渲染的核心价值

职场中90%的页面都是"动态数据"------比如电商商品列表(数据来自后端)、用户评论(实时更新)、新闻资讯(定时刷新)。静态写死的内容无法满足"数据实时更新"需求,JS DOM进阶的核心就是"批量操作元素+数据与视图联动"。

2. 核心知识点:动态渲染三大步骤

职场中动态渲染通用流程:准备数据 → 拼接HTML结构 → 插入页面,关键技术点包括数组遍历、模板字符串、DOM批量插入。

技术点 核心作用 职场优势
数组遍历(forEach) 循环处理多条数据 比for循环代码更简洁,可读性更高
模板字符串(` `) 拼接复杂HTML结构 支持换行和变量插入,避免字符串拼接错误
innerHTML 批量插入HTML 比appendChild更高效,减少DOM操作次数

3. 实战:动态渲染新闻列表+筛选功能(对接职场"数据交互"需求)

需求升级:1. 用JS动态渲染新闻数据;2. 添加"全部/科技/娱乐"筛选按钮,点击筛选对应分类新闻;3. 筛选时添加"加载中"提示,提升用户体验。

复制代码

// 1. 模拟后端返回的新闻数据(实际开发中来自接口) const newsData = [ { id: 1, title: "前端响应式布局最佳实践", desc: "分享职场中常用的响应式布局技巧,适配多端无压力", category: "科技" }, { id: 2, title: "2024年娱乐行业趋势分析", desc: "解析娱乐行业最新动态,影视与综艺发展方向", category: "娱乐" }, { id: 3, title: "JS DOM批量操作效率优化", desc: "如何减少DOM操作次数,提升页面渲染性能", category: "科技" }, { id: 4, title: "热门综艺收视率排行榜", desc: "最新一期综艺收视率出炉,头部节目表现亮眼", category: "娱乐" }, { id: 5, title: "CSS弹性单位实战指南", desc: "rem、vw、%的正确使用场景,避免适配踩坑", category: "科技" }, { id: 6, title: "经典电影重映票房回顾", desc: "多部经典电影重映,票房表现超出预期", category: "娱乐" } ]; // 2. 获取页面元素 const newsContainer = document.getElementById('newsContainer'); const filterContainer = document.createElement('div'); // 动态创建筛选容器 // 3. 初始化页面:添加筛选按钮 function initFilter() { filterContainer.style.textAlign = 'center'; filterContainer.style.marginBottom = '20px'; // 筛选按钮HTML(模板字符串) const filterBtns = ` <button class="filter-btn active" data-category="all">全部</button> <button class="filter-btn" data-category="科技">科技</button> <button class="filter-btn" data-category="娱乐">娱乐</button> `; filterContainer.innerHTML = filterBtns; // 添加筛选按钮样式(也可写在CSS中,这里演示动态样式) const btns = filterContainer.querySelectorAll('.filter-btn'); btns.forEach(btn => { btn.style.padding = '8px 16px'; btn.style.margin = '0 8px'; btn.style.border = 'none'; btn.style.borderRadius = '4px'; btn.style.cursor = 'pointer'; btn.style.backgroundColor = '#eee'; // 激活状态样式 if (btn.classList.contains('active')) { btn.style.backgroundColor = '#42b983'; btn.style.color = '#fff'; } }); // 插入筛选容器到页面 document.body.insertBefore(filterContainer, newsContainer); // 绑定筛选点击事件 bindFilterEvent(); } // 4. 绑定筛选按钮点击事件 function bindFilterEvent() { const filterBtns = filterContainer.querySelectorAll('.filter-btn'); filterBtns.forEach(btn => { btn.addEventListener('click', function() { // 切换激活状态 filterBtns.forEach(b => { b.classList.remove('active'); b.style.backgroundColor = '#eee'; b.style.color = '#000'; }); this.classList.add('active'); this.style.backgroundColor = '#42b983'; this.style.color = '#fff'; // 获取筛选分类(data-*属性存储自定义数据) const category = this.getAttribute('data-category'); // 渲染筛选后的数据 renderNews(category); }); }); } // 5. 动态渲染新闻列表 function renderNews(category) { // 显示加载中提示 newsContainer.innerHTML = '<div style="text-align:center; width:100%; padding:50px 0;">加载中...</div>'; // 模拟接口请求延迟(实际开发中是真实接口等待时间) setTimeout(() => { // 筛选数据:全部则返回所有,否则返回对应分类 const filteredData = category === 'all' ? newsData : newsData.filter(item => item.category === category); // 拼接HTML结构(模板字符串+数组遍历) let newsHtml = ''; filteredData.forEach(item => { // 模板字符串插入变量 newsHtml += ` <div class="news-item"> <h3 class="news-title">${item.title}</h3> <p class="news-desc">${item.desc}</p> <p style="margin-top:8px; font-size:0.8rem; color:#999;">分类:${item.category}</p> </div> `; }); // 无数据提示 if (filteredData.length === 0) { newsHtml = '<div style="text-align:center; width:100%; padding:50px 0;">暂无该分类新闻</div>'; } // 批量插入页面 newsContainer.innerHTML = newsHtml; }, 500); // 模拟500ms延迟 } // 6. 页面加载完成后初始化 window.addEventListener('load', function() { initFilter(); // 初始化筛选按钮 renderNews('all'); // 默认渲染全部新闻 });

4. 职场逻辑拆解

  • 数据处理:用`filter`方法筛选数据,符合职场"数据预处理"逻辑;

  • 性能优化:通过`setTimeout`模拟加载状态(提升用户体验),用`innerHTML`批量插入(减少DOM操作次数);

  • 扩展性:如果后续增加"体育"分类,只需在`newsData`中添加对应数据,无需修改渲染逻辑;

  • 语义化数据:用`data-category`存储分类信息,避免硬编码,符合职场"可维护性"要求。

四、3天总结:职场能力落地清单

  1. 能独立完成响应式布局开发,掌握"视图端口+媒体查询+弹性单位"核心组合;

  2. 能通过"数组遍历+模板字符串+innerHTML"实现动态数据渲染,理解后端数据对接的前置逻辑;

  3. 掌握`data-*`自定义属性、`filter`数组方法、事件委托等职场高频技巧;

  4. 完成作业:基于本文代码,添加"搜索框"功能(输入关键词筛选新闻标题包含关键词的内容),并优化"加载中"提示为动画效果(用CSS实现旋转图标)。

下一篇预告:Day10-12 JS事件进阶+CSS动画------实现"复杂交互+视觉动效"(对标职场"用户体验优化"需求)

相关推荐
一 乐1 小时前
旅游出行|基于Springboot+Vue的旅游出行管理系统设计与实现(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·旅游
想睡好1 小时前
元素的显示和隐藏 html5和css3的一些新特性
前端·css3·html5
p***32351 小时前
Nginx 配置前端后端服务
运维·前端·nginx
我看刑1 小时前
【已解决】el-date-picker type=“datetime“限制(动态)可选时间范围,精确到分钟!!!
前端·javascript·vue.js
周周爱喝粥呀2 小时前
【基础】Three.js 实现 3D 字体加载与 Matcap 金属质感效果(附案例代码)
前端·javascript·vue.js·3d
克喵的水银蛇2 小时前
Flutter 通用输入框封装实战:带校验 / 清除 / 密码切换的 InputWidget
前端·javascript·flutter
2501_915909062 小时前
Fiddler抓包与接口调试实战,HTTPHTTPS配置、代理设置与移动端抓包详解
前端·测试工具·ios·小程序·fiddler·uni-app·webview
我命由我123453 小时前
微信小程序开发 - 为 tap 事件的处理函数传递数据
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
百万蹄蹄向前冲6 小时前
Trae Genimi3跟着官网学实时通信 Socket.io框架
前端·后端·websocket