当前位置: 首页 > Web前端 > CSS

[翻译]HTML&CSSLesson3-UnderstandingCSS

时间:2023-03-31 02:06:20 CSS

CSS是一门复杂的语言,具有相当的能力。它允许我们为页面添加布局和设计,允许多个元素甚至多个页面共享样式。在我们有能力解锁所有功能之前,我们必须首先充分了解它的基本原理。首先,我们需要清楚地了解样式是如何呈现的。具体来说,我们需要知道不同类型的选择器是如何工作的,以及这些选择器的顺序如何影响样式的呈现方式。我们还需要了解一些在CSS中不断出现的常见属性值,尤其是影响颜色和长度的属性值。现在让我们来看看在CSS的幕后究竟发生了什么。Cascading我们先通过看所谓的cascading来分析样式的呈现方式,然后学习一些cascading的例子。在CSS中,所有样式表中的样式都是自上而下层叠的,可以添加新的样式,也可以覆盖已有的样式。比如我们先在样式表中将所有段落

的背景设置为橙色,字号设置为24px。接下来,我们添加另一种样式,将段落

的背景设置为绿色,如下所示:p{background:orange;font-size:24px;}p{background:green;}由于背景设置为绿色选择器在背景设置为橙色的选择器下方,所以优先级更高,所有段落

最终都会显示一个绿色背景。但是字体大小仍然是24px,因为在第二个段落选择器中没有定义字体大小。属性级联选择器内的属性也可以级联。仍然以段落为例,我们将所有段落元素

的背景设置为橙色。然后直接在这个属性下设置一个背景为绿色,如下图:p{background:orange;background:green;}由于背景色值green是在orange之后声明的,所以会覆盖orange,最终所有的段落元素

的背景色都是绿色。所有样式从上到下层叠。但有时级联不起作用:当我们使用多个不同类型的选择器来设置样式时,级联关系就会被打破。这就是我们下面要说的。计算出的特征的每个选择器都有一个权重值,一个选择器的权重和级联关系决定了呈现什么样的风格。在第一课“构建您的第一个页面”中,我们提到了不同种类的选择器:类型选择器、类选择器、ID选择器。每种类型的选择器都有一个权重值。类型选择器的权重最低。它的值为0-0-1,类选择器的权重以0-1-0的值为中心。最后一个是ID选择器,权重最高,值为1-0-0。我们可以看到,权重值由三列数字组成,第一列是ID选择器,第二列是Class选择器,第三列是类型选择器。同样,ID选择器的权重高于类选择器,类选择器的权重高于类型选择器。权重值权重值是有意用连字符连接的——因为它们的值不是十进制数。Class选择器权重值不是数字10,ID选择器权重不是数字100。这些数字应分别读取为0-1-0和1-0-0。我们将看到为什么权重值在复合选择器中用连字符连接。当样式冲突时,选择器的权重值越高,优先级越高。例如,当一个段落元素

同时使用类型选择器和ID选择器时,无论ID选择器的级联关系如何,ID选择器的优先级更高。HTML...

CSS#food{background:green;}p{background:orange;}在段落元素

中有一个id属性,其值为food。在CSS中,这个段落元素由两种类型的选择器选择:类型选择器和ID选择器。虽然类型选择器写在ID选择器之后,但是ID选择器比类型选择器好,因为它有更高的权重值,所以段落最终显示为绿色背景。请记住不同类型选择器的权重值。有时样式不会按预期呈现,因为选择器权重会破坏级联规则,因此它们无法正确显示。了解级联和权重的工作原理是一件困难的事情,我们将继续讨论这个话题。现在,让我们看看如何组合选择器,使它们更精确、更有意义。组合选择器到目前为止,我们已经学习了如何单独使用各种类型的选择器,但现在我们需要知道如何一起使用它们。通过组合选择器,我们可以选择更具体的元素或元素组。例如,我们要选中热狗元素中的所有段落元素

,并将它们的背景色设置为棕色。但是class属性值为mustard的段落元素

的背景色应该设置为黄色。代码如下:HTML

...

...

...

