整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

5个需要避免的CSS错误

5个需要避免的CSS错误

家好,我是刷碗智,今天带来 Jose Granja 大佬的文章,希望对大家有所帮助。文本观点,仅供参与,非标准答案。

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

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

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

用Electron开发桌面应用的避坑指南【送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,我们将能够根据用户偏好的字体大小来表达布局。

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

5. 忽略浏览器支持

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

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

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

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

总结

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

作者:Jose Granja 译者:前端小智 来源:medium原文:https://levelup.gitconnected.com/top-5-css-mistakes-to-avoid-963f76892954

ideo元素与audio元素所具有的属性大致相同,

下面来看一下这两个元素都具有哪些属性。

 src属性和autoplay属性

src属性用于指定媒体数据的URL地址。

autoplay属性用于指定媒体是否在页面加载后自动播放,使用方法如下。

<video src="sample.mov" autoplay="autoplay"></video>

在文件中创建多媒体元素<video>,并在元素的src属性中,

设置播放的视频文件的URL地址,并设置页面加载完成后自动播放这个文件。代码如下。

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8" />

<title>使用多媒体元素播放文件</title>

</head>

<body>

<video id="vdoMain" src="../Video/2.ogv" autoplay="true">

你的浏览器不支持视频

</video>

</body>

</html>

 perload属性

perload属性用于指定视频或音频数据是否预加载。如果使用预加载,

则浏览器会预先将视频或音频数据进行缓冲,这样可以加快播放速度,

因为播放时数据已经预先缓冲完毕。

该属性有3个可选值,分别是none、metadata和auto,其默认值为auto。

 none值表示不进行预加载。

 metadata表示只预加载媒体的元数据(媒体字节数、第一帧、播放列表、持续时间等)。

 auto表示预加载全部视频或音频。

该属性的使用方法如下。

<video src="sample.mov" preload="auto"></video>

 poster(video元素独有属性)和loop属性

当视频不可用时,可以使用该元素向用户展示一幅替代用的图片。当视频不可用时,

最好使用poster属性,以免展示视频的区域中出现一片空白。

该属性的使用方法如下。

<video src="sample.mov" psoter="cannotuse.jpg"></video>

在文件中创建一个video元素,为video元素设置poster属性,并选取一幅图片作为该属性的值。代码如下。

<html>

<head>

<meta charset="utf-8" />

<title>设置video 元素的poster 属性</title>

</head>

<body>

<video id="vdoMain" src="../Video/2.ogv" controls="true" poster="../Images/1.jpg">

你的浏览器不支持视频

</video>

</body>

</html>

运行实例,在播放视频文件之前,在视频播放区域中首先将显示poster属性指定的图片,

loop属性用于指定是否循环播放视频或音频,

其使用方法如下。

<video src="sample.mov" autoplay="autoplay" loop="loop"></video>

 controls属性、width属性和height属性(后两个是video元素独有属性)

controls属性指定是否为视频或音频添加浏览器自带的播放用的控制条。

控制条中具有播放、暂停等按钮。其使用方法如下。

<video src="sample.mov" controls="controls"></video>

说明

开发者也可以在脚本中自定义控制条,而不使用浏览器默认的控制条。

width属性与height属性用于指定视频的宽度与高度(以像素为单位),

使用方法如下。

<video src="sample.mov" width="500" height="500"></video>

在文件中创建一个video元素,首先在元素的src属性中设置需要播放的视频文件,

然后分别设置video元素的宽度与高度。代码如下。

<html>

<head>

<meta charset="utf-8" />

<title>设置video 元素的大小</title>

</head>

<body>

<video id="vdoMain" src="../Video/2.ogv" autoplay="true" width="360" height="220">

你的浏览器不支持视频

</video>

</body>

</html>

 error属性

在读取、使用媒体数据的过程中,正常情况下该属性为null,

但是任何时候只要出现错误,该属性将返回一个MediaError对象,

该对象的code属性返回对应的错误状态码,其可能的值如下。

 MEDIA_ERR_ABORTED(数值1):媒体数据的下载过程由于用户的操作而被终止。

 MEDIA_ERR_NETWORK(数值2):确认媒体资源可用,但是在下载时出现网络错误,媒体数据的下载过程被终止。

 MEDIA_ERR_DECODE(数值3):确认媒体资源可用,但是解码时发生错误。

 MEDIA_ERR_SRC_NOT_SUPPORTED(数值4):媒体资源不可用,媒体格式不被支持。

error属性为只读属性。

 networkState属性

