搜索
首页web前端css教程总结整理:需要避坑的五大常见css错误(收藏)

本篇文章给大家总结5个最常见的css错误,并介绍一下避坑方法,希望对大家有所帮助!

总结整理:需要避坑的五大常见css错误(收藏)

正如我们今天所知,CSS语言是web的一个重要组成部分。它使我们有能力绘制元素在屏幕、网页或其他媒体中的展示方式。

它简单、强大,而且是声明式的。我们可以很容易地实现复杂的事情,如暗黑/光明模式。然而,对它有很多误解和错误的使用。这些会把CSS标记变成复杂的不可读且不可扩展的代码。

我们如何才能防止这种情况的发生?通过遵循最佳实践,避免最常见的错误。在这篇文章中,我们将总结出5个最常见的错误以及如何避免它们。

1. 不预先设计

不经过思考,立马动手,这样可能会更快的完成任务,这也给了我们一种速度和成就感。但,从长远来看,这会有相反的效果。

在写代码之前,必须要先想清楚。我们将采取什么方式来设计组件?我们想以原子的方式建立我们的组件吗?我们是否愿意创建一个可组合的实用系统?我们想要一个已经内置的UI库吗?我们希望我们的CSS是全局作用域的还是按组件作用域的?

有一个明确的目标将帮助我们选择最好的工具。这将使我们免于冗余和违反DRY。 有许多有效的方法来设计一个应用程序。最常见的无效的是即兴创作。

我们的代码必须是可预测的,易于扩展和维护。

看个例子:

/* ❌ 到处添加离散值 */
.card {
  color: #edb361;
  background-color: #274530;
  padding: 1rem;
}

/* ✅ 定义基于主题的属性 */
:root {
  --primary-bg-color: #274530;
  --accent-text-color: #edb361;
  --spacing-unit: 0.5;
}

.card {
  color: var(--accent-text-color);
  background-color: var(--primary-bg-color);
  padding: calc(var(--spacing-unit) * 2rem);
}

在上面的例子中,我们可以看到当使用CSS变量进行主题设计时,一切都变得可读和清晰。第一个 .card 定义看起来完全是随机的,这个组件不容易被扩展。

2. CSS Code Smells

Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。

Code smells 不是bug。它们也不会妨碍系统的正常工作。它们只是一些不好的做法,会使我们的代码更难阅读和维护。

在这里,列举一些最常见的以及如何克服它们:

:: 符号

在伪元素和伪类中使用 :: 符号是很常见的。这是旧的CSS规范的一部分,浏览器继续支持它作为一种回退。然而,我们应该在伪元素中使用 ::,比如 ::before, ::after, ::frist-line...,在伪类中使用:,比如:link, :visited, :first-child...

使用字符串连接类

使用Sass预处理器来帮助处理我们的CSS代码库是非常流行的。有时在尝试DRY时,我们通过连接&操作符来创建类。

.card {
  border: 0.5 solid rem #fff;
  
  /* ❌ failed attempt to be dry */
  &-selected {
    border-color: #000;
  }
}

在开发人员试图在代码库中搜索.card-selected类之前,似乎没有什么问题。开发者将很难找到这个类。

不正确地使用缩写

CSS的简写非常好,可以让我们避免代码过于冗长。但是,有时我们并没有刻意地使用它们。大多数情况下,background 简写是偶然使用的。

/* ❌ 由于我们只是在设置一个属性,所以不需要使用简写。*/
.foo {
  background: #274530;
}

/* ✅ 使用正确的CSS属性 */
.foo {
  background-color: #274530;
}

!important  的错误使用

!important 规则用于覆盖特定性规则。它的使用主要集中在覆盖一个不能以任何其他方式覆盖的样式。

它通常用于更具体的选择器可以完成任务的场景。

<div class="inner">
  <p>This text is in the inner div.</p>
</div>


<style>
  .inner {
    color: blue;
  }
  
  /* ❌ 重写 color */
  .inner {
    color: orange !important;
  }
</style>


<style>
  .inner {
    color: blue;
  }
  
  /* ✅ 使用一个更具体的选择器规则,该规则将优先于更一般的规则。 */
  .inner p {
    color: orange;
  }
</style>

强制使用属性值

在CSS代码库中出现一个神奇的数字是很常见的。它们带来了相当多的混乱。有时,我们可能会在代码中发现长的数字,因为开发者是为了覆盖一个他不确定的属性。

/* ❌ Brute 强制使这个元素位于z轴的最前面 */
.modal-confirm-dialog {
  z-index: 9999999;
}

/* ✅ 提前计划并定义所有可能的用例 */
.modal-confirm-dialog {
  z-index: var(--z-index-modal-type);
}

3.不对CSS类名进行作用域划分

由于CSS语言的特性,很容易出现元素在无意中被一个糟糕的类名定型的情况。这个问题非常频繁,所以有相当多的解决方案来解决这个问题。

