如何使用CSS命名规范提高您的编码效率

news2024/11/26 4:45:54

ab039142dd6f2a70a3e0844d7246d214.jpeg

CSS命名约定可以提高团队成员在项目中的协作能力,通过允许开发人员简化工作流程,增强项目的可维护性和可扩展性。在本文中,我们将深入探讨CSS命名约定的世界,展示实际示例以及它们为您的开发过程带来的好处。

在前端开发中,编写干净高效的代码可以使程序员变得更优秀。无论是个人项目、合作任务、敏捷开发项目还是求职测试项目,都很重要。开发者通常会忽视一个基本的部分,那就是实施CSS命名规范,有些人会在调试和管理庞大的代码库时才意识到糟糕的CSS代码有多可怕。无论你是否意识到,在编码测试或技术面试中,你的命名习惯都会传达关于你开发实践的信息。它们可以用来评估你的行为和效率。因此,在本文中,我们将展示CSS命名的最佳实践,以提高代码质量。通过阅读本文,读者应该清楚地了解CSS命名规范及其好处,并熟悉不同的样式命名约定。读者的最终目标是为他们提供可操作的见解和实用的建议,以便他们可以将这些规范应用到自己的开发工作流中,以编写更清晰、更高效的代码。

前端开发中清晰高效的编码的重要性

在开发网页应用的前端时,通常会有许多样式要求,以提升网站的吸引力并创建友好直观的用户界面。在开发过程中,有不同的选择来构建组件并对网页应用应用样式;这些选择可以是纯CSS,使用像TailwindCSS或Bootstrap这样的CSS框架,或者选择使用UI组件库,例如Radix UI。无论选择了哪种开发方式,都需要使代码易于阅读和维护。这导致了在Web开发中采用不同的概念,如基于组件的开发、代码审查、敏捷方法等。清晰的代码开发是其中之一,它专注于编写易于阅读和维护的代码。通过使用合理的命名、可重用的组件以避免重复,并遵循最佳实践,可以实现这一目标。在编码时遵循清晰的代码原则可以为应用程序工作流程带来以下好处:

可读性和理解性:清晰的代码使得一目了然地理解代码块的目的变得更加容易。它提供了一种理解水平,使得与其他开发人员团队合作变得可行,因为不需要花费太多时间来理解代码的意图和功能。

调试和可维护性:通过清晰的代码,我们可以得到简洁的代码块、模块化的组件、较少的代码重复,并且函数和变量的命名有意义。这使得在出现错误时容易追踪,并且在代码中添加新功能时降低引入错误的风险。

代码可重用性:干净的代码在开发过程中强制要求模块化。这个原则使得代码更有组织性和更短,因为可以导入需要执行特定任务的模块/组件,并将执行该任务所需的属性传递给组件以实现所需的结果。在这种实践中,开发人员在开发不同的应用程序部分时利用现有的组件和函数,从而加快开发速度。

改进的协作:拥有一个混乱的代码基础意味着缺乏结构并且可读性差。这使得将应用程序的工作扩展到其他开发人员团队变得困难,因为他们需要更多时间来适应并共同在代码库上工作。有了清晰的代码,协作变得可行,并且有明确的代码结构规则,以确保团队无缝合作。

更容易将新成员引入正在进行的项目:有了干净的代码,新成员更容易迅速掌握项目的开发。代码结构清晰,逻辑明确,遵循已建立的模式和约定,这使得引入过程更短,新成员可以快速开始为项目做出贡献,并且在遵循已建立的约定的同时,做出完美的贡献。

了解CSS命名约定

在本节中,我们将讨论CSS命名约定的概念、应用的优势以及它在推动清洁高效代码方面的作用。

什么是CSS命名约定?

惯例是被广泛接受的做法,标准化的行为指南,用于规定在制定决策或设计特定用例时应遵循的步骤。广泛接受的惯例的重要性在于促进大量人群之间的可理解性。那么,什么是CSS命名约定?CSS命名约定是指一套被公认的指导方针和最佳实践,用于在CSS代码中为样式命名类和ID。这些指南强制要求为这些类/ID分配的名称应保持一致和描述性,提供一种组织或层次结构的形式。这使得CSS代码易于维护和阅读,无需许多注释来说明样式块的意图。

