CSS基础知识点全面解析(转载)

html-css010

CSS基础知识点全面解析(转载),第1张

基本

常识与实践

链接方式

基本

最基本的方式就是直接在html文件中指定元素样式,这种方式不推荐,因为将表现层和结构层混起来了

"style="background-image:url({{user.avatar}})"

内部链接

要为html直接增加css样式,需要在元素中增加开始和结束style标记,css规则放在里面

<style>

p {

color: gray

}

</style>

css文件外置

另一种方式将css文件外置,如style.css,作为样式表(stylesheets),然后从html众创建一个到这个文件的外部链接,用元素,用外部样式表的好处是要修改整个网站的样式,只要进入这个样式表,对css进行几处修改即可。如:

<link type="text/css" rel="stylesheet" href="lounge.css" >

多样式表

使用多个样式表,顺序很重要,一个样式表会覆盖在它上面链接的样式表中的样式,有时会有一个样式表作为页面的基础样式,要修改样式,链接这个样式表,然后在下面提供自己的样式表,指定要修改的样式,如下所示:

<link rel="stylesheet" href="corperate.css">//总公司样式

<link rel="stylesheet" href="beverage-division.css">//部门对总公司的样式做了一些补充,甚至可以覆盖公司的样式

<link rel="stylesheet" href="lounge-seattle.css">//西雅图休闲室对样式表做了自己的调整

简写

css属性太多,能不能不费吹灰之力就指定这些属性呢?可以把同一属性的值结合起来写成一句,即简写。

简写格式

padding

padding: 0px 40px 30px 20px,顺序是上右下左,顺时针有木有,如果都相同可以用padding: 20px

padding-top: 0px

padding-right: 40px

padding-bottom:30px

padding-left: 20px

margin

上面的padding格式同样对margin也适用,还有另一种方法,如果上下一样,左右一致,可以这样写:margin: 0px 20px,前面指定上下,后面指定左右。

border

边框属性简写 border: thin solid #007e73,可以用你喜欢的任何顺序。

background

背景简写 background: white url(images/cocktail.gif) repeat-x,同样顺序随便

字体

字体简写的格式稍微复杂一些:

font : font-style font-variant font-weight font-size/line-height font-family

选择

子孙选择器

父元素和子孙元素名之间有一个空格,子孙选择器会选择所有子孙,包括这个元素中嵌套的所有,不管嵌套多深,例如

color: black

}

直接孩子

如果要选择直接的孩子,用>

color: black

}

复杂选择

更复杂的选择,方法还是一样

color: blue

}

规则添加

当我们用选择器选择元素使用一个规则时,会对所有该元素应用这个样式,所以如何单独地选择这些元素呢?这里就需要类class,class可以定义一类元素,对属于该类的所有元素应用样式.要将一个元素加入一个类,只需要增加属性”class”,并提供类名,如”greentea”:

<p class="greentea">

...

</p>

类元素选择器

先选择这个类中的元素,再用”.”指定一个类,最后是类名,如:

p.greentea {

color: green

}

添加类元素

如果想对所有<blockquote>也做同样的处理,可以:

blockquote.greentea,p.greentea {

color: green

}

<blockquote class = "greentea">

类选择器

如果想把<h1>,<h2>,<h3>,<p>和<blockquote>都增加到greentea呢?要对类中的所有元素都用同一样式可以用:

.greentea{

color: green

}

/ 省略所有元素名,只有一个点,则会应用到所有成员 /

多类元素

元素可以有多个类,例如:

<p class="greentea raspberry blueberry"

特定元素选择器

如果多个选择器都选择了一个元素呢?例如上面的3个类都与p元素匹配,并且都定义了color属性,那么那个会胜出?

id

id的作用

id属性用来唯一地命名元素,通常你想对多个元素重用某些样式,才能真正发挥类的作用。但是如果只有一个元素需要样式,或者页面上只有一个元素,那就应该使用id,每个元素只能有一个id,页面中只能有一个元素拥有特定id,一个元素有一个id,同时可以属于一个或多个类,id中不允许出现空格或其他特殊字符,如

<p id="footer">...</p>

选择元素

用id选择一个元素,需要在id前面使用一个#字符(类是[.]),id选择器只与页面中的一个元素匹配

color: red

}//选择id为footer的任意元素

p#footer{

color: red

}//选择id为footer的<p>元素

实践建议

继承

样式继承

层叠

媒体查询

link媒体查询

你可能想针对将要显示页面的设备调整页面的样式,可以用media属性,在link元素中增加这个属性.如

<link rel="stylesheet" href="lounge-mobile.css" mdeia="screen and (max-device-width: 480px)">

<link rel="stylesheet" href="lounge-print.css" media="print">

css媒体查询

可以直接在css中增加媒体查询,使用@media规则,把对所有媒体类型都通用的规则放在@media规则下面,例如