CSS.hotdogp{background:brown;}.hotdogp.mustard{background:yellow;}Whenselectorcombinationsappear,theyarereadfromrighttoleft.大括号之前最右边的选择器称为主选择器。主选择器标识样式适用于哪些元素。主选择器左侧的所有选择器都被视为预定义选择器。上例中的第一组选择器hotdogp包括两个选择器:类选择器和类型选择器。两个选择器由空格分隔。主选择器是指向段落元素的类型选择器。但是由于在这个类型选择器之前有一个预定义的类选择器hotdog,所以这个组合选择器只会选择class属性为hotdog的元素中的段落元素。上例中的第二组选择器.hotdogp.mustard由三个选择器组成:两个类选择器和一个类型选择器。与第一组选择器的唯一区别是在段落选择器之后添加了类选择器芥末。由于这个新的类选择器mustard位于选择器集合的最右侧并成为主选择器,因此该选择器之前的所有选择器都成为预定义选择器。选择器之间的空格在上面例子中的选择器组合.hotdogp.mustard中,类选择器hotdog和段落选择器之间有一个空格,但是段落选择器和类选择器mustard之间没有空格。这两种用法在选择器上有很大的不同。段落选择器和类选择器mustard之间没有空格,也就是说选择器选择了类属性值为mustard的段落元素

。如果删除了段落选择器,则类选择器芥末两边都有空格。它将选择所有类属性值为mustard的元素,而不仅仅是段落元素

。复合选择器从右到左读取,它指向类属性为hotdog的元素中的类属性为mustard的段落元素