在代码库中使用明确定义的命名约定的优势

使用明确定义的CSS类/ID命名约定将为您的工作流程带来以下好处:

代码一致性:命名约定规定了在为CSS属性分配名称时应遵循的规则;这使得命名风格标准化,并确保所有团队成员在开发过程中采用类似的方法,从而产生更专业和协调的结果。

易读性和可理解性:遵循CSS命名约定使开发人员能够一目了然地识别样式块的目的、代码中对应的组件以及与其子元素、父元素和兄弟元素的关联形式。这减少了在代码库中理解样式结构所花费的时间。

可搜索性:使用明确定义的名称可以使搜索和重构CSS代码更高效和节省时间。

可维护性和可扩展性:遵循命名约定后,CSS元素可以轻松地进行修改或修复错误。可以对现有代码进行新功能或改进,而不会引入错误。

减少错误和漏洞:通过命名约定,可以针对特定元素及其属性声明类,减少在CSS属性没有明确名称的情况下出现错误的可能性,开发人员可能会误用或误解其目的。通过使用CSS命名约定,为易于理解、可维护和可扩展的代码库提供了基础设施。它促进了协作,减少了错误的发生,同时为可持续和健康的软件架构提供了支持。

CSS命名原则和最佳实践

在前一节中定义了CSS命名约定,我们将讨论在编写代码时应遵循的最佳实践以及CSS类名一致命名的准则。

创建有意义和一致的类名的指导原则

  • 简洁性和连贯性:为类分配的名称应尽可能简洁,同时提供所需的关于其目的的信息。避免使用过长的名称,这可能会使使用或阅读变得困难。类名还应具有连贯性,连接兄弟元素或显示父子元素之间的关系。

  • 避免过度嵌套:在为类分配名称时,命名模式应保持浅层,并且选择器不应过度嵌套。这样可以提高可读性并使代码更易于维护。

  • 一致的命名规范:在开发过程中,类的命名规范应保持一致。命名规范的示例包括:kebab-case(使用小写字母和连字符表示),camelCase(首字母小写,多个单词时,后续单词的首字母大写),以及PascalCase(所有组成名称的单词的首字母都大写)。

  • 避免使用缩写:除非这些缩写被广泛使用和理解,否则请避免使用缩写。这样可以提高清晰度,让人一目了然地识别出类名的目的。常见的缩写包括 btn 代表按钮, nav 代表导航栏, cta 代表呼叫行动组件。

  • 上下文命名:在为类分配名称之前,请考虑元素的使用环境以及其提供的功能和特性。这有助于选择最合适的元素名称,并避免在开发过程中出现命名冲突。

  • 项目开发中的命名一致性:在开发之前,建立一个命名约定和指南,以确保所有团队成员都能一致地遵循它们,提供一个易于维护和协调的代码库。

  • 避免使用泛泛而谈的名称:类名应该反映其所分配给的元素的意图和含义。它应该是一个描述性的名称,能够传达其功能,以便更容易搜索和理解。

CSS代码结构的最佳实践

为了保持你的CSS代码有条理,以下是你应该尽量遵守的最佳实践:

  • 基于模块化的方法:在开发过程中可能需要多次使用的CSS代码可以被拆分成小的可重用代码块,以避免重复。

  • 遵循命名规范:在工作流程中采用CSS命名规范,以帮助创建结构化和描述性的类名。

  • 分离结构和呈现:在组织CSS时,将与元素的布局和定位相关的样式与覆盖其呈现的其他样式(如颜色、字体、边框等)分开。例如,可以定义一个 wrapper 类来为元素的最大宽度以及其边距/填充提供样式。

  • 限制使用 !important : !important 行为修饰符对应用到的元素强制执行严格的行为,并覆盖任何更改。过度使用可能会导致冲突,使得更新现有样式变得困难,因为具有 !important 修饰符的属性占主导地位。

  • 注释的使用:注释有助于为代码块提供上下文,并可用于解释复杂部分或特定样式的原因。这使得其他开发人员更容易理解编写的代码。

  • 一致的格式:在编写代码时,使用适当的缩进、空格和换行来提高可读性。可以将Prettier或Beautify等格式化工具集成到代码编辑器中,以自动处理代码格式化。

  • 相关的样式:与相关元素相关的样式块应放置在样式表中。

  • 简洁的CSS选择器:CSS选择器不应过长或过于嵌套,也不应使用复杂的后代选择器。

  • 适当的选择器命名:选择器应该具体命名为其应用的元素。使用模糊的选择器名称会导致冲突、样式覆盖和意外行为。

  • 避免使用ID进行样式设置:使用ID来应用样式可能会在修改该组件的样式时出现问题。相反,您应该将ID用作唯一标识的手段,同时使用CSS类来进行样式设置,以便更容易维护代码。

