我最近写了篇《掌握和成为更好的Web开发人员的15件事》(地址:https://beforesemicolon.medium.com/15-css-things-to-master-and-become-a-better-web-developer-a18f370a8bc5),然后意识到编写CSS不仅需要专注于某些功能。
通常,使CSS变得困难的原因是,开发人员没有一套可以遵循和使用的工具,以及最佳实践指南,以帮助他们享受编写CSS的乐趣。
多年来,我收集了一组规则和工具,这些规则和工具在CSS之旅中对我有很大帮助,我想与你分享其中我觉得比较实用及有有价值的50条规则。
CSS 预处理器能够帮助你少写CSS,它们可帮助你组织,避免重复和模块化CSS的工具和实用程序。
我个人更喜欢SASS,但我也同样喜欢LESS和Stylus。
我之所以喜欢他们,是因为他们没有采用“新方式”来设置页面样式。它仍然是CSS,具有额外的语法和功能。
区分用于任何一个或一组 HTML 选择器的样式与用于特定事物的样式至关重要。我将所有全局样式保存在一个单独的文件中(尤其是在使用预处理器时),但你也可以将其放在 CSS 文件的顶部,然后专注于为站点的特定组件、元素或部分设置特定样式。
你不需要将所有 CSS 捆绑在一个文件中,除非它会被使用。如果用户登陆主页,则只需要包含该页面的样式即可,不需要其他内容。我将样式表分为基本样式和非基本样式。
基本样式是在页面加载后用户会看到的样式,非基本样式是那些保持隐藏状态的组件,如对话框和通知。需要显示用户操作的元素或组件。
有很多方法可以延迟加载你的CSS文件,使用WebPack等捆绑程序并进行动态导入时通常更容易。你可以创建自己的Javascript CSS加载器,也可以通过在页面中包含样式表时使用标记来延迟非关键CSS。
具体要好,因为它定义了哪种样式适用于什么风格,但是一旦过于具体,它就会变得降低性能,并同时增加捆绑包的大小。有时甚至表明CSS或设计系统不正确。特定选择器的示例:
作为过于具体的,有时是需要,但把它看作一个例外,而不是普遍的做法。不够具体会导致样式冲突,过于具体会给浏览器带来困难。
查看以下选择器:
nav ul li a
你最有可能从左到右阅读它,但是浏览器从右到左阅读它,这意味着,它会找到页面上的所有标记,然后,对其进行过滤以仅包含内部的那些,然后再次过滤以仅包含那些在内,最后只有在
因此,它无法尽快匹配。如果没有标记,则无需从
可以说,性能最高的CSS将为页面上的每个HTML元素提供一个ID,并使用它们进行样式设置,而使用CSS选择器则非常昂贵,深度嵌套时更糟。
也许你需要每一个性能,也许你不在乎,并认为浏览器足够快来处理此问题。理想情况下,你应该考虑HTML样式化页面。
在设计样式时,请始终考虑您构建 HTML 的方式,尤其是在您阅读了前两条规则/指南(6 和 5)之后。
如果你知道页面上唯一的链接是导航链接,也许使用选择器 a 是可以的,但如果你知道会有更多,使用一个类来区分它,比如 .nav-link。
当嵌套和定位常见的 HTML 标签(如
例如,出于样式目的向所有内容添加 id 或 class,除非您使用类实用程序优先库或确实需要额外的性能。为了获得更好的主意,请尝试了解 CSS 的工作原理。
#main-navigation /* ID (Fastest) */
body #page-wrap /* ID */
.main-navigation /* Class */
li a.nav-link /* Class *
div /* Tag (Slow)*/
nav ul li a /* Tag (Slower)*/
* /* Universal (Slowest) */
[disabled] /* Universal */
唯一可以覆盖内联样式的是使用 !important 标签,正如你将在下一个块中阅读的那样,!important 标签可能很糟糕,但内联样式需要它。
避免它们的另一个原因是,你出于某种原因添加了外部样式表,并且该原因是将样式与结构(HTML)分开。对此也有例外,但是,如果你的外部样式表中有样式、HTML 中的样式、Javascript 中的样式,则很难跟踪正在执行的更改,并且随着代码库的增长,它变得难以维护。
一些库和框架(如 Svelte 和 Vue)允许 HTML(JSX)、CSS 和 Javascript 在同一个文件中共存,但归根结底,这真的归结为偏好。
如果你正在使用 Bootstrap 并且真的想覆盖一个样式,你将需要使用 !important 标志,但同样,你为什么首先使用 Bootstrap?
如果你发现自己需要使用 !important 标志,这通常表明你遇到了问题。你可能正在使用难以覆盖的第三方库;你正在使用内联样式;你对选择器过于具体;你有 CSS 层次结构或顺序问题,或者应该尝试了解 CSS 特异性是如何计算的。
一致性是关键。即使你做错了所有事情,也要保持一致,因为以后更容易修复它们。找到适合你的命名约定,采用 CSS 方法,以相同的方式组织样式,定义嵌套选择器的级别等。定义你的样式并坚持并随着时间的推移改进它。
设计系统允许您为将来构建,因为它允许您定义一般的设计规则和规范,遵循组织,模块化,定义最佳实践等。之所以采用面向未来的策略,是因为它更容易实现在全球范围内引入变更,修复和配置事物。
设计系统允许你为未来构建,因为它允许你定义一般设计规则和规范、遵循组织、模块化、定义最佳实践等。它是面向未来的策略的,原因是它更容易在全球范围内引入更改、修复和配置事物。
有时你想指定 padding-top 或 border-right ,但根据经验,我经常回到这些来添加更多,所以,我习惯于总是使用速记,以便在不指定很多属性的情况下更容易更改,代码更少。
通过将具有相同样式规则的选择器分组来避免重复样式。你可以用逗号来分隔具有相同样式主体的选择器。
如果你发现自己一遍又一遍地应用技巧或相同的样式,请将它们转换为 class-utils 以直接在 HTML 标记上使用。
对我来说,这些是像带有显示 flex 或网格的 center 这样的东西,所以我创建了一个类 .center-flex 和 .center-grid。创建类实用程序来自动化这些重复的样式组合。
你真的应该尝试更多地使用相对单位。像 em、rem、%、vw、vh、fr 等。使用 px 和 pt 设置固定值应该是静态设计的东西,尽管有些情况下需要这些值单位。浏览器很灵活,你的网站和单位也应该如此。
现在浏览器速度非常快,但有时,在复杂的网站上,我会看到一些与设置框阴影、边框半径、位置、过滤器,甚至宽度和高度相关的绘画问题,尤其是对于复杂的动画或重复更改。这些要求浏览器进行复杂的重新计算,并将视图重新绘制到每个嵌套的子级。
布局修饰符是width,height,left,top,margin,order等属性。这些属性的动画和执行更改的成本更高,因为它们需要浏览器重新计算布局和接收更改的元素的所有后代。当你同时对许多这些属性进行更改时,它开始变得更加明显,因此请注意这一点。
“will-change”被用作性能提升来告诉浏览器一个属性将如何改变。浏览器会在使用之前进行复杂的计算,虽然这听起来是件好事,但通常情况下,你并不需要它。除非你发现与事物变化相关的性能问题,例如在转换或动画事物时,否则使用是最后的手段。
注释是个好东西,采纳吧!如果你编写了复杂的 hacks 或发现某些事情有效但不知道为什么,请添加注释。为复杂的事情添加注释,组织你的 CSS,帮助其他人理解你的想法和策略,并在你以后回来时,帮助你从你的混乱中弄明白它。
每个浏览器都带有CSS元素的默认样式,并且这些样式各不相同,因此,你的东西可能在一个浏览器中看起来是一种方式,而在另一种浏览器中则不同,它可能具有你意想不到的额外边框或形状。通过重置或规范化你的 CSS,你可以简化这些事情,并让你的样式有更好的机会在任何浏览器中看起来相同。
你可以继续使用 @font-face 来定义你的字体,但使用 标签来加载你的字体,这样你就可以推迟它们,尤其是当你有 1 个以上的字体文件时。你还应该研究 SVG 字体并了解它们,因为它们允许更准确的字体渲染。在样式表的顶部添加 @font-face 规则。
也许设计师给了你太多的字体文件,这是一个危险信号。字体过多的网站可能会变得混乱,因此,请始终确保包含页面所需的字体。字体加载和应用可能需要一些时间,当你有太多字体时,你的 UI 通常会在字体加载后跳转不到位。
在将 CSS 加载到浏览器之前,将其最小化。你可以使用后处理器或使其成为站点部署的简单构建过程步骤。较小的 CSS 文件加载速度会更快,并且会更快地开始处理。
我使用预处理器的第一个原因是变量和 CSS 变量更好,因为它们在浏览器中加载时会保留下来。支持很好,它允许你创建更灵活和可重用的 UI,更不用说它可以帮助你创建更强大的设计系统和功能。
不要将大纲属性设置为“无”,而是设置样式!如果你不喜欢它的外观,请对其进行样式设置以匹配你网站的外观。对于使用键盘或其他屏幕阅读浏览你的网站的人来说,大纲对于让他们跟踪自己的位置至关重要。
现在大多数人做的第一件事就是添加一个 CSS 库或框架,从长远来看,有时这可能是一个代价高昂的决定。通常这些人会遇到一些他们不知道该怎么做的事情,因此,会带来整个图书馆来提供帮助。
添加 CSS 库应该慎重考虑。除非,你打算使用其大部分功能,否则不要添加,你和团队对这个决定需要感到满意,这确实有助于大大减少交付时间和调试时间。如果你带来了一个新的库,请花时间学习并充分利用它。如果你经常发现自己覆盖或破解第三方库,则不需要它!
每当你包含任何字符串值(如背景或字体 URL 或内容)时,请首选双引号并保持一致。很多人省略了有时可以工作但可能会导致 CSS 解析工具出现问题的引号。此外,查看 CSS 属性引号以自动化其中的一些。
每当你将 hack 引入你的样式时,最好将其放在一个单独的文件中,以便于维护,例如 hacks.css。随着代码库的增长,很难找到它们并解决它们,总的来说,如果可能的话,尽量避免黑客攻击。
CSS 可以格式化你的 HTML 文本。无需在 HTML 中手动编写所有大写、所有小写或大写的单词。更改 CSS 属性值比更改 HTML 中的所有文本要快得多,而且国际化也更好,因为它允许你根据需要编写文本并使用 CSS 操纵它的外观。
W3C组织提供了一个免费的 CSS 验证器,你可以使用它来确保你的 CSS 遵循正确的 CSS 样式规则和指南的一般指南。
你正在创建要在浏览器中使用的内容,这意味着人们将使用各种设备类型和尺寸访问它。通过考虑流畅或响应式设计,真正考虑改善这些人的体验。如果你的项目不包括响应计划,请尝试至少保持流畅。
例如,不要设置按钮的宽度和高度,而是考虑为间距设置一些填充并包括 max-width 和 max-height ,除非设计要求严格的大小。
CSS 方法将确保你的样式的一致性和未来证明。有几个选项可以尝试,或者你甚至可以采用多个选项。
一个巨大的危险信号是你编写 CSS 样式,然后在其他地方编写具有不同值的相同 CSS,几乎覆盖了所有内容。如果你经常这样做,那么,你处理项目样式的方式显然有问题。
你几乎永远不应该陷入需要覆盖自己的样式的情况。它表明,你有样式变化,并且你可能没有事先规划你的UI。
你可以做的另一件事是将你的动画 @keyframes 放在一个单独的文件中,并将其包含在样式表的末尾或简单地最后导入。这将确保在浏览器尝试在加载时,执行任何动画之前读取你的整个样式。
每当你编写样式来覆盖第三方库时,请考虑将其放在单独的文件中,以便于跟踪和维护。如果你决定稍后删除该库,则删除会更容易,并且将它们放入自己的文件中已经是自我文档化了。
当你指定转换时,请始终包括你打算转换的所有属性名称。使用“all”或不使用属性名称将迫使浏览器尝试转换所有内容并影响转换性能。
也许你是一个疯狂的人,他们迫切希望从你的 CSS 中获得每一点性能,否则,在任何地方使用 id 都可能很糟糕。 id 属性样式很难覆盖,并且每个页面都是唯一的,因此请遵循以下 id 用法指南:
CSS 代表级联样式表,这意味着最后出现的任何样式都有可能覆盖以前的样式,因此,请按照确保应用所需样式的顺序对样式进行排序。这完全是为了了解你对 CSS 特异性的理解。
Linting 的工作原理是确保你遵循为样式定义的规则,并确保你的样式一致、结构良好,并遵循 CSS 最佳实践。了解 Stylelint 以及如何在你喜欢的 IDE 中设置样式 linting 以及如何设置你的配置文件。
它使查找内容变得更加容易,你甚至可以使用 Stylelint 来强制执行此规则。
CSS 属性 box-sizing 默认值应该是 border-box ,并且它被列为许多 CSS API 错误之一。在顶层简单地声明 *, *::after, *::before{box-sizing: border-box;}。
更喜欢用十六进制和颜色函数指定颜色值,而不是说红色、紫色、青色。有数百万个十六进制颜色值,而不是所有这些值的名称。为了保持一致性,找到一种添加颜色的方法并坚持下去。
当为要在内容流中使用的组件设置样式时,让内容和内部间距定义大小,不包括位置和边距等内容。让使用此组件的容器来决定位置以及此组件与其他组件的距离。
它确实可以让你更轻松地通过查看 CSS 来理解你的标记。这是我做的事情,为我节省了很多时间。
经常会发现开发人员会四处更改 HTML 以应用某种样式。通常,将样式设置为 CSS,并让你的 HTML 以语义上有意义的方式构建。此规则有例外,但始终确保采用的结构不违反任何 HTML 语义规则。
首先,编写 HTML 时要考虑内容,而不是样式。比添加 CSS 并在出于样式原因更改 HTML 之前尽力而为。
类名和 id 名称最常见的分隔符是连字符,但无论你选择什么,都要坚持使用。
我一直在分享如何在我的 Youtube UI/UX 库中尽可能多地使用 CSS 构建通用组件,我想让你明白的是,在你尝试添加 Javascript 之前,你应该尝试找到一个 CSS 解决方案(不要太老套),甚至,当你添加 Javascript 时,请考虑让 CSS 完成大部分样式并使用 Javascript 来处理触发器和副作用之类的事情。
出于同样的原因,你应该发布你将使用的唯一 CSS,考虑使用 PurgeCSS 之类的工具来删除渲染中不需要的 CSS。
这些工具将查看你的 CSS 和 HTML,以确定你需要哪些样式。
如果你不确定你是否需要这个,考虑使用浏览器工具来查找你的代码覆盖率,它会告诉你是否正在发布未使用的样式。
真正考虑将 PostCSS 添加到你的项目中,以便你可以利用各种插件来优化你的 CSS,例如 Autoprefixer(添加 webkit-、moz-、ms- 等)、CSSNano(最小化你的 CSS)、postcss-preset-css(允许你编写未来的 CSS),以及许多其他可以帮助你定义标准和规则、介绍工具、类实用程序、与 javascript 通信并标准化。
没有人会在一夜之间就会编写更好的 CSS,这需要练习和调整。这些在我的 CSS 之旅中帮助了我很多,我相信它们也会帮助你。
每一次体验都是独一无二的,你应该保持开放的心态,尝试各种事情,直到它们适合你为止。
不要害怕采用工具来帮助你,但也不要因为每个人都这样做而急于跳入某事。在理解、编写和组织 CSS 方面有艺术水平。无论你最终采用什么规则,都要保持一致。
感谢你的阅读。祝你好运!
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/7NVQ4kjdpyC0ZbZRxxYzcQ
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。