。不同类型选择器的组合可以定位页面上的任何元素。随着我们编写更多的元素组合,我们将对其更加熟悉。但在此之前,我们需要了解如何通过组合选择器来改变选择器的权重。组合选择器权重组合选择器时,各个选择器的权重也会组合在一起。组合选择器中的权重值分别对不同类型的选择器进行计数。我们前面的例子中的第一组选择器.hotdogp有一个类选择器和一个类型选择器。我们知道类选择器的权重值为0-1-0,类型选择器的权重值为0-0-1,所以将权重值相加,合并后的权重值为0-1-1。第二组选择器.hotdogp.mustard有两个类选择器和一个类型选择器,计算出的权重值为0-2-1。第一列中的0表示没有ID选择器,第二列中的2表示两个类选择器,最后一列中的1表示类型选择器。比较两组选择器,第二组选择器有两个类选择器的权重值更高。所以它有更高的优先级,符合级联关系。如下代码所示,即使我们将两组选择器的书写顺序颠倒,将权重较高的选择器组合写在上面,页面渲染的效果也不会因为权重值的不同而发生变化。.hotdogp.mustard{background:yellow;}.hotdogp{background:brown;}一般来说,我们应该时刻注意样式的权重。权重值越高,级联关系越容易被打破。使用多个类属性值对样式进行分类保持选择器权重值较低的一种方法是使样式尽可能模块化,允许多个元素共享相同的样式。模块化样式的一种方法是将具有多个类属性值的样式分层。HTML元素的class属性可以有多个值,每个值由一个空格分隔。这样,我们就可以将一些通用的样式应用到整组元素上,然后再将特定的样式应用到特定的元素上。我们可以将可重用的样式放在一个类中,将其他样式放在另一个类中。以按钮为例,我们希望所有按钮的字号都是16px。但是按钮的背景颜色需要根据使用场景变化。我们可以创建多个类属性值,然后根据需要将它们应用到相应的元素上。HTML......CSS.btn{font-size:16px;}.btn-danger{background:red;}.btn-success{background:green;}在这个例子中,有两个元素有多个类属性值。第一类属性的值为btn,元素的字体大小设置为16px。第一个元素还有一个class属性值btn-danger,它将背景颜色设置为红色。第二个元素还有另一个类属性值btn-success,它将背景颜色设置为绿色。这样我们的样式就保持干净和模块化。使用多个类属性值,您可以尽可能多地分层样式,保持代码干净,并保持低权重。完全理解级联和权重需要很长时间,但我们会在每一节课中变得更好。常用的CSS属性值我们使用了一些常用的CSS属性值,比如关键字颜色值:red和green。你可能不会想太多。现在让我们花点时间回顾一下我们之前使用过的属性值,并探索我们将要使用的一些更常见的属性值。这里将详细介绍与颜色和长度测量相关的属性值。CSS中的所有颜色都在sRGB(标准红绿蓝)颜色空间中定义。这个空间中的颜色全部由红色、绿色和蓝色通道混合而成,反映了电视和显示器产生所有不同颜色的方式。通过不同程度的红、绿、蓝的混合,就有数百万种颜色,我们几乎可以找到所有我们想要的颜色。目前在CSS中,表示sRGB颜色的方式主要有四种:关键字、十六进制符号、RGB和HSL值。关键字颜色值关键字颜色值是映射到给定颜色值的名称(例如:红色、绿色、蓝色)。这些关键字名称和对应的颜色值是由CSS规范决定的。只有最常用的颜色值和少数特定颜色值才有关键字名称。有关关键字颜色值的完整列表,请参阅CSS规范。在下面的例子中,我们将class属性值为task的元素的背景色设置为maroon,将class属性值为count的元素的背景色设置为黄色。.task{background:maroon;}.count{background:yellow;}关键字颜色值很简单,但是他们的选择非常有限,所以不是最常用的颜色值设置方式。十六进制颜色十六进制颜色值由#后跟三个或六个字母数字字符组成。数字使用从0到9的十个数字,字母使用从a到f的六个字母,包括大写和小写。这些值映射到红色、绿色和蓝色通道。在六个字符声明的颜色值中,前两个字符一对代表红色通道,中间两个字符一对代表绿色通道,最后两个字符一对代表蓝色通道。在用三个字符声明的颜色值中,第一个字符代表红色通道,第二个字符代表绿色通道,最后一个字符代表蓝色通道。如果六个数值颜色值中,前两个字符相同,中间两个字符相同,最后两个字符相同,则可以简写成一个三字符颜色值,只要其中之一两个重复的字符保留OK。例如,橙色的十六进制字符颜色值#ff6600可以写成#f60。通过将0到255格式化为十六进制字符来获得字符对。计算起来有点棘手-最好阅读有关它的书-但它可以帮助我们理解颜色值0等于黑色,255等于白色。千万种十六进制颜色十六进制颜色有近1670万种,获取方式:十六进制颜色中,每个字符有十六种选择,从0到9,从a到f。每对字符有256种颜色选项(16乘以16,或16的平方)。由于有三组256个颜色组,因此有超过1670万种颜色(256乘以256乘以256,或256的立方)。我们可以使用十六进制颜色值写出前面示例中的关键字颜色栗色和黄色,如下所示:.task{background:#800000;}.count{background:#ff0;}十六进制颜色值已经有一段时间并且由于可供选择的色值众多而变得相当流行。但如果您不熟悉颜色值,它就不会那么容易使用。好在Adobe开发了一款免费的色轮工具AdobeKuler,可以帮助我们找到想要的颜色,并给出对应的十六进制颜色值。此外,图像编辑工具,如AdobePhotoshop,也提供了拾取和获取十六进制颜色值的功能。RGB&RGBa颜色值RGB颜色值是用rgb()函数声明的,rgb()函数分别代表红、绿、蓝。每个值都是0到255之间的整数,以逗号分隔。0表示黑色,255表示白色。正如我们所想,rgb()函数的第一个值代表红色通道,第二个值代表绿色通道,第三个值代表蓝色通道。如果我们使用rgb()函数代替关键字颜色值orange,可以表示为rgb(255,102,0)同理,我们也可以使用rgb()函数代替关键字颜色值或十六进制颜色值表示栗色和黄色。task{background:rgb(128,0,0);}.count{background:rgb(255,255,0);}RGB颜色也可以具有透明度,使用rgba()函数声明。rgba()函数接受第四个参数,值必须在0到1之间,可以是小数。0表示完全透明不可见,1表示完全不透明。0到1之间的小数表示不同程度的透明度。如果我们想给橙色设置50%的透明度,可以用rgba()函数来表示:rgba(255,102,0,.5)。我们还可以更改背景颜色栗色和黄色的透明度。以下代码将栗色的不透明度设置为25%,将黄色的不透明度设置为100%。.task{background:rgba(128,0,0,.25);}.count{background:rgba(255,255,0,1);}RGB颜色值越来越流行,尤其是那些透明度RGBa。HSL&HSLa颜色值HSL颜色值是用hsl()函数声明的,代表色调、饱和度和亮度。与rbg()函数一样,值以逗号分隔。第一个值是一个从0到360的无单位数。0到360代表色轮。该值表示色轮上的色度。第二个和第三个值分别代表饱和度和亮度,数值以百分比表示,从0到100%。饱和度表示颜色饱和的程度,0为灰度,100%为完全饱和。亮度表示颜色的明暗程度,0为黑色,100%为白色。回到之前的橙色例子,该值可以转换为HSL颜色值:hsl(24,100%,50%)。背景颜色栗色和黄色也可以用HSL颜色值声明,如下所示。.task{background:hsl(0,100%,25%);}.count{background:hsl(60,100%,50%);}HSL颜色值也可以像RGBa一样设置透明度,使用hsla()函数。透明通道的行为模式与rgba()函数一致:第四个值的范围是0到1,可以是小数,在函数中标识透明度。例如,我们可以使用HSLa函数为橙色设置50%的透明度,其值为:hsla(24,100%,50%,.5)。同样,您可以使用HSLa颜色值将栗色的不透明度设置为25%,将黄色的不透明度设置为100%。.task{background:hsla(0,100%,25%,.25);}.count{background:hsla(60,100%,50%,1);}HSL颜色值是最新的CSS颜色值表示。由于其历史较短且缺乏浏览器支持,目前还没有被广泛使用。十六进制颜色值由于其广泛的支持,是迄今为止最流行的颜色值表示形式。如果颜色值具有透明度,则优先选择RGBa颜色值。虽然这些首选项将来可能会发生变化,但我们现在都将使用十六进制和RGBa颜色值。长度单位长度值和颜色值一样,有不同类型的值,服务于不同的目的。长度值有两种,分别用不同的单位来表示绝对值和相对值。现在让我们看一下表示长度值的更通用和直接的方法。复杂到超出我们的需要。绝对长度单位绝对长度单位是最简单的长度单位,因为它是固定的物理量度单位,例如英寸、厘米和毫米。目前最流行的绝对长度单位称为像素,记为px。一个像素等于1/96英寸。也就是说,一英寸有96个像素点。但实际上,一个像素在高密度和低密度设备上的显示会略有不同。像素单位由来已久,在不同的CSS属性中普遍使用。下面的例子将段落元素