CSS命名约定的实际示例

本节介绍了当今可用的不同CSS命名约定,以及在实际场景中的实际应用和代码片段的实现示例。

BEM(块、元素、修饰符):BEM是一种流行的CSS命名约定,由俄罗斯科技公司Yandex开发,旨在提供一种模块化的CSS样式方法,提供代码可重用性,并使大规模CSS的维护成为可能。BEM是块(Block)、元素(Element)和修饰符(Modifier)的首字母缩写,它们代表以下原则:

  • 块(Block):块是在开发过程中可能创建的独立组件。这些通常是包裹子元素的父级/顶级元素。块使用小写字母和连字符表示。例如:.nav , .header , .carousel , .card 等。

  • 元素(Element):元素是块的一部分,不能独立存在,因为它依赖于父元素的定义。它是一个子块,前缀为双下划线(__)以表示其关系。假设我们正在构建一个带有标题、描述和图像元素的卡片组件。下面的代码块展示了在命名这些元素的类时应用BEM的方法:

/* The parent card element */
.card {
 /* styles for the parent component*/
}
/* The children: title, description, image */
.card__title {
 /* styles for the title */
}
.card__description {
 /* styles for the description */
}
.card__image {
 /* styles for the image */
}
  • 修饰符(Modifiers):修饰符指的是对块或元素状态的修改,它们以双连字符前缀(—)表示。修饰符附加在表示变体的块或元素名称后面。一个修饰符的示例是 --active ,用于表示元素/块的活动状态。下面的代码块显示了对上面定义的 card 块添加修饰符的情况:

/* Modifier for dark mode */
.card--dark{
  /* styles for the parent component in dark mode */
}
.card__title--dark {
  /* styles for the title on dark mode */
}

BEM旨在使类名一目了然,并且可以确定元素可以在哪里使用以及与其他元素的关系。使用BEM,我们还可以在CSS中编写样式时表示一个元素是特定类的子元素。假设一个类 title 是另一个类 card 的子元素,我们可以按照下面的代码块中所示进行样式设置:

.card {
 /* Styles for the card block */
 &__title {
  /* Styles for the title element inside the card block */
 }
}

命名空间前缀(Namespace Prefixes):命名空间前缀是一种命名约定,它涉及将特定前缀添加到类名中,以传递有关其在项目中的目的和用途的信息。这有助于提供有关类名的上下文,并避免命名冲突,因为前缀与其他前缀是唯一的,即使它们可能具有相似的名称。下面的代码块示例展示了命名空间前缀的使用实现:

/* Styling a home and about us page hero section cta buttons */
.home .cta-button {
 background-color: blanchedalmond;
}
.aboutUs .cta-button {
 background-color: yellow;
}

假设我们在主页上有两个按钮;可以这样解决:

<!-- HTML structure -->
<div class="home">
 <button class="cta-a-button">Button A</button>
 <button class="cta-b-button">Button B</button>
</div>

关于CSS:

/* CSS with namespace prefixes */
.home .cta-a-button {
 background-color: blanchedalmond;
}
.home .cta-b-button {
 background-color: yellow;
}
  • 原子CSS(Atomic CSS):原子CSS是今天大多数前端CSS库中实现的一个构建块,例如TailwindCSS。它涉及定义小的、单一用途的可重用类单元,将特定的样式或属性应用于所附加的元素。下面是原子CSS的示例代码块:

/* Atomic CSS for responsive containers */
.container {
 width: 100%;
 max-width: 1280px;
 margin: 0 auto;
}
.container-sm {
 max-width: 768px;
}
/* Atomic CSS property classes */
.mt-2 {
 margin-top: 8px;
}
.px-2 {
 padding-left: 8px;
 padding-right: 8px;
}

这些定义的类可以应用于所需的元素

<div class="container px-2"></div>

原子CSS还允许使用定义的简写表示来应用样式到元素。其语法如下:

<!-- Atomic CSS programmatic short forms -->
<!-- syntax:
 shortform(property)
 property is the value to be applied to the specified shortform
 shortform(property):behavior
 behavior could be hover, active, focus, etc.
 shortform(property):behavior--screenSize 
 Screen sizes are lg for large, md for medium, and sm for small
 shortform(property)::pseudo-class
 pseudo-classes can be a for after, b for before, ph for placeholder, etc.
-->
<!-- Example short forms are D for display, C for color, and Bg for background. Applications of these are illustrated below -->
<div class="D(n)"></div>
<!-- The code above sets display to none -->
<p class="C(#333)">hello</p>
<!-- The code above sets the text color to #333 -->
<div class="Bg(transparent):hover--lg"></div>
<!-- The code above applies the property background: transparent; when the div is hovered on in a large screen size -->

SMACSS(可扩展和模块化的CSS架构):SMACSS是一种CSS命名约定,通过将CSS代码分为五个主要类别,以促进易于维护性

  • 基础(Base):在基础类别中,指定适用于通用HTML元素(如body、div、p、span等)的样式。

  • 布局(Layout):顾名思义,这个部分涉及到组织影响网页应用程序页面主要布局的代码。这可能包括页眉和页脚、导航和侧边菜单等。

  • 模块(Module):模块类封装了可重用的代码组件或模块,可以在整个项目的开发过程中使用。这些样式的示例可以是按钮样式、卡片组件等。

  • 状态(State):状态类别包含其他类名的行为属性,并可根据指定的条件修改它们的外观。这包括处理悬停、激活、禁用或隐藏元素的样式。

  • 主题(Theme):这个最后的类别涉及使用样式来为项目应用颜色主题。与其他命名约定不同,SMACSS主要通过使用上述五个类别来强制实施CSS样式的逻辑组织结构。下面的代码块展示了SMACSS的一个示例:

/* Base styles */
body {
 font-family: monospace;
}
/* Layout styles */
.header {
 color: #fff;
}
/* Module styles */
.button {
 padding: 10px 20px;
 cursor: pointer;
}
/* State styles */
.form-input:focus {
 background-color: #0056b3;
}
/* Theme styles */
.theme-dark {
 background-color: #333;

通过将CSS样式组织成不同的类别,CSS代码库更加结构化,可以轻松扩展,积极影响可读性和代码可重用性。

在进行中的项目中实施命名约定的策略

  • 教育和培训:实施命名规范的第一步是研究所选择的命名规范、其使用方法和应用。可以向开发团队提供适当的文档和学习材料,以确保所有成员都能理解并遵守命名规范的原则和规则。

  • 渐进采用:在这里,现有的代码应该逐渐进行重构,以适应命名约定,而不是试图同时改变整个代码库。这样可以避免给成员带来过多压力,减少错误的发生,同时促进平稳过渡。

  • 合作:在团队建设的项目中,开发人员应该以小组的形式合作,以融入命名规范。这种做法可以确保所有团队成员更好地理解命名规范的应用。

  • 自动化的CSS代码检查或格式化:这涉及添加一个自动化插件,强制执行命名约定的规则,当存在命名违规时发出警告,并立即向开发团队提供反馈。

  • 定期代码审查:随着命名流程的采用,有必要定期审查代码,以确保命名规范被简明一致地应用。

  • 记录命名规范:应该在代码库中添加一个样式指南,说明命名规范的类型、规则和应用示例。这是为了参考目的,并在新成员入职时作为指南使用。

  • 标准化命名和前缀:采用统一的命名约定(例如,BEM的块名称或原子CSS类)应该在整个项目中标准化,并保持一致性。

重构现有CSS代码的工具和技术

以下工具/技术有助于重构现有代码的过程:

  • 使用诸如Git之类的版本控制系统来跟踪变更并在代码库出现异常行为或不需要的更改时方便地进行回滚。

  • 将代码规范化和格式化插件添加到代码库中,以便根据规定进行代码重构。

  • 逐步重命名类,从父元素到子元素和兄弟元素。这样可以确保不会干扰应用程序,并且还可以轻松跟踪和管理更改。

  • 对代码进行例行测试,以确保其产生所期望的结果,并且不会对网页应用程序的外观产生意外的副作用。

结束

在前端开发中,干净高效的编码的重要性不言而喻。在本文中,我们探讨了干净代码对开发效率和可维护性的影响,以及编写高效CSS代码的好处。实现干净高效的CSS的基本方法之一是使用明确定义的命名规范。CSS命名规范在组织和结构化代码库方面起着关键作用,有助于更好地协作、提高代码可读性和可维护性。通过采用有意义且一致的类名,开发人员可以增强代码的清晰度,并提高其在项目中的可重用性。应鼓励开发人员从一开始就将CSS命名规范融入到他们的开发工作流程中。通过以良好组织和经过深思熟虑的类名为基础,开发团队可以建立在坚实的基础上,减少潜在的错误和冲突,同时促进一致的编码风格。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

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

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

相关文章

[极客大挑战 2019]Http 1

题目环境&#xff1a; 看起来挺花里胡哨的 F12查看源代码寻找隐藏文件 这是啥子呀&#xff0c;果然防不胜防 点击隐藏文件Secret.php 它不是来自这个地址的请求 报头&#xff1a;https://Sycsecret.buuoj.cn 需要抓包&#xff0c;在抓包前了解部分数据包参数 GET:到 Host:来自 …

Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较

Flutter vs 前端 杂谈 SliverAppBar的弹性背景的显隐效果使用HtmlJS怎么实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550…

MySQL数据库中不同数据类型字段关联后结果居然有这么大差异?

点击上方蓝字关注我 在数据库的世界里&#xff0c;数据的连接操作是至关重要的。但在处理关联表的字段的数据类型不同时&#xff0c;得到的结果经常会出乎预料。 1. 案例 1.1 数据库中先创建表及数据 -- 创建tb1 CREATE TABLE tb1 (id BIGINT NOT NULL PRIMARY KEY, NAME VARC…

掌握Maven和SpringBoot的灵活性:定制化lib目录和依赖范围

前言 在开发基于Maven和SpringBoot的项目时&#xff0c;我们经常会使用第三方库来满足需求。然而&#xff0c;有时候我们需要更灵活地控制这些库的依赖范围和加载方式。本文将介绍如何使用Maven和SpringBoot实现定制化的lib目录和依赖范围。经过如下定制化后&#xff0c;打包执…

【C语言】备战校赛Day3

日期:11.3 星期五 L1-007 念数字 题目描述 输入一个整数&#xff0c;输出每个数字对应的拼音。当整数为负数时&#xff0c;先输出fu字。十个数字对应的拼音如下&#xff1a; 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu 输入描述 输入在一行中给出一个…

Spring Data Redis + RabbitMQ - 基于 string + hash 实现缓存,计数(高内聚)

目录 一、Spring Data Redis 1.1、缓存功能(分析) 1.2、案例实现 一、Spring Data Redis 1.1、缓存功能(分析) hash 类型存储缓存相比于 string 类型就有更多的更合适的使用场景. 例如,我有以下这样一个 UserInfo 信息 假设这样一个场景就是:万一只想获取其中某一个…

MySQL第三讲·SQL boy的CRUD操作

你好&#xff0c;我是安然无虞。 文章目录 增删查改&#xff1a;如何操作表中的数据&#xff1f;添加数据插入数据记录插入查询结果 删除数据修改数据查询数据select&#xff5c;where&#xff5c;group by&#xff5c;havingfromorder bylimit 增删查改&#xff1a;如何操作表…

C++标准模板(STL)- 类型支持 (类型属性,is_literal_type,is_polymorphic,is_empty)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

uniapp小程序刮刮乐抽奖

使用canvas画布画出刮刮乐要被刮的图片&#xff0c;使用移动清除画布。 当前代码封装为刮刮乐的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg" :src&q…

强化学习的动态规划二

一、典型示例 考虑如下所示的44网格。 图1 非终端状态为S {1, 2, . . . , 14}。在每个状态下有四种可能的行为&#xff0c;A {up, down, right, left}&#xff0c;这些行为除了会将代理从网格上移走外&#xff0c;其他都会确定性地引起相应的状态转换。因此&#xff0c;例如&…

VMware产品收集日志方法汇总

概述 vCenter日志是一个用于存储与vSphere环境相关的各种活动、事件和警告的日志系统。通过收集并分析vCenter日志&#xff0c;管理员可以获得有关其虚拟化环境的重要洞察和故障排除信息。 vCenter日志由多个组件组成&#xff0c;包括vCenter Server、ESXi主机和其他vSphere组…

软件测试面试题:Web 端测试和 App 端测试有何不同

Web 端测试和 App 端测试是针对不同平台的上的应用进行测试&#xff0c;Web应用和App端的应用实现方式不同&#xff0c;测试时的侧重点也不一样。 今天这篇文章就来介绍下两者的不同之处以及测试时的侧重点。 Web 端应用和 App 端应用的区别 平台兼容性 Web 端应用可以在任何…

C#开源的一个能利用Windows通知栏背单词的软件 - ToastFish

前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件&#xff0c;可以让你在上班、上课等恶劣环境下安全隐蔽地背单词&#xff08;利用摸鱼时间背单词的软件&#xff09;&#xff1a;ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…

【C语言】C语言⻘蛙跳台阶问题--递归问题

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 本期专栏&#x1f525;&#xff1a;本期将分享一些猜数字小游戏怎么一步一步实现的 &#x1f308;作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心…

Fourier分析导论——第3章——Fourier级数的收敛性(E.M. Stein R. Shakarchi)

第 3 章 Fourier级数的收敛性(Convergence of Fourier Series) The sine and cosine series, by which one can represent an arbitrary function in a given interval, enjoy among other remarkable properties that of being convergent. This property did not escape…

nodejs+vue网上商城系统系统-毕业设计

网上商城系统的架构设计通常分为三层&#xff1a;客户端层、应用层和数据层。 客户端层&#xff1a;客户端层是用户与系统交互的界面&#xff0c;包括Web页面、移动App等。用户可以通过客户端层进行商品浏览、下单、支付等操作。应用层&#xff1a;应用层是业务逻辑处理的中心&…

一个 不用氪金 也能让你变强的 VSCode 插件 Ai

哈喽,大家好 我是 彩色之外&#x1f468;&#x1f3fb;‍&#x1f4bb;。今天给大家推荐一款不用充钱也能让你变强的 vscode 插件 通义灵码&#xff08;TONGYI Lingma&#xff09;&#xff0c;可以称之为 Copilot 的替代甜品 &#x1f4aa; &#x1f440; 前期回顾 NPM- 滚动进…

BIOS开发笔记 – 显示

UEFI启动流程跑完前三阶段,UEFI环境的准备基本完成,到BDS阶段的任务就是准备引导OS。在此之前还需要使一些必要的硬件工作起来,比如键盘设备,屏幕等,怎么让屏幕工作呢?简单的说就是执行其相关的UEFI驱动。要注意一下的是,这里所说的驱动并不是屏幕的驱动,而是GPU的驱动…

Proteus仿真--1602LCD随机模拟显示乘法口诀(仿真文件+程序)

本文主要介绍基于51单片机的1602LCD随机模拟显示乘法口诀实验&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中上方主要是1602LCD液晶显示&#xff0c;使用方法点击左下方的按键开关实现不同的乘数切换&#xff0c;按照乘法表进行 仿真运行视频 Prot…

Android Studio的Java项目种运行main()的方法

首先随便在项目里面建一个类 public class TestSocket {public static void main(String[] args) {System.out.println("hahah");}}直接运行时会直接报错的 在项目的 .idea 添加代码 <option name"delegatedBuild" value"false"/> 再…