《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)

在这里插入图片描述

文章目录

  • 8.1 CSS 文件的组织和管理
    • 8.1.1 基础知识
    • 8.1.2 重点案例:项目样式表结构
    • 8.1.3 拓展案例 1:使用BEM命名规范
    • 8.1.4 拓展案例 2:利用 Sass 混入创建响应式工具类
  • 8.2 提高网页加载速度的技巧
    • 8.2.1 基础知识
    • 8.2.2 重点案例:图片优化
    • 8.2.3 拓展案例 1:合并和压缩资源文件
    • 8.2.4 拓展案例 2:使用 CDN 和浏览器缓存
  • 8.3 设计可访问的 Web 界面
    • 8.3.1 基础知识讲解
    • 8.3.2 重点案例:构建可访问的表单
    • 8.3.3 拓展案例 1:使用合适的颜色对比度
    • 8.3.4 拓展案例 2:实现完全键盘可访问的导航

8.1 CSS 文件的组织和管理

良好的CSS文件组织和管理是维持大型项目可维护性的关键。随着项目规模的扩大,没有结构的CSS代码很容易变得难以管理和维护。通过采取一些策略和最佳实践,我们可以确保代码的可读性、可维护性和扩展性。

8.1.1 基础知识

  • 模块化:将CSS代码分割成多个模块或文件,每个模块负责一部分样式,例如布局、组件、工具类等。
  • 命名规范:采用一致的命名规范,如BEM(块、元素、修饰符),以确保类名的语义化和可读性。
  • 预处理器:使用Sass、Less等CSS预处理器,它们提供变量、混入、嵌套等功能,以支持更高级的CSS代码组织。
  • 注释:在CSS代码中添加注释,解释模块的用途、复杂的代码实现或特定的样式选择。

8.1.2 重点案例:项目样式表结构

假设你正在开发一个中到大型的Web应用,需要构建一个清晰、易于管理的CSS结构。

  • 样式目录结构
styles/
|
|-- base/
|   |-- _reset.scss       // 重置浏览器默认样式
|   |-- _typography.scss  // 设置基础字体样式
|
|-- components/
|   |-- _buttons.scss     // 按钮样式
|   |-- _cards.scss       // 卡片组件样式
|
|-- layouts/
|   |-- _header.scss      // 网站头部样式
|   |-- _footer.scss      // 网站底部样式
|
|-- utils/
|   |-- _variables.scss   // 存放所有Sass变量
|   |-- _mixins.scss      // 存放所有混入
|
|-- main.scss             // 主样式文件,@import所有其他文件

通过这种组织方式,我们可以将CSS代码分散到多个更小、更易于管理的文件中,而main.scss则用于汇总这些样式,便于编译。

8.1.3 拓展案例 1:使用BEM命名规范

为了避免样式冲突并提高CSS的可维护性,我们采用BEM命名规范来命名CSS类。

  • 示例代码
/* Block component */
.btn { ... }/* Element that depends upon the block */ 
.btn__price { ... }/* Modifier that changes the style of the block */
.btn--big { ... }

这种命名方法明确了CSS类的作用和关系,提高了代码的可读性和重用性。

8.1.4 拓展案例 2:利用 Sass 混入创建响应式工具类

使用Sass混入(Mixins)来创建一组响应式工具类,以快速应用媒体查询和响应式设计。

  • Sass Mixin 示例
@mixin respond-to($breakpoint) {@if $breakpoint == 'phone' {@media (max-width: 600px) { @content; }} @else if $breakpoint == 'tablet' {@media (max-width: 900px) { @content; }} @else if $breakpoint == 'desktop' {@media (min-width: 901px) { @content; }}
}// 使用混入
@include respond-to('phone') {.example { font-size: 14px; }
}

通过使用Sass混入,我们可以以一种更干净、更可维护的方式实现响应式设计。

通过这些组织和管理CSS文件的策略,我们可以确保即使在最复杂的项目中,样式代码也能保持清晰和高效。随着技术的发展,始终保持代码的组织和结构,对于维护一个长期项目来说至关重要。

在这里插入图片描述


8.2 提高网页加载速度的技巧