的字体大小设置为14像素并且已经失去了一些人气。但是pixel非常容易驾驭,非常适合初学者,所以我们在学习HTML和CSS的过程中都会依赖它。相对长度单位除了绝对长度单位外,还有相对长度单位。相对长度单位稍微复杂一些,因为它不是固定的,而是取决于另一个长度测量单位。百分比%是最流行的相对单位之一。该百分比取决于另一个对象的长度。例如,要将一个元素的宽度设置为50%,我们需要知道其父元素的宽度。元素嵌入其中,其宽度为父元素宽度的50%。.col{width:50%;}在上面的例子中,我们将class属性值为col的元素的宽度设置为50%。这50%是相对于其父元素计算的。百分比在设置元素的高度和宽度以及页面布局方面非常有用,我们会在这些地方经常使用它们。em用em表示的em单位也是目前非常流行的相对长度单位。它基于另一个元素的字体大小进行计算。一个em单位对应于元素的字体大小。例如,如果我们将一个元素的字体大小设置为14px,宽度设置为5em,那么它的宽度就是70px(14px乘以5)。.banner{字体大小:14px;width:5em;}如果未声明元素的字体大小,则em单位将取决于具有声明的字体大小的最近元素的字体大小。em单位通常用于修改文本,例如字体大小、文本间距以及外边距和内边距。长度单位还有很多这里没有提到,只列出使用最广泛的三种——像素、百分比、ems。本课的内容到此结束。它主要侧重于CSS的基础知识,介绍它是如何工作的,以及一些常用的值。本课内容总结如下:什么是级联,什么是权重,如何计算权重,如何使用组合选择器选择需要的元素和元素组,如何在单个元素中使用多个类属性值来使样式更加模块化不同的CSS颜色值表示:关键字、十六进制、RGB和HSL不同的长度单位:像素、百分比、em基础部分已经介绍完了,但我们还需要学习很多其他的内容。在接下来的课程中,我们将继续学习CSS,让我们的网站真正成型。文章来源http://learn.shayhowe.com/htm...