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

CSS系列(12)-- 响应式设计详解

前端技术探索系列:CSS 响应式设计详解 📱

致读者:掌握响应式设计的艺术 👋

前端开发者们,

今天我们将深入探讨 CSS 响应式设计,学习如何创建适应各种设备的网页布局。

响应式基础 🚀

视口设置

<!-- 视口元标签 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">

媒体查询基础

/* 基础媒体查询 */
/* 移动优先 */
.element {/* 移动端基础样式 */width: 100%;padding: 15px;
}/* 平板 */
@media (min-width: 768px) {.element {width: 50%;padding: 20px;}
}/* 桌面 */
@media (min-width: 1024px) {.element {width: 33.333%;padding: 30px;}
}/* 复杂媒体查询 */
@media (min-width: 768px) and (max-width: 1023px) and (orientation: landscape) {.element {/* 特定设备和方向的样式 */}
}

响应式单位

/* 响应式单位使用 */
.responsive-text {/* 相对于视口宽度 */font-size: 5vw;/* 相对于视口高度 */height: 50vh;/* 相对于视口最小尺寸 */padding: 2vmin;/* 相对于视口最大尺寸 */margin: 2vmax;/* rem 单位 */font-size: 1.2rem;
}/* 响应式根字体大小 */
html {font-size: 16px;
}@media (min-width: 768px) {html {font-size: calc(16px + 0.5vw);}
}

响应式布局策略 🎯

弹性布局

/* Flexbox 响应式布局 */
.flex-container {display: flex;flex-wrap: wrap;gap: 20px;
}.flex-item {flex: 1 1 300px; /* 增长 收缩 基准值 */
}/* 响应式导航 */
.nav {display: flex;flex-direction: column;
}@media (min-width: 768px) {.nav {flex-direction: row;justify-content: space-between;}
}

网格布局

/* Grid 响应式布局 */
.grid-container {display: grid;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));gap: 20px;
}/* 响应式区域布局 */
.layout {display: grid;grid-template-areas:"header""nav""main""sidebar""footer";
}@media (min-width: 768px) {.layout {grid-template-areas:"header header""nav nav""main sidebar""footer footer";grid-template-columns: 1fr 300px;}
}

响应式图片

/* 响应式图片 */
.responsive-image {max-width: 100%;height: auto;
}/* 艺术指导 */
.art-directed-img {content: url('mobile.jpg');
}@media (min-width: 768px) {.art-directed-img {content: url('tablet.jpg');}
}@media (min-width: 1024px) {.art-directed-img {content: url('desktop.jpg');}
}

实践项目:响应式框架 🛠️