在数字化时代,网页的加载速度不仅影响用户体验,也是搜索引擎排名的重要因素。快速加载的网页能够提升用户满意度,减少跳出率,并提高网站的整体表现。以下是一些提高网页加载速度的关键技巧和策略。

8.2.1 基础知识

  • 优化图片:图片通常是网页中体积最大的资源,通过压缩和格式选择,可以显著减少它们的大小。
  • 使用CDN(内容分发网络):CDN可以将内容缓存在全球多个位置,减少服务器响应时间。
  • 减少HTTP请求:通过合并文件、使用CSS精灵、内联小资源等方法减少页面的HTTP请求次数。
  • 异步加载资源:使用异步加载(如JavaScript的asyncdefer属性)可以防止阻塞渲染的脚本延迟页面的显示。
  • 利用浏览器缓存:通过设置合适的缓存策略,可以使回访用户更快地加载页面。

8.2.2 重点案例:图片优化

一个在线零售网站使用了大量的高分辨率产品图片,导致页面加载速度缓慢。

  • 优化步骤
    1. 压缩图片:使用工具如TinyPNG或ImageOptim压缩图片文件大小,而不损失可见的图片质量。
    2. 适当选择格式:对于图标和简单图形,使用SVG格式;对于照片,使用WebP或JPEG格式。
    3. 懒加载:实现图片的懒加载,使得页面初始化时只加载视口内的图片,其他图片在滚动到视口时才加载。

8.2.3 拓展案例 1:合并和压缩资源文件

一个博客网站有多个CSS和JavaScript文件,导致加载速度受影响。

  • 优化步骤
    1. 合并文件:将所有CSS文件合并为一个文件,所有JavaScript文件也合并为一个文件,减少HTTP请求的次数。
    2. 压缩文件:使用工具如UglifyJS和CSSNano等压缩资源文件,去除空格、注释,缩短变量名。

8.2.4 拓展案例 2:使用 CDN 和浏览器缓存

一个视频内容提供网站面临着全球用户的高延迟加载问题。

  • 优化步骤
    1. 部署CDN:选择一个性能良好的CDN服务提供商,将静态资源(如CSS、JavaScript和媒体文件)部署在CDN上,减少地理位置对加载速度的影响。
    2. 配置缓存策略:通过设置HTTP头Cache-ControlExpires,使浏览器缓存静态资源,减少回访用户的加载时间。

通过实施这些技巧,你可以显著提高网页的加载速度,从而改善用户体验和提升网站的SEO表现。记住,网页性能优化是一个持续的过程,定期评估和调整是必要的。使用工具如Google PageSpeed Insights和WebPageTest可以帮助你诊断性能问题并跟踪优化的效果。

在这里插入图片描述


8.3 设计可访问的 Web 界面

在构建网站时,确保每个人都能平等访问和使用你的网站是至关重要的。设计可访问的Web界面意味着要考虑到所有用户的需求,包括那些有视觉、听力、运动和认知障碍的人。通过遵循Web内容可访问性指南(WCAG),我们可以创建一个对所有人更加友好和包容的网络环境。

8.3.1 基础知识讲解

  • 语义化HTML:使用正确的HTML标签(如<header><nav><main><footer>)来提供清晰的文档结构,帮助屏幕阅读器正确解读页面内容。
  • 键盘导航:确保网站的所有功能都可以通过键盘访问,这对那些无法使用鼠标的用户尤其重要。
  • ARIA(Accessible Rich Internet Applications):当标准的HTML元素无法满足交互需求时,使用ARIA角色和属性增强元素的可访问性。
  • 颜色对比度:确保文本和其背景之间有足够的对比度,使得色盲用户和视力不佳的用户也能轻松阅读。
  • 替代文本:为所有非文本内容(如图片)提供替代文本,帮助视觉障碍用户理解内容。

8.3.2 重点案例:构建可访问的表单

表单是网站交互的重要组成部分,确保它们对所有用户都是可访问的至关重要。

  • HTML 结构
<form><label for="name">姓名:</label><input type="text" id="name" name="user_name"><label for="email">电子邮件:</label><input type="email" id="email" name="user_email"><button type="submit">提交</button>
</form>
  • 关键实践
    • 使用<label>元素关联每个输入,提高表单的可访问性。
    • 为重要的表单控件提供明确的指示和错误提示。

