欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSS学习摘要-数值和单位及颜色

程序员文章站 2022-06-28 10:15:59
在CSS中,值的类型有很多种,一些很常见,一些你却几乎没怎么遇到过。我们不会在这篇文档中面面俱到地描述他们,而只是这些对于掌握CSS可能最有用处的这些。本文将会涉及如下CSS的值: * 数值: 长度值,用于指定例如元素宽度、边框(border)宽度或字体大小;以及无单位整数。用于指定例如相对线... ......

在CSS中,值的类型有很多种,一些很常见,一些你却几乎没怎么遇到过。我们不会在这篇文档中面面俱到地描述他们,而只是这些对于掌握CSS可能最有用处的这些。本文将会涉及如下CSS的值:

  • 数值: 长度值,用于指定例如元素宽度、边框(border)宽度或字体大小;以及无单位整数。用于指定例如相对线宽或运行动画的次数。
  • 百分比: 可以用于指定尺寸或长度——例如取决于父容器的长度或高度,或默认的字体大小。
  • 颜色: 用于指定背景颜色,字体颜色等。
  • 坐标位置: 例如,以屏幕的左上角为坐标原点定位元素的位置。
  • 函数: 例如,用于指定背景图片或背景图片渐变。

数值

你会在很多地方看到CSS单位中使用到数值。这一部分将会讨论数值的最常用类别。

长度和尺寸

在CSS布局、排版等等的所有时候,你都会使用到长度/尺寸单位(<length>)。我们不妨先看一个简单的例子——先上HTML:

 <p>This is a paragraph.</p>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>

然后是CSS:

p {
  margin: 5px;
  padding: 10px;
  border: 2px solid black;
  background-color: cyan;
}

p:nth-child(1) {
  width: 150px;
  font-size: 18px;
}

p:nth-child(2) {
  width: 250px;
  font-size: 24px;
}

p:nth-child(3) {
  width: 350px;
  font-size: 30px;
}

结果如下:

CSS学习摘要-数值和单位及颜色

在这个例子中我们做了以下事情:

  • 分别将每个段落的 marginpaddingborder-width 设置为5 pixels, 10 pixels 和 2 pixels。一个单独的margin/padding值表示所有的4个面都被设置成同样的值。边框也被设置成了 border 的缩写值。
  • 为三个不同的段落设置越来越大的宽度(width )像素值,也就是意味着越往下盒子越大。
  • 为三个不同的段落设置越来越大字号( font-size)像素值,也就是意味着越往下文本越大。font-size代表字体/字形的高度。

像素 (px) 是一种绝对单位(absolute units 因为无论其他相关的设置怎么变化,像素指定的值是不会变化的。其他的绝对单位如下:

  • mm, cm, in: 毫米(Millimeters),厘米(centimeters),英寸(inches)
  • pt, pc: 点(Points (1/72 of an inch)), 十二点活字( picas (12 points.))

除了px之外,你很可能都不怎么使用其他的单位。

也有相对单位,他们是相对于当前元素的字号( font-size )或者视口viewport 尺寸。

  • em:1em与当前元素的字体大小相同(更具体地说,一个大写字母M的宽度)。CSS样式被应用之前,浏览器给网页设置的默认基础字体大小是16像素,这意味着对一个元素来说1em的计算值默认为16像素。但是要小心—em单位是会继承父元素的字体大小,所以如果在父元素上设置了不同的字体大小,em的像素值就会变得复杂。现在不要过于担心这个问题,我们将在后面的文章和模块中更详细地介绍继承和字体大小设置。em是Web开发中最常用的相对单位
  • ex, ch: 分别是小写x的高度和数字0的宽度。这些并不像em那样被普遍使用或很好地被支持。
  • rem: REM(root em)和em以同样的方式工作,但它总是等于默认基础字体大小的尺寸;继承的字体大小将不起作用,所以这听起来像一个比em更好的选择,虽然在旧版本的IE上不被支持。
  • vw, vh: 分别是视口宽度的1/100和视口高度的1/100,其次,它不像rem那样被广泛支持。

使用相对单位是非常有用的-你可以调整你的HTML元素大小相对于你的字体或视口大小,这意味着布局将保持看起来正确,假设举个例子是一个视障用户的话,整个网站上的文本大小是原来的两倍。

无单位的值

你有时候会在CSS遇到无单位的数值,这不总是一个错误,事实上它是在某些情况下,完全可以。例如,如果你想让一个元素完全去除外边框和内边框,你可以只使用无单位的0 — 0就是0,不管前面设置的单位是什么!

margin: 0;

无单位的行高

另一个例子是 line-height 设置元素中每行文本的高度。你可以使用单位设置特定的行的高度,但使用一个无量纲的值往往更容易,它就像一个简单的乘法因子。

注:line-height
CSS属性中设置用于行所需要的空间,例如文本。
对于块级元素,它指定元素中线框的最小高度。
在未替换的内联元素中,它指定用于计算线框高度的高度。
对于替代行内元素,如 button 或其他 input 元素,line-height 没有影响。
对于部分替代元素,line-height 依然可以影响元素的样式布局。

动画的数值

CSS动画能够让页面上的HTML元素动起来。我们来看一个例子,当我们把鼠标浮动到一个段落上的时候,它能够旋转起来。这个例子的HTML代码很简单:

<p>Hello</p>

CSS有点复杂:

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

p {
  color: red;
  width: 100px;
  font-size: 40px;
  transform-origin: center;
}

p:hover {
  animation-name: rotate;
  animation-duration: 0.6s;
  animation-timing-function: linear;
  animation-iteration-count: 5;
}

这里你可以看到一些我们之前没有明确提到的有趣单位,但是我们感兴趣的是这一行 animation-iteration-count: 5; ——此行控制着动画启动(这里是指光标浮动至段落上)时后会执行多少次,而且这是一个简短无单位纯数字(计算机中称之为整型)。

以下是代码的实际效果:

CSS学习摘要-数值和单位及颜色

百分比

还可以使用百分比值指定可以通过特定数值指定的大部分内容。这使我们可以创建,例如,其宽度总是会移动到其父容器宽度的一定百分比的框中。这可以与那些将其宽度设置为某个单位值(如px或ems)的框进行比较,它们的长度总是保持相同的长度,即使它们的父容器的宽度发生变化。

让我们举个例子来说明这个问题。

首先,用HTML标记的两个相似的盒子:

<div>
  <div class="boxes">Fixed width layout with pixels</div>
  <div class="boxes">Liquid layout with percentages</div>
</div>

现在一些CSS来装饰这些盒子:

div .boxes {
  margin: 10px;
  font-size: 200%;
  color: white;
  height: 150px;
  border: 2px solid black;
}

.boxes:nth-child(1) {
  background-color: red;
  width: 650px;
}

.boxes:nth-child(2) {
  background-color: blue;
  width: 75%;
}

这给了我们以下结果:

CSS学习摘要-数值和单位及颜色

在这里,我们给两个divs一些 [margin] [height] [font-size] [border] 和 [color] 。

然后我们给第一个div和第二个div不同的 [background-color],所以我们可以很容易地区分开他们。 我们还将第一个div的 [width]设置为650px,将第二个div的宽度设置为75%。 这样做的效果是,第一个div始终具有相同的宽度,即使视口大小被调整(当视口变得比屏幕更窄时,它将从屏幕上消失),而第二个div的宽度随着视口(viewport )的变化而变化,使其始终保持其父元素的75%。 在这个例子中,div的父元素是<body>元素,默认情况下是视口宽度的100%。

注意: 您可以通过调整本文中的浏览器窗口来看到这种效果;
margin属性为给定元素设置所有四个(上下左右)方向的外边距属性。这是四个外边距属性设置的简写。四个外边距属性设置分别是: margin-top, margin-right, margin-bottom 和 margin-left 。指定的外边距允许为负数。

font-size CSS 属性中指定字体的大小。因为该属性的值会被用于计算em和ex长度单位,定义该值可能改变其他元素的大小。

border属性是一个用于设置各种单独的边界属性的简写属性。border可以用于设置一个或多个以下属性的值: border-width, border-style, border-color。

background-color 会设置元素的背景色, 属性的值为颜色值或关键字transparent二者选其一。

width 属性指定了元素内容区的宽度. 内容区在元素padding,border和margin里面。

我们也可以设置font-size的百分比为200%。它将和你预计的工作方式有一点不同,但这是讲得通的,它的新大小是相对于父容器的字体大小的,就像em一样。在这种情况下,父容器的字体大小为16px——页面的默认值,所以计算的值为16px的200%,或32px。这和em的风格确实很类似—200%基本上和2em一样。

这两种不同的框布局类型通常称为动态(流体)布局(如浏览器视口大小的变化),固定宽度布局(不管怎样都保持不变):

  • 可以使用动态布局来确保标准文档始终适合于屏幕,并且可以在不同的移动设备屏幕大小上表现良好。
  • 一个固定宽度的布局可以用来保持在线地图的大小相同;浏览器视口可以在地图上滚动,只在一个时间内查看一定数量的地图。您可以立即看到的量取决于您的视口有多大。

颜色

CSS中指定颜色的方法有很多,其中一些是最近实现的。CSS中到处都可以使用相同的颜色值,无论是指定文本颜色、背景颜色,还是其他任何颜色。

现代计算机中可用的标准颜色系统是24位,通过不同的红、绿、蓝通道,每个通道有256种不同的值,从而显示出大约1670万种不同的颜色。 (256 x 256 x 256 = 16,777,216.)

让我们运行不同的可用类型的颜色值。

关键词(色彩关键字)

最简单、最古老的颜色类型,CSS颜色关键词。这些都是特定的字符串代表特定的颜色值。例如red代表红色。

这很容易理解,尽管它只能让我们指定明显的颜色基元。有大约165个不同的关键字可用于现代Web浏览器-见 full color keyword list.

你可能会在工作中经常使用诸如红色、黑色和白色这样的纯颜色,但除此之外,你还想使用另一种颜色系统。

十六进制值

下一个常用的颜色系统是十六进制颜色或十六进制代码。每个颜色包括一个哈希/磅符号(#)和其后面紧跟的六个十六进制数,其中每个十六进制数可以是0和F之间的一个值(一共16个),0123456789abcdef。每对十六进制数代表一个通道(红色、绿色或者蓝色)允许我们指定256个可用值。 (16 x 16 = 256.)

例如,这个代码:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: #ff0000;
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: #0000ff;
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: #e0b0ff;
}

给出以下结果:

CSS学习摘要-数值和单位及颜色

这些值比较复杂,不太容易理解,但是它们比关键字更灵活——您可以使用十六进制值来表示您想要在颜色方案中使用的任何颜色。

RGB

我们要讨论的第三个方案是RGB。一个RGB值是一个函数rgb() -这是给定的三个参数表示的红色,绿色和蓝色通道的颜色值,在大致相同的方式作为十六进制值。与RGB的区别在于,每个通道不是由两个十六进制数字表示的,而是由0到255之间的十进制数表示的。

让我们重写上面那个例子来使用RGB颜色:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: rgb(255,0,0);
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: rgb(0,0,255);
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: rgb(224,176,255);
}

这给出了和上面例子同样的结果。

RGB值的支持度与十六进制不相上下,在你的工作中你可能不会遇到任何不支持它们的浏览器。

RGB值可以说比十六进制值更直观,更容易理解。

注意: 为什么是255而不是256?计算机系统倾向于从0计算,而不是从1计算。所以允许256个可能的值,RGB颜色在0-255范围值,不是1-256。

HSL

支持度比RGB稍微差一点的是HSL(不支持旧版本IE),这是开发者非常感兴趣而实施的——不只是红、绿和蓝色的值,该hsl()函数接受的色相饱和度以及明度值,以与上述三种不同的方式用来区分167万种颜色:

  1. 色调:颜色的底色调。这个值在0到360之间,表示色轮周围的角度。
  2. 饱和度:饱和度是多少?这需要一个从0-100%的值,其中0是没有颜色(它将显示为灰色),100%是全彩色饱和度。
  3. 明度:颜色有多亮或明亮?这需要一个从0-100%的值,其中0是无光(它会出现全黑的),100%是充满光的(它会出现全白)

现在我们用HSL颜色重写上面的例子:

<p>This paragraph has a red background</p>
<p>This paragraph has a blue background</p>
<p>This paragraph has a kind of pinky lilac background</p>
/* equivalent to the red keyword */
p:nth-child(1) {
  background-color: hsl(0,100%,50%);
}