class ResponsiveFramework {constructor(options = {}) {this.options = {breakpoints: {sm: 576,md: 768,lg: 992,xl: 1200,xxl: 1400},container: {sm: 540,md: 720,lg: 960,xl: 1140,xxl: 1320},columns: 12,gutters: 30,...options};this.init();}init() {this.createStyles();this.setupResizeHandler();this.setupOrientationHandler();}createStyles() {const style = document.createElement('style');style.textContent = this.generateStyles();document.head.appendChild(style);}generateStyles() {return `${this.generateGridSystem()}${this.generateUtilities()}${this.generateResponsiveHelpers()}`;}generateGridSystem() {let styles = `.container {width: 100%;margin-right: auto;margin-left: auto;padding-right: ${this.options.gutters / 2}px;padding-left: ${this.options.gutters / 2}px;}`;// 容器响应式宽度Object.entries(this.options.container).forEach(([breakpoint, width]) => {styles += `@media (min-width: ${this.options.breakpoints[breakpoint]}px) {.container {max-width: ${width}px;}}`;});// 网格系统styles += `.row {display: flex;flex-wrap: wrap;margin-right: -${this.options.gutters / 2}px;margin-left: -${this.options.gutters / 2}px;}[class^="col-"] {position: relative;width: 100%;padding-right: ${this.options.gutters / 2}px;padding-left: ${this.options.gutters / 2}px;}`;// 列宽度类for (let i = 1; i <= this.options.columns; i++) {styles += `.col-${i} {flex: 0 0 ${(i / this.options.columns) * 100}%;max-width: ${(i / this.options.columns) * 100}%;}`;}return styles;}generateUtilities() {return `.d-none { display: none !important; }.d-block { display: block !important; }.d-flex { display: flex !important; }.d-grid { display: grid !important; }.text-center { text-align: center !important; }.text-left { text-align: left !important; }.text-right { text-align: right !important; }.flex-column { flex-direction: column !important; }.flex-row { flex-direction: row !important; }.flex-wrap { flex-wrap: wrap !important; }.flex-nowrap { flex-wrap: nowrap !important; }`;}generateResponsiveHelpers() {let styles = '';Object.entries(this.options.breakpoints).forEach(([name, width]) => {styles += `@media (min-width: ${width}px) {.d-${name}-none { display: none !important; }.d-${name}-block { display: block !important; }.d-${name}-flex { display: flex !important; }.d-${name}-grid { display: grid !important; }.text-${name}-center { text-align: center !important; }.text-${name}-left { text-align: left !important; }.text-${name}-right { text-align: right !important; }}`;});return styles;}setupResizeHandler() {let timeout;window.addEventListener('resize', () => {clearTimeout(timeout);timeout = setTimeout(() => {this.handleResize();}, 250);});}handleResize() {const width = window.innerWidth;document.documentElement.style.setProperty('--viewport-width', `${width}px`);}setupOrientationHandler() {window.addEventListener('orientationchange', () => {this.handleOrientationChange();});}handleOrientationChange() {// 处理方向变化document.documentElement.classList.toggle('landscape', window.orientation === 90 || window.orientation === -90);}
}

最佳实践建议 💡

  1. 设计策略

    • 采用移动优先
    • 设置合理断点
    • 使用相对单位
    • 保持简单性
  2. 性能优化

    • 优化媒体资源
    • 控制 HTTP 请求
    • 使用条件加载
    • 优化渲染性能
  3. 可访问性

    • 保持内容可读
    • 适当的触摸目标
    • 键盘导航支持
    • 屏幕阅读器兼容

写在最后 🌟

响应式设计是现代网页开发的基础技能,掌握这些技术可以帮助我们创建更好的用户体验。

进一步学习资源 📚