8.3.3 拓展案例 1:使用合适的颜色对比度

为网站选择颜色时,确保文本内容与背景之间的对比度符合WCAG指南,至少达到AA级标准。

  • 实践技巧
    • 使用在线工具,如WebAIM的颜色对比度检查器,来验证你的颜色选择。
    • 在设计早期阶段就考虑对比度,确保设计的可访问性。

8.3.4 拓展案例 2:实现完全键盘可访问的导航

网站的导航菜单应该能够通过键盘完全访问,特别是对于那些无法使用鼠标的用户。

  • 实践技巧
    • 确保所有的交互元素(链接、按钮)都可以通过Tab键访问。
    • 使用focus样式提供视觉反馈,显示当前键盘焦点的位置。
    • 在JavaScript中处理keydown事件,以支持复杂的键盘交互。

通过实现这些可访问性最佳实践,我们不仅能够创建一个对所有用户都开放和友好的网站,还能提升我们的品牌形象和法律合规性。记住,设计可访问的Web界面是一个持续的过程,需要我们在设计和开发的每个阶段都保持关注和改进。让我们一起努力,为每个人打造更加开放、平等的数字世界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue源码系列讲解——虚拟DOM篇【四】(优化更新子节点)

目录 1. 前言 2. 优化策略介绍 3. 新前与旧前 4. 新后与旧后 5. 新后与旧前 6. 新前与旧后 7. 回到源码 8. 总结 1. 前言 在上一篇文章中&#xff0c;我们介绍了当新的VNode与旧的oldVNode都是元素节点并且都包含子节点时&#xff0c;Vue对子节点是 先外层循环newChil…

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界&#xff0c;但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好&#xff0c;但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试&#xff0c; 我们尝试过…

《CSS 简易速速上手小册》第5章:CSS 动画与过渡(2024 最新版)

文章目录 5.1 CSS 过渡基础&#xff1a;网页的微妙舞步5.1.1 基础知识5.1.2 重点案例&#xff1a;按钮悬停效果5.1.3 拓展案例 1&#xff1a;渐变显示导航菜单5.1.4 拓展案例 2&#xff1a;动态调整元素大小 5.2 关键帧动画&#xff1a;编排你的网页芭蕾5.2.1 基础知识5.2.2 重…

ctfshow-web21~28-WP

爆破(21-28) web21 题目给了一个zip文件,打开后解压是爆破的字典,我们抓包一下网址看看 发现账号和密码都被base64了,我们发送到intruder模块,给爆破的位置加上$符圈住 去base64解码一下看看格式

【PyQt】09-控件提示信息、Lable标签

文章目录 前言一、控件提示信息1.1 代码1.2 解释 < b >在HTML标签中的作用1.3 添加按键后的代码运行结果 二、QLabel控件介绍2.1 内容2.2 常用的事件2.3 代码结果展示 总结 前言 1、控件提示信息 2、QLabel控件介绍 一、控件提示信息 关键点在于 效果如图所示&#x…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话&#xff0c;直接说结论&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;。如果现实是A&#xff0c;虚拟是B&#xff0c;那么VRB&#xff0c;ARAB&#xff0c;就这简单&…

大模型实战营第二期——3. 基于 InternLM 和 LangChain 搭建你的知识库

github地址&#xff1a;InternLM/tutorial-书生浦语大模型实战营文档地址&#xff1a;基于 InternLM 和 LangChain 搭建你的知识库视频地址&#xff1a;基于 InternLM 和 LangChain 搭建你的知识库Intern Studio: https://studio.intern-ai.org.cn/console/instance动手学大模型…

2-8 单链表+双链表+模拟栈+模拟队列

今天给大家用数组来实现链表栈和队列 单链表&#xff1a; 首先要明白是如何用数组实现&#xff0c; 在这里需要用到几个数组&#xff0c;head表示头节点的下标&#xff0c;e[i]表示表示下标为i的值&#xff0c;ne[i]表示当前节点下一个节点的下标。idx表示当前已经用到那个点…

Git的基础操作指令