在我看来,最好的两个是:

  • 使用命名约定
  • CSS Modules

命名约定

最流行的命名方式是BEM 101。它代表了 BlockElementModifier方法。

[block]__[element]--[modifier]
/* Example */
.menu__link--blue {
  ...
}

其目的是通过让开发者了解HTML和CSS之间的关系来创建独特的名称。

CSS Modules

我对BEM方法最大的担心是,它很耗时,而且要依靠开发人员来实现。CSS模块发生在预处理器一侧,这使得它没有错误。它为我们的CSS模块类名生成了随机的前缀/名称。

4. 使用 px 单位

像素的使用相当频繁,因为它起初看起来很容易和直观的使用。事实恰恰相反。很久以来,像素已经不再基于硬件了。它们只是基于一个光学参考单元。

px是一个绝对单位。这意味着什么呢?那就是我们不能适当地缩放以满足更多的人。

我们应该用什么来代替?相对单位是要走的路。我们可以依靠这些来更好地表达我们的动态布局。例如,我们可以使用ch来表达一个基于字符数的div宽度。

.article-column {
  /* ✅  我们的元素将最多容纳20个继承的字体大小的字符。 */
  max-width: 20ch;
}

通常情况下,px最常用的替换单位是remem。它们以一种从框到文本的相对方式来表示字体的相对大小。

  • rem 表示相对于根 font-size 的大小。
  • em 表示相对于元素大小的大小。

通过使用 rem,我们将能够根据用户偏好的字体大小来表达布局。

1.png

在上面的截图中,我们可以看到基于 rem 单元的布局如何能够扩展并适应不同的默认字体大小。

5. 忽略浏览器支持

当开始开发一个网站时,定义我们的目标客户是至关重要的。跳过这一步,直接进行编码是很常见的。

为什么它至关重要?它帮助我们了解我们的应用程序将在哪种设备上使用。之后,我们可以定义我们将支持哪些浏览器和哪些版本。

只要我们能提供适当的后备方案,我们仍然可以致力于接受像subgrid这样的后期功能。定义一个渐进的功能体验总是一个好主意。当一个特性得到更多的支持时,我们可以逐步抛弃它的后备方案。

像caniuse.com或browserslist.dev这样的工具在这方面很有帮助。像postcss这样的工具自带的autoprefixer功能将帮助我们的CSS得到更广泛的支持。

总结

我们已经看到了如何改进我们的CSS代码。遵循一些简单的指导原则,我们可以实现一个声明式、可重用和可读的代码库。我们应该在CSS中投入和在Javascript中一样多的精力。

英文原文地址:https://levelup.gitconnected.com/top-5-css-mistakes-to-avoid-963f76892954

作者: Jose Granja

(学习视频分享:css视频教程

以上是总结整理:需要避坑的五大常见css错误(收藏)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:segmentfault。如有侵权,请联系admin@php.cn删除
嘿,让我们使用Jamstack创建功能日历应用程序嘿,让我们使用Jamstack创建功能日历应用程序Apr 19, 2025 am 10:22 AM

嘿,让我们使用Jamstack创建功能日历应用程序

与布局垃圾的斗争与布局垃圾的斗争Apr 19, 2025 am 10:20 AM

一个网页是不锁定石头的网页,只是因为它在视觉上呈现。媒体资产(例如图像)可以进来并导致布局根据其转移

我如何在两天内创建一个代码美化器我如何在两天内创建一个代码美化器Apr 19, 2025 am 10:19 AM

最近,我为代码美化机制作了一条线框。第二天,我决定将其变成真正的工具。整个项目花了不到两天的时间

在100行代码中使用React Hook构建聊天应用程序在100行代码中使用React Hook构建聊天应用程序Apr 19, 2025 am 10:16 AM

我们之前在CSS-Tricks附近看过React Hooks。我也有一篇文章也介绍了它们,该文章说明了如何使用它们来创建它们

在JavaScript应用程序中包括CSS的许多方法在JavaScript应用程序中包括CSS的许多方法Apr 19, 2025 am 10:08 AM

欢迎来到前端发展之地中一个引起争议的话题!我敢肯定,大多数阅读此书都遇到了您的博览会

引入NetLify分析引入NetLify分析Apr 19, 2025 am 10:07 AM

您在附带项目中工作一段时间。您认为它很酷!您决定将其释放到世界上。然后……顺利进行。否则进展不顺利。等待,

五星级评分的五种方法五星级评分的五种方法Apr 19, 2025 am 10:04 AM

在喜欢和社会统计的世界中,评论是留下反馈的非常重要的方法。用户通常喜欢以前知道他人的意见

如果您不知道CSS,哪些CSS很棒,这是最有意义的?如果您不知道CSS,哪些CSS很棒,这是最有意义的?Apr 19, 2025 am 09:56 AM

彼得·保罗(Peter-Paul)发布了这个问题:

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。