热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编写优秀 CSS 代码的 8 个策略

编写基本的CSS和HTML是我们作为Web开发人员学习的首要事情之一。然而,我遇到的很多应用程序显然没有人花时间真正考虑前端开发
文章目录[隐藏]
  •  1.不要写不需要的样式定义
  •  2.将CSS看作可重用组件
  •  3.在CSS中定义实用工具来干你的CSS
  •  4.除非绝对需要,否则避免嵌套
  •  5.利用BEM防止嵌套
  •  6.只使用!inportant作为最后的手段
  •  7.重新发明轮子需要时间和精力,所以要慎重考虑
  •  8.关注前端代码!

  编写基本的css和html是我们作为web开发人员学习的首要事情之一。然而,我遇到的很多应用程序显然没有人花时间真正考虑前端开发的长久性和可维护性。

  我认为这主要是因为许多开发人员对组织CSS / HTML和Javascript的策略缺乏深刻的理解。     

  在我和我们团队的观念中,编写可维护的前端代码非常重要。尽管我们有一些使用了多年的客户端,但要记住你永远不会是唯一一个工作于应用程序的人。仅仅因为你的一次性元素和配置对你有意义,并不意味着它们对下一个可能继承应用程序的人有意义。

  为了防止这篇文章太长,我今天将主要讨论CSS代码。Javascript代码是另一个完全不同的棘手问题。

  这篇文章的目的不在于规则手册,而在于你正在编写CSS时的指南。希望能帮助大家找到自己的流程,而这篇文章的目标是让你的CSS一致,简单,易于使用。

编写优秀 CSS 代码的 8 个策略

  下面是8个保持CSS有条理和易于长期维护的秘诀。

 1.不要写不需要的样式定义

  例如:编写display:block;时要注意,因为很多元素默认有这个样式。

  另一个例子是在元素上定义字体大小,它将继承你正在定义的正文字体大小。

  目标是双重的:

  • 减少CSS文件的长度,以便浏览。
  • 明确你的CSS类需要做什么,而不是定义一堆已经产生的垃圾。

  这里有一个常见问题是CSS没有清理干净,此时,为了简洁起见,可以完全删除。

 2.将CSS看作可重用组件

  不要将CSS元素视为每个单独页面上的特定表单或元素,如果你可以定义可重用的CSS实用程序和组件以供自己使用,则可以减少很多复杂性。

  编写旨在重用的类的作用:

  • 确保你的设计在不同的页面之间保持一致。当你在很多页面上共享CSS类时,你知道当你改变这个类时,它会在每一个出现的页面发生改变。
  • 这使得编写CSS真的很快。首先,如果大多数样式被定义为你所知道的实用程序和类,那么你就不必花费大量时间刷新和重新创建应用程序中已存在的样式。

 3.在CSS中定义实用工具来干你的CSS

  我们将’utilities’定义为一个CSS类,实际上它只用来做一件特定的事情,而不是封装整个元素。

  你会看到这个策略经常用于流行的CSS框架,如Bootstrap和Foundation。

  在这些流行的框架中你所看到的一些例子是:

 .hide { display: none; } .text-center { text-align: center; }

  例如,使用.hide,就不必每次想要在页面上隐藏元素时就得编写一个新的类——你只需要在你的元素上加上.hide类,它会使元素display: none; 。

  我们写了一些实用程序文件,这些文件在应用程序之间共享,使用一些常用的实用程序可以减少为每个元素编写特定样式的需求。

  一个很好的例子是我们如何使用margin和padding实用程序。下面是padding实用程序的一个简单例子:

 .padding-0 { padding: 0; } .padding-xxs { padding: 5px; } .padding-xs { padding: 10px; } .padding-sm { padding: 20px; } .padding-md { padding: 30px; } .padding-lg { padding: 40px; } .padding-xl { padding: 50px; } .padding-xxl { padding: 60px; }

  通过结合使用这些工具,我们可以与我们间距的像素数保持一致,并且可以快速标记页面,而不必编写非常多的CSS。

  实用程序背后的理念是,你认为你可能会不止一次地使用它们。如果它是一次性样式,或者如果你认为组合样式会经常使用,那么可能它作为CSS类将可以更好地工作。

 4.除非绝对需要,否则避免嵌套

  假设有一些复选框的表单。在这个特定的情况下,你需要复选框内联(并排)。

  所以你试图像这样写样式:

 .user-form li a { color: red; }

  然后在这过程中,你意识到你需要列表元素中的一个链接实际上是黑色的。所以你试图为黑色的链接编写一个工具类:

 .link--black { color: black; }

  此处.link–black链接将被CSS特殊性所覆盖,并且将无法压倒.my-form li a样式。

  现在你可能想要确保列表元素中的所有锚标记是红色的,但是你不知道未来的元素会怎么样以及可能会对设计做出什么样的更改。

  你可能会问,“好的亲,那么你怎么解决上面的问题呢?”

  通过上面的例子,你应该明白锚标签的颜色应该是一个远离默认链接颜色的变体。

  所以,在这种情况下,我会100%确定一个额外的工具类来处理红色链接。下面是实践中可能的处理例子:

 a {    color: blue;   &:hover {     color: black;   } } .link--red { color: red; }

  然后将其添加到HTML中的每个li元素。

  我在这里作出的假设是:某一天,此红色的链接将在应用程序的其他地方被使用。我不想把它嵌入到用户表单中,因为那样我就不得不在未来编写另外一个样式来说明需要红色链接的情况。

  另外,因为我将自己的悬停定义在自己的锚点上,所以红色链接将会变成黑色悬停,而不必定义任何其他样式。

 5.利用BEM防止嵌套

  能够真正防止过度嵌套的一个策略是名为BEM(Block Element Modifier)的命名策略。

  使用BEM的一个很好的例子就是当你有一个真正具体的样式的组件时,如果使用实用程序会太麻烦和复杂的话。

  这个例子看起来像这样:

 // HTML snippet 