目录 1 前言 2 指令 2.1 git init 2.2 touch xxx 2.3 git status 2.4 git add xxx 2.5 git commit -m xxxx 2.5 git log及git log --prettyoneline --all --graph --abbrev-commit 2.6 rm xxx 2.7 git reset --hard xxx(含小技巧) 2.8 git reflog 2.9 mv xxx yyy 1…

【BIAI】Lecture 14 - Sleep and Dreaming

Sleep and Dreaming 专业词汇 pons 延髓 parietal cortex 顶叶皮层 limbic system 边缘系统 temporal cortex 颞叶皮层 dorsolateral prefrontal cortex 背外侧前额叶皮层 pineal gland 松果体 Suprachiasmatic Nucleus 视交叉上核 课程大纲 Sleep stages awake无眼动睡眠&am…

【Python如何求出所有3位数的回文数】

回文数就是正向读和逆向读都相同的数&#xff0c;如66&#xff0c;626&#xff0c;72127 1、求出所有3位数的回文数python代码如下&#xff1a; # 输出所有3位数的回文数 for i in range(100, 1000): # 从100循环到999&#xff0c;不包含1000if str(i) str(i)[::-1]: # 如…

动态水印怎么加 怎么去除动态水印 视频剪辑软件 会声会影安激活序列号 会声会影怎么剪辑视频

为了防止白嫖或者增加美观效果&#xff0c;视频制作者可能会采用动态水印的方式&#xff0c;让其他人难以盗取视频使用。动态水印的添加&#xff0c;需要应用到运动路径功能。接下来&#xff0c;本文会教大家动态水印怎么加&#xff0c;怎么去除动态水印的相关内容。感兴趣的小…

【知识整理】接手新技术团队、管理团队

引言 针对目前公司三大技术中心的不断升级&#xff0c;技术管理岗位要求越来越高&#xff0c;且团队人员特别是管理岗位的选择任命更是重中之重&#xff0c;下面针对接手新的技术团队做简要整理&#xff1b; 一、实践操作 1、前期准备 1、熟悉情况&#xff1a; 熟悉人员&am…

XSS-Lab

1.关于20关的payload合集。 <script>alert(1)</script> "><script>alert(1)</script> onclickalert(1) " onclick"alert(1) "><a href"javascript:alert(1)"> "><a HrEf"javascript:alert…

【机器学习笔记】基于实例的学习

基于实例的学习 文章目录 基于实例的学习1 基本概念与最近邻方法2 K-近邻&#xff08;KNN&#xff09;3 距离加权 KNN4 基于实例/记忆的学习器5 局部加权回归5 多种回归方式对比6 懒惰学习与贪婪学习 ​ 动机&#xff1a;人们通过 记忆和行动来推理学习。 1 基本概念与最近邻方…

C#入门及进阶|数组和集合(六):集合概述

1.集合概述 数组是一组具有相同名称和类型的变量集合&#xff0c;但是数组初始化后就不便于再改变其大小&#xff0c;不能实现在程序中动态添加和删除数组元素&#xff0c;使数组的使用具有很多局限性。集合能解决数组存在的这个问题&#xff0c;下面我们来学习介绍集合…

AES加密中的CBC和ECB

目录 1.说明 2.ECB模式&#xff08;base64&#xff09; 3.CBC模式 4.总结 1.说明 AES是常见的对称加密算法&#xff0c;加密和解密使用相同的密钥&#xff0c;流程如下&#xff1a; 主要概念如下&#xff1a; ①明文 ②密钥 用来加密明文的密码&#xff0c;在对称加密算…

算法学习——LeetCode力扣二叉树篇2

算法学习——LeetCode力扣二叉树篇2 107. 二叉树的层序遍历 II 107. 二叉树的层序遍历 II - 力扣&#xff08;LeetCode&#xff09; 描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#…

用C语言列出Linux或Unix上的网络适配器

上代码&#xff1a; 1. #include <sys/socket.h> 2. #include <stdio.h> 3. 4. #include <netdb.h> 5. #include <ifaddrs.h> 6. 7. int main() { 8. struct ifaddrs *addresses; 9. if(getifaddrs(&addresses) -1) { 10. printf("…