当前位置: 首页 > 科技观察

一篇文章带你了解五个需要避免的CSS错误

时间:2023-03-12 05:06:33 科技观察

大家好,我是耍玩志,今天带来一篇JoseGranja的文章,希望对大家有所帮助。文字意见,仅供参与,非标准答案。正如我们今天所知,CSS语言是网络的重要组成部分。它使我们能够绘制元素在屏幕、网页或其他媒体上的显示方式。它简单、强大且具有声明性。我们可以很容易地实现复杂的东西,比如暗/亮模式。但是,它存在许多误解和错误使用。这些将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.CSSCodeSmellsCodeSmell的中文翻译一般是“代码味道”,或者“代码味道”,是代码某处出现错误的提示。开发者可以利用这种气味(smell)在代码中追查。问题。代码味道不是错误。它们也不会干扰系统的正常运行。它们只是使我们的代码更难阅读和维护的不良做法。在这里,一些最常见的以及如何克服它们:::表示法在伪元素和伪类中使用::表示法是很常见的。这是旧CSS规范的一部分,浏览器继续支持它作为后备。然而,我们应该在像::before,::after,::frist-line...这样的伪元素中使用::并且在像:link,:visited,:first-child这样的伪类中使用:这很流行使用字符串连接类使用Sass预处理器来帮助我们的CSS代码库。有时在尝试DRY时,我们通过连接&运算符来创建类。.card{border:0.5solidrem#fff;/*?failedattempttobedry*/&-selected{border-color:#000;}}似乎没有问题,直到开发人员尝试在代码库中搜索.card-selected类.开发人员将很难找到此类。不恰当地使用缩写CSS速记是非常好的,可以让我们避免过于冗长的代码。但是,有时我们不会故意使用它们。大多数时候,背景速记是偶然使用的。/*?因为我们只是设置一个属性,所以没有必要使用速记。*/.foo{background:#274530;}/*?使用正确的CSS属性*/.foo{background-color:#274530;}!important错误使用!important规则来覆盖特异性规则。它的使用主要集中在覆盖无法以任何其他方式覆盖的样式上。它通常用于更具体的选择器可以完成工作的场景。

Thistextisintheinnerdiv.

在CSS代码库中强制使用幻数对于属性值来说非常常见。它们引起了相当大的混乱。有时,我们可能会在代码中发现很长的数字,因为开发人员正在覆盖他不确定的属性。/*?暴力强制此元素位于z轴之上*/.modal-confirm-dialog{z-index:9999999;}/*?提前计划并定义所有可能的用例*/.modal-confirm-dialog{z-index:var(--z-index-modal-type);}3.不限定CSS类名的范围由于CSS语言的特性,元素很容易在不经意间被不好的类刻板化姓名。这个问题很频繁,所以解决这个问题的方案也不少。在我看来,最好的两个是:使用命名约定CSS模块命名约定最流行的命名约定是BEM101。它代表Block、Element、Modifier方法。[block]__[element]--[modifier]/*Example*/.menu__link--blue{...}其目的是通过让开发人员理解HTML和CSS之间的关系来创建唯一的名称。CSS模块我对BEM方法最大的担忧是它非常耗时并且依赖于开发人员来实施。CSS模块发生在预处理器端,这使得它没有错误。它为我们的CSS模块类名生成随机前缀/名称。4.使用px单位像素使用得相当频繁,因为它一开始看起来简单直观。事实恰恰相反。很长一段时间以来,像素都不是基于硬件的。它们仅基于光学参考单元。px是绝对单位。这意味着什么?这是我们无法适当扩展以服务更多人。我们应该用什么代替?相对单位是要走的路。我们可以依靠这些来更好地表达我们的动态布局。例如,我们可以使用ch根据字符数来表示一个div的宽度。.article-column{/*?我们的元素最多可容纳20个继承字体大小的字符。*/max-width:20ch;}通常,px最常用的替换单位是rem和em。它们以从框到文本的相对方式表示字体的相对大小。rem表示相对于根字体大小的大小。em表示相对于元素大小的大小。通过使用rem,我们将能够根据用户喜欢的字体大小来表达布局。在上面的截图中,我们可以看到基于rem单位的布局如何缩放和适应不同的默认字体大小。5.忽略浏览器支持当开始开发一个网站时,定义我们的目标客户是至关重要的。跳过这一步直接开始编码是很常见的。它为什么如此重要?它帮助我们了解我们的应用程序将在哪种设备上使用。之后,我们可以定义我们将支持哪些浏览器和哪些版本。只要我们可以提供适当的回退,我们仍然可以接受像子网格这样的后续功能。定义一个渐进的功能体验总是一个好主意。随着一项功能获得更多支持,我们可以逐步淘汰其后备方案。caniuse.com或browserslist.dev等工具在这方面很有帮助。postcss等工具自带的自动前缀功能将帮助我们的CSS获得更广泛的支持。总结我们已经看到了如何改进我们的CSS代码。遵循一些简单的准则,我们可以实现声明式、可重用和可读的代码库。我们应该像对Javascript一样对CSS付出同样的努力。作者:JoseGranja译者:前端小智来源:medium原文:https://levelup.gitconnected.com/top-5-css-mistakes-to-avoid-963f76892954