// BEM CSS .profile { background-color: white; border: 1px solid #ccc; } .profile__photo { border-radius: 50%; border: 1px solid #000; }

  你可以从这个例子中看到,我可以从我的样式表中看到.profile__photo嵌套在.profile中,然而实际上并不需要嵌套这个类。这真的是BEM最棒的地方,也是为什么我建议使用它的原因。

 6.只使用!inportant作为最后的手段

  在一个类上放上!important定义会使得覆盖代码变成一件令人头痛的事情,特别是当你试图处理媒体查询时。

  这是我在处理Foundation的某个版本遇到的一个令人头痛的问题,因为他们决定对可见类打上!important。

  这对于移动设备也是一个痛苦的根源。例如,如果你希望手机屏幕显示某些内容,则必须使用另一个!important类来重写.hide类以显示它。

  我一直找不到使用!important的有效借口,除了在别人错误使用!important定义的情况下。

 7.重新发明轮子需要时间和精力,所以要慎重考虑

  比如说在客户端项目中创建自己的网格CSS框架,可能就是一个重新发明轮子的例子。

  根据我的经验,除非你想知道它是如何工作的,否则自己写这些东西其实并没有多大的好处。有许许多多的边缘情况可以让你自己动手编写代码,所以为什么不使用别人已经写好的免费又能工作良好的代码呢?

  也就是说,自己动手创建可能是一个很好的学习经验——但这很可能不属于生产应用程序的过程。

  好的,那么Javascript插件呢?

  在谈论Javascript或jquery插件时,我要说的是,对于任何你使用的具有很好集成选项的真正常见组件来说,情况也是如此。其中的一些例子是照片轮播的Javascript转盘,或日期选择器。

  这里的边缘案例是使用一些带有封装组件逻辑的Javascript框架的插件(React,Ember,Angular等)。如果你想要做的事情相对简单,有时可能将这些插件放到组件中会更麻烦。

  例如,我会使用立即可用的Foundation或Bootstrap模块,如果我正工作于依赖jQuery的项目,但是会在React中构建我自己的模块(只是因为编写组件以便通过引入jQuery插入到React组件中会更容易)。

 8.关注前端代码!

  最后,我要向你建议的最重要的事情是,你得关注你为前端编写的代码,掌握它,并持之以恒地改进它(统计提高自己!)。

  我相信这是长期可维护的应用程序与难以处理的应用程序之间最大的区别因素之一。

  通过遵循编写CSS的八个技巧,你将为自己和未来继承你的代码的开发人员节省时间和精力。

  你遵循什么准则来组织和精简你的CSS?欢迎留言,共同进步。

  英文原文:8 CSS Strategies for Writing Maintainable, Streamlined Front-End Code

欢迎大家阅读《编写优秀 CSS 代码的 8 个策略》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
  • 本文深入剖析了jQuery的架构设计与实现原理。jQuery的总体结构采用了一个自执行匿名函数的形式,该函数接收`window`和`undefined`作为参数,并在内部定义了一个局部的jQuery副本,以确保其内部变量和方法不会污染全局命名空间。这种设计不仅提高了代码的封装性和安全性,还使得jQuery能够更好地与其他JavaScript库兼容。通过详细分析这一架构,读者可以更好地理解jQuery的核心机制及其高效运行的原理。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
紫藤老君的八卦炉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有