  • 响应式设计模式
  • 移动优先策略
  • 性能优化指南
  • 响应式框架研究

如果你觉得这篇文章有帮助,欢迎点赞收藏,也期待在评论区看到你的想法和建议!👇

终身学习,共同成长。

咱们下一期见

💻

相关文章:

CSS系列(12)-- 响应式设计详解

前端技术探索系列&#xff1a;CSS 响应式设计详解 &#x1f4f1; 致读者&#xff1a;掌握响应式设计的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 响应式设计&#xff0c;学习如何创建适应各种设备的网页布局。 响应式基础 &#x1f680; 视口设…...

filecoin boost GraphQL API 查询

查询示例 查询失败交易 curl -X POST \ -H "Content-Type: application/json" \ -d {"query":"query { deals(limit: 10, query: \"failed to get size of imported\") { deals { ID CreatedAt Message } } }"} \ http://localhost:…...

SAS - Subtractive Port

在SAS&#xff08;串行连接SCSI&#xff0c;Serial Attached SCSI&#xff09;协议中&#xff0c;subtractive port 是一种特殊类型的端口&#xff0c;主要用于设备间的路由功能。它的作用是在路径选择过程中充当默认路径&#xff0c;以处理未明确指定路径的请求。以下是它的定…...

TCP客户端模拟链接websocket服务端

因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了&#xff0c;需要研究下&#xff0c;以下是个人研究的方案。 用线上和本地地址来做例子&#xff1a; 线上wss地址&#xff1a;wss://server.cs.com/cs/vido/1 本地地址ws://127…...

TypeScript 的崛起:全面解析与深度洞察

一、背景与起源 &#xff08;一&#xff09;JavaScript 的局限性 类型系统缺失 难以在编码阶段发现类型相关错误&#xff0c;导致运行时错误频发。例如&#xff0c;将字符串误当作数字进行数学运算&#xff0c;可能在运行时才暴露问题。函数参数类型不明确&#xff0c;容易传入…...

c#笔记2024

Ctrl r e自动添加get和set CompositeCurve3d 复合曲线 List<Entity> entS listline.Cast<Entity>().ToList();//list类型强转 前面拼上\u0003&#xff0c;就可以实现&#xff0c;不管有没有命令都能打断当前命令的效果 取消其他命令&#xff1a;Z.doc.SendStri…...

Hadoop一课一得

Hadoop作为大数据时代的奠基技术之一&#xff0c;自问世以来就深刻改变了海量数据存储与处理的方式。本文将带您深入了解Hadoop&#xff0c;从其起源、核心架构、关键组件&#xff0c;到典型应用场景&#xff0c;并结合代码示例和图示&#xff0c;帮助您更好地掌握Hadoop的实战…...

AI生成图表化:深入探索Mermaid

引言 在使用生成式AI时&#xff0c;只要你提出让AI帮你生成mermaid图&#xff0c;AI的生成就会出现丰富的图形&#xff01; 在现代文档编写中&#xff0c;图表的使用不仅能增强文档的可读性&#xff0c;还能更直观地表达复杂的概念和流程。Mermaid 作为一款开源的图表绘制工具…...

25.DDD数量关系

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 关系型数据库的数量关系领域模型的数量关系实现聚合数量关系聚合内聚合间具体说明代码 数量关系是本质吗&#xff1f;领域对象之…...

Linux应用开发————线程池

线程池 定义&#xff1a;简单来说&#xff0c;就是存放多个线程的池子。当创建线程池时&#xff0c;就给池中存放一些线程&#xff0c;如果有任务要执行&#xff0c;就从池中取出一个线程执行任务&#xff0c;依次类推&#xff1b;当所有线程都在执行任务时&#xff0c;其他任务…...

Spring Boot 集成阿里云OSS 完成文件上传下载

前言&#xff1a; 文件上传下载在项目开发中是一个非常常见的业务场景&#xff0c;在云服务上还没有兴起的时候&#xff0c;一般来说都会把文件单独存放到文件服务器上&#xff0c;随着云服务的兴起&#xff0c;各类云服务厂商都提供了 OSS 服务&#xff0c;本篇我们分享 Spri…...

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图&#xff0c;想到的还是高分辨率的ERA5land的数据&#xff08;0.1分辨率&#xff0c;逐小时分辨率&#xff0c;1950年至今&#xff09;。 风向&#xff0c;我分为了16个&…...

测试脚本并发多进程:pytest-xdist用法

参考&#xff1a;https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解&#xff1a; https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...

数据可视化的Python实现

一、GDELT介绍 GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的&#xff0c;识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件&#xff0c;GDELT 为全…...

【Linux系列】Linux 系统配置文件详解:`/etc/profile`、`~/.bashrc` 和 `~/.bash_profile`

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长&#xff0c;主要是想要表述的功能点有点多&#xff1b; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分&#xff0c;可以单击预览大图&#xff0c;同时在预览界面可以双指放大缩小图片并且可以移动查看图片&#xff0c;双击放大&#xff0…...

游戏引擎学习第45天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程&#xff0c;展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹&#xff0c;而另一版本是角色会完全停下来。这种方式感觉不太自然&#xff0c;因为在游戏中&#xff0c;…...

electron常用方法

一&#xff0c;,electron设置去除顶部导航栏和menu 1&#xff0c;electron项目 在创建BrowserWindow实例的main.js页面添加frame&#xff1a;false属性 2&#xff0c;electron-vue项目 在src/main/index.js文件下找到创建窗口的方法&#xff08;createWindow&#xff09;&…...

【Spark】Spark Join类型及Join实现方式

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…...

meta llama 大模型一个基础语言模型的集合

LLaMA 是一个基础语言模型的集合&#xff0c;参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需诉诸专有的和无法访问的数据集。特别是&#xff0c;LLaMA-13B 在大多数基准测试…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...