该属性在媒体数据加载过程中读取当前网络的状态,其值如下。

 NETWORK_EMPTY(数值0):元素处于初始状态。

 NETWORK_IDLE(数值1):浏览器已选择好用什么编码格式来播放媒体,但尚未建立网络连接。

 NETWORK_LOADING(数值2):媒体数据加载中。

 NETWORK_NO_SOURCE(数值3):没有支持的编码格式,不执行加载。

networkState属性为只读属性,读取网络状态的实例代码如下。

 currentSrc属性、buffered属性

可以用currentSrc属性来读取播放中的媒体数据的URL地址,该属性为只读属性。

最靠谱的WEB前端教程——整整140集,全程干货无废话,学完变大佬!

:点击上方"WEB网页设计自学平台"↑ 可以订阅噢!

摘要 51RGB官方微信在学习CSS制作知识之前,我们必须需要认识的HTML什么基础知识。

一、必知HTML基础-CSS教程系列

  • 目录

  1. 搞清浏览器作用

  2. 搞清什么是HTML

  3. html作用

  4. html我们涉及哪些基础知识

  5. 常见html单词及单词功能作用有哪些

  6. html结构

  7. html与CSS关系

1、搞清浏览器作用

浏览器主要作用是浏览网页作用,在DIV+CSS制作开发时候仍然是浏览我们制作开发重构网页作用。浏览器可测试我们开发的CSS网页兼容性、网页效果、因开发疏忽导致错误等作用。

在CSS测试(CSS工具)里常用浏览器包括IE6、IE7、IE8、火狐(FF)、谷歌(chrome)、苹果Safari、Opera主流浏览器。至于傲游、360浏览器因为他们使用你系统自带的IE内核,所以不必考虑,只要支持你浏览器版本即支持类似这2款浏览器

需要兼容浏览器有哪些?http://www.51rgb.com/css-tool/t86.shtml

2、搞清什么是HTML

html是hypertext markup language的缩写,即超文本标记语言。可以这样理解,HTML文件是一定规则规律以html\htm等命名后缀名的文本文件。

3、html作用

HTML作用,通过一定html自身语法结构(html结构),显示文字、图片、动画(flash)、视频或音频音乐。而CSS则是配合html实现漂亮的各式各样的页面内容。

4、html我们涉及哪些基础知识

Html扩展名、html源代码、DOCTYPE、html结构、head标签、charset

5、常见html单词及单词功能作用有哪些

a、B(strong):加粗

b、P:换行实例:<p>我是第一段内容</p><p>我是第二段内容</p>

c、Br:提行实例:我是第一排<br />我是第二排内容

d、px:像素、长度宽度单位

实例:width:30px; 宽度30像素

e、ul、ol、li列表标签实例:

  1. <ul>

  2. <li>列表一</li>

  3. <li>列表二</li>

  4. <li>列表三</li>

  5. </ul>

  6. <ol>

  7. <li>列表一</li>

  8. <li>列表二</li>

  9. <li>列表三</li>

  10. </ol>

f、div与span:都是html标签

实例:<div>我占一行</div><span>我多长占多长位置</span>

两者区别:DIV占用1整排,而SPAN所占位置是内容多少占用多长长度

g、img:图片引用标签

<img src="/css-images/css-logo.gif" />图片标签

h、dl dt dd:CSS的另类表格组合

实例:

<dl>

<dt>我是标题</dt>

<dd>列表一</dd>

<dd>列表二</dd>

</dl>

j、title:标题标签

实例:<title>标题</title>

特点,在一个网页内只能使用一次(只能出现一次)

6、html结构 - TOP

这里Html结构可用于每次新建制作网页模板使用。

旧html结构:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>DIVCSS5标题</title>

</head>

<body>

具体网页呈现内容

</body>

</html>

经过CSS教程网的DIVCSS5优化后的HTML结构(可用于每次新建HTML模板):

<!DOCTYPE html>

<html>

<title>标题</title>

<meta name="keywords" content="关键字" />

<meta name="description" content="网页描述" />

<link href="这里CSS文件引入地址" rel="stylesheet" type="text/css" />

内容www.divcss5.com提供

7、html与CSS关系 - TOP

搞清楚html与CSS关系很重要,也是认识CSS基础。html与CSS关系解释:HTML内放置显示网页要显示的具体内容(图片、文字、动画等)而CSS是控制HTML内这些具体内容的怎么显示、怎么排版、颜色、大小、宽度、高度、左右布局等显示样式。

以上7点是学习CSS的html基础,可能还不完善,但是在以后运用的时候DIVCSS5会给大家详细、本简单CSS教程分为15节,此节DIV CSS教程以文字内容为主,以后会穿插更多实例和图例、跟我做的内容希望对大家能有帮助。