/* equivalent to the blue keyword */
p:nth-child(2) {
  background-color: hsl(240,100%,50%);
}

/* has no exact keyword equivalent */
p:nth-child(3) {
  background-color: hsl(276,100%,85%);
}

HSL颜色模型对于常使用这样的模型的设计师来说非常直观。例如,找到一组色调以单配色方式使用是非常有用的。

/* three different shades of red*/
background-color: hsl(0,100%,50%);
background-color: hsl(0,100%,60%);
background-color: hsl(0,100%,70%);

RGBA 和 HSLA

RGB和HSL都有相应的模式——RGBA和HSLA——不仅允许您设置想要显示的颜色,还有此颜色的透明度( transparency )。它们与与之相应的函数采用同样的参数,再加上第四个范围在0-1的值——设置透明度,或者说alpha通道。0是完全透明的,1是完全不透明的。

让我们展示另一个简单的例子,第一个HTML:

<p>This paragraph has a transparent red background</p>
<p>This paragraph has a transparent blue background</p>

现在CSS——我们正在第一段向下定位,显示段落重叠的效果(以后你会了解更多关于定位的知识):

p {
  height: 50px;
  width: 350px;
}

/* Transparent red */
p:nth-child(1) {
  background-color: rgba(255,0,0,0.5);
  position: relative;
  top: 30px;
  left: 50px;
}

/* Transparent blue */
p:nth-child(2) {
  background-color: hsla(240,100%,50%,0.5);
}

结果如下:

CSS学习摘要-数值和单位及颜色

透明的颜色更丰富的视觉效果非常有用——混合的背景,半透明的UI元素等等。

不透明度(Opacity)

还有另一种方法来指定透明度,通过CSS——opacity 属性。
与设置某个特定颜色的透明度相比,这会设置所有选定元素以及它们的孩子节点的不透明度。

opacity属性指定了一个元素的透明度。换言之,opacity属性指定了一个元素后面的背景的被覆盖程度。

为了看出他们的区别,我们来研究下面这个例子:

<p>This paragraph is using RGBA for transparency</p>
<p>This paragraph is using opacity for transparency</p>

现在CSS是:

/* Red with RGBA */
p:nth-child(1) {
  background-color: rgba(255,0,0,0.5);
}

/* Red with opacity */
p:nth-child(2) {
  background-color: rgb(255,0,0);
  opacity: 0.5;
}

结果如下:

CSS学习摘要-数值和单位及颜色

注意区别——第一个盒子使用RGBA颜色,只有一个半透明的背景,而一切在第二个盒子里的都是透明的,包括文本。您要仔细思考使用两者的时机——例如,当您想创建一个图片覆盖的标题,图片能透过标题显示,且标题的文本显示不受影响,此时应该使用RGBA修改标题背景色的透明度;另一方面,当您想要创建一个动画效果,整个UI元素从完全隐藏到可见,此时应该使用不透明度(Opacity)。

transparent 关键字

transparent 关键字表示一个完全透明的颜色,即该颜色看上去将是背景色。从技术上说,它是带有阿尔法通道为最小值的黑色,是 rgba(0,0,0,0) 的简写。

currentColor 关键字

currentColor 关键字代表原始的 color 属性的计算值。它允许让继承自属性或子元素的属性颜色属性以默认值不再继承。

它也能用于那些继承了元素的 color 属性计算值的属性,相当于在这些元素上使用 inherit关键字,如果这些元素有该关键字的话。

附图:大部分的色彩关键字和rgb表示
CSS学习摘要-数值和单位及颜色

(译者注:颜色译名仅供参考。)

end
2018-5-31

全文摘录自MDN网络开发者网站