@media screen and (min-device-width: 481px){//当设备屏幕宽度大于480px时使用

margin-right: 250px

}

}

@media screen and (max-device-width: 480px){//当设备屏幕小于等于480px时使用

margin-right: 30px

}

}

@media print { // 如果要打印页面,使用该规则

body {

font-family: Times, "Times New Roman", serif

}

}

实践建议

属性

盒模型

盒模型是css看待元素的一种方式,css将每个元素看作由一个盒子表示,每个盒子由一个内容区以及可选的内边距,边框和外边距组成。由内而外分别是:

border 边框

color 颜色

文本元素的字体颜色

body{

background-color: rgb(80%, 40% , 0%)//橙色

}

还可以指定0-255之间的一个数值,例如:

body{

background-color: rgb(204, 102, 0)//和上面颜色一致,255*80% = 204...

}

font-family 字体

大多数计算机上通常只安装了部分字体,所以选择字体时要当心,通常指定的font-family包含一个候选字体列表,他们都来自同一个字体系列,候选字体用逗号分隔,大小写字母必须一致,最后总是放一个通用的字体系列名,如果一个字体名中包含多个单词,比如Courier New,如何指定?用引号,”Courier New”,如:

body{

font-family: Verdana, Geneva, Arial, sans-serif<一一首选字体呈降序

}

字体系列

每个font-family包含一组有共同特征的字体。共有5个字体系列:

body { font-size : small}

h1 { font-size : 150%}

h2 { font-size : 120%}

注意老版IE不支持用像素指定的文本缩放

浏览器默认字体大小

其他属性

left 指定一个元素的左边所在位置

top 控制一个元素顶部的位置

background-image 在元素后面放置一个图像,如

background-image: url(images/background.gif)

//用url括起来,注意没有引号

background-repeat 背景图像是否重复

line-height: 1//代表elixirs中的所有元素的行间距为其自己字体大小的1倍

}

width: 200px

float: right

}

background-color: #675c47

color:#efe5d0

text-align: center

padding: 15px

margin: 10px

font-size:90%

clear:right

}

width: 800px

padding-top: 5px

padding-bottom: 5px

background-color: #675c47

}

那么页面的宽度将被限制为800px,无论浏览器宽度如何变化都不会移动,但这会导致浏览器很宽时,右边有很多空白空间

凝胶布局 Jello

width: 800px

padding-top: 5px

padding-bottom: 5px

background-color: #675c47

margin-left: auto

margin-right: auto

}

绝对定位

position: absolute

top: 100px

right: 200px

width: 280px

}

display: table

border-spacing: 10px//于是不再需要div中的外边距

}

display: table-row

}

display: table-cell

background: #efe5d0 url(images/background.gif) top left

font-size:105%

padding: 15px

/ margin: 0px 10px 10px 10px/

vertical-align: top//确保表格两个单元格中的所有内容相对于单元格上边对齐,默认为中间对齐,可以设置为top,middle,bottom

}

display: table-cell

background: #efe5d0 url(images/background.gif) bottom right

font-size:105%

padding: 15px

/ margin: 0px 10px 10px 10px/

vertical-align: top

}

【这是我的学习笔记,你也可以拿去用】

1 元素选择器:比如p{xxxx},选择文档中所有的p元素;

2 类选择器:比如.center_bar{xxxx},选择文档中使用了类center_bar的元素;

3 id选择器:比如.button1{xxxx},选择文档中使用了button1的元素;

4 或选择器:用逗号连接多个选择器;

5 与选择器:多个选择器紧挨在一起;

6 后代选择器:用空格连接多个选择器;

7 子代选择器:用大于号连接多个选择器,它其实是后代选择器的特殊情况;

8 属性选择器:

(1) 比如p[id],选择标签上有属性“id”的p元素;

(2) 比如p[id="button1"],选择标签上有属性“id”并且id的值为“button1”的p元素;

(3) 比如p[id^=”b”],选择标签上有属性“id”并且id的值以“b”开头的p元素;

(4) 比如p[id$=”b”],选择标签上有属性“id”并且id的值以“b”结尾的p元素;

(5) 比如p[id*=”b”],选择标签上有属性“id”并且id的值包含“b”的p元素;

9 p:first-child:既是p元素,也是某元素的第一个孩子;

10 p:last-child:既是p元素,也是某元素的最后一个孩子;

11 p:nth-child(3):既是p元素,也是某元素的第三个孩子;

12 p:nth-child(odd):既是p元素,也是某元素的第奇数个孩子;

13 伪类选择器都是某种状态,比如active、link、hover,使用“:”;

14 伪元素选择器,确实有某些实体的东西,比如第一行文字、第一个文字、被选中的文字,使用“::”

15 只有多个选择器选中了同一个元素的同一个属性,才会出现优先级的问题;

16 如果两个选择器优先级相同,那么写在后面的选择器生效;

17 选择器优先级的排列:

(1) !important

(2) 内联样式

(3) id选择器

(4) 类和伪类选择器

(5) 元素和伪元素选择器

(6) *选择器

(7) 继承样式

以我的拙见,好的网站和 Web 应用程序应具有“真实”品质,实现这种效果涉及很多因素,但阴影是一个重要因素。

但是,当我浏览互联网时,各大网站大多数阴影都很虚假,布局盒子被模糊的灰色框覆盖,看起来并不像阴影。

本文讨论的就是如何将常见的阴影转换为美丽的、栩栩如生的阴影:

阅读受众

阴影意味着海拔,更大的阴影意味着更高的海拔。

如果我们有策略地使用阴影,我们可以创造深度视觉,就好像页面上的元素在不同层次上,并且漂浮在背景之上。

例子:

使用阴影的目的:要么增加特定元素的显着性,要么让应用程序感觉更触手可及、栩栩如生。

当我想为一个元素添加阴影时,我会添加`box-shadow并修改值,直到得到我喜欢结果。

问题是: 如果孤立地创建每个阴影,你会得到一堆不协调的阴影。如果我们的目标是创造深度视觉,我们需要每个阴影都相互配合。否则,他们看起来就是一堆垃圾:

在自然界中,阴影是光投射出来的。阴影的方向取决于灯光的位置:

一般来说,我们应该为页面上的所有元素确定一个单一的光源,通常位于左上方:

如果 CSS 有一个照明系统,我们可以为所有元素指定同一个光源,可惜CSS 没有这样的东西。

我们通过指定水平偏移和垂直偏移来移动阴影。例如,在上图中,生成的阴影具有 4px 的垂直偏移和 2px 的水平偏移。

这是内聚阴影的第一个技巧: 页面上的每个阴影都应该共享相同的比例 。 这将使每个元素看起来都来自同一个光源。

为啥所有元素比例要一样?

为什么我建议对每个元素使用相同的比例,难道每个元素相对于光源的位置都是一样的吗?

为了便利性考虑,我们一般使用相同的角度,因为计算每个元素的角度很麻烦。

如何创造一种深度视觉?

查看演示,注意值是如何变化的:

前两个数字 - 水平和垂直偏移 - 一起缩放。垂直偏移始终是水平偏移的 2 倍,这里使用了相同的比例。

当卡片升高时,有两个变化:

从算法来讲,这里面又复杂的数学算法。

我们可以从人类常识来理解这件事:

如果您在光线充足的房间内,请将手按在桌子上,然后慢慢抬起。 注意阴影是如何变化的:它远离你的手(更大的偏移),它变得更模糊(更大的模糊半径),它开始逐渐消失(更低的不透明度)。

因为我们生活中有很多经验,所以我们不需要记住一堆规则。在设计阴影时,我们只需要 运用我们的常识 。

Blender 等现代 3D 插图工具可以使用 光线跟踪 技术产生逼真的阴影和照明。

在光线追踪中,数百束光从相机中射出,从场景的表面反射数百次。这是一种计算成本很高的技术;生成单个图像可能需要几分钟到几小时!

网络用户没有那种耐心,所以 box-shadow 算法要简陋得多,它只实现了基本的模糊算法。

因此, box-shadow 阴影永远没有照片逼真,但我们可以巧妙地优化: 分层 。

我们不使用单个 box-shadow,而是把多个阴影叠加起来,阴影之间的偏移量和半径略有不同:

Philipp Brumm 一个很棒的生成分层阴影工具: shadows.brumm.af :

性能权衡

不可否认,分层阴影是美丽的,但它们确实需要付出代价。如果我们叠加 5 个阴影分层,我们的设备必须多做 5 倍的工作!

在好的硬件上不是什么大问题,但会减慢在较旧的廉价移动设备上的渲染速度。

到目前为止,我们所有的阴影都使用了半透明的黑色,比如 hsl(0deg 0% 0% / 0.4) 。这实际上并不理想。

当我们在背景颜色上叠加黑色时,不仅会使它变暗,也会使其饱和度降低很多。

比较这两个框:

左边的盒子使用了透明的黑色。右侧的框匹配颜色的色调和饱和度,但降低了亮度。我们得到了一个更有活力的盒子!

当我们为阴影使用较深的颜色时,会发生类似的效果:

但是,左边的饱和度太低,右边的 饱和度不够 ,感觉更像是光晕而不是阴影!

实验一下:

通过匹配色调并降低饱和度/亮度,我们可以创建一个真实的阴影,没有那种“褪色”的灰色质量。

饱和度和亮度的关系

如果您熟悉 hsl 颜色格式,就会知道饱和度和亮度是独立控制的。

那么,降低亮度似乎也对饱和度有影响是不是有点奇怪?

这个问题以后有时间给大家细讲。

在本文中,我们一直在使用 box-shadow 属性。 box-shadow 是一个很好的全面工具,但它不是我们在 CSS 中唯一的阴影选项。