css小笔记
唤醒记忆三部曲——css(Cascading Style Sheets)
css简单介绍:
众所周知,css是帮助人们将文档信息的内容和如何展现它的细节相分离。以便人们更好的处理文档的“内容”和“样式”。
那么浏览器是怎么处理标志语言和css的呢?
浏览器首先将标记语言和css转换成dom(文档对象模型)结构。之后,浏览器将dom的内容展现出来。
这里再讲一下dom结构和标记语言中的元素的区别:
首先,我们可以将标记语言如html中的<p>
标签称为“元素”。这里的元素可以允许我们把它作为一个容器去存储信息:
1 | <p> |
这里就用<p>
和</p>
构造了一个容器。
而dom结构是一个树形结构,每个元素和非空文本都可以看做是树形结构上的一个结点。dom不再是一个容器,但是,它可以看做为子节点的父节点而存在。可以看:
P
├─STRONG
│ └─"C"
├─"ascading"
├─STRONG
│ └─"S"
├─"tyle"
├─STRONG
│ └─"S"
└─"heets"
针对上面的html标记语言,dom模型可以这样去理解其结构。
层叠和继承:
一个元素的样式,有很多种定义的方式,对于层叠来说,主要有三种样式的来源:
- 浏览器对HTML定义的默认样式
- 用户定义的样式
- 开发者定义的样式:1、定义在外部文件(外链样式)2、在页面的头部定义(内联样式)3、定义在特定的元素身上(行内样式)
他们之间的优先级是:浏览器默认定义<用户定义<开发者定义。我们这里主要是针对于开发者定义。css还提供了使用!important
关键字,使关键字处的样式立马成为最高级别的优先级。
选择器:
- 元素选择器
请看下面这个例子:
1 |
|
这里是一段html的代码,我在body
中分别写了两个标签,然后请看index.css
代码:
1 | div { |
index.css
中,这个代码的意思是以<div>
标签为选择器,括号中是对其进行的申明(declaration),其中的color是“属性”,red是对应的“值”。<div>
标签中的a就会被变为红色。如果想同时选择多个标签作为选择器,那么他么之间只需要加一个英文的逗号即可。
这种以标签类型作为选择条件的方法我们就称为类型选择器。
- 类选择器(class selectors)
类选择器主要是通过设置元素的class
属性,然后通过“类”(class)对其进行选择,请看:
1 | !DOCTYPE html> |
这里我们将<p>
标签添加了class="afv"
这个“类”,然后请看index.css
代码:
1 | .afv { |
这里我们通过.afv
这样的格式,选定了有类为afv的元素,然后就可以将bab
变为了红色。注意,其中的<link rel="stylesheet" href="index.css">
这句话的意思是链接一个名为index的外部样式表,这句话不能省略。如果,同时定义两个类,那么类之间需要添加一个空格就好:
1 | ... |
此时想要选择同时有afv
和xcs
的类时,index.css
就可以这样:
1 | .afv.xcs { |
如果在定义类时是这样的:(span
是用来组合文档中的行内元素)
1 | <p class="afv"> |
index.css
文件就要这样
1 | .afv .xcs { |
在两个属性之间要有一个空格。
- id选择器
一般id选择器只用于页面中的唯一的元素,例如:
1 | <p id="principal">logo</p> |
在index.css
文件中这样来选择:
1 | #principal { |
- 属性选择器
例如此段代码:
1 | <body> |
可以通过属性“title”去选择:看index.css
文件:
1 | [title] { |
此时就可以将含有title
元素的button
的字体“提交”改为了蓝色。如果我们想特定的选择属性值为xx的,可以直接这样书写:
1 | [title="提交此文件"] { |
这样选择控制就更加的精确。
如果,index.css文件是这样:
1 | [title*="提交"] { |
这个的意思是选择只要属性中包含“提交”两字的所有元素。上面的直接等号是指完全匹配,注意区分。
如果,index.css
文件是这样的:
1 | [title^="提交"] { |
这里的意思是选择那些元素中包含“提交”两字的,且必须是以“提交”两字开头的元素。
如果想选择以“提交”两个字结束的元素,那么可以这样:
1 | [title$="提交"] { |
如果想选择特定标签的特定属性的元素,那么可以这样:
1 | a[title] { |
- 后代选择器
例如看下面这个例子:
1 |
|
这里嵌套了三个div
标签,然后请看asd.css
:
1 | .a .b .c { |
这里因为我们是对“类”进行选择,所以要加一个点号,这里.a .b .c
(.a前面没有空格)的意思是在a的下面去找b再在b的下面去找c,中间用空格去隔开。也可以.a .c
依然可以定位到类c,所以说,只要类a
下面有类c就可以。也可以.a *
(.a和*之间有空格)选择类a
下面的所有类,以此类推。总的来说,注意他们之间的嵌套关系,使用空格,*****号去操作就可以,要灵活使用。
- 相邻选择器
例如请看:
1 |
|
这里有三个并行的div
标签。然后我们可以这样对其选择:
1 | .a + div { |
这里因为我们是选择类a,所有要加一个点号,然后使用+号,意思是选择类a的相邻的(准确的来说是选择类a
下面的一个,因为相邻选择器只会至下选择)一个div
标签。如果想要选择类a
下面的所有的标签,可以这样:
1 | .a ~ div { |
当然上面两个中的div
都可以直接写成.b
这里之所以写.div
就是假如类a的弟弟没有“类”呢。也当然,我也可以直接写.b
直接选择到了类b
的元素,这里之所以这样写只是为了说明相邻选择器的工作方式,不要误会~~
- 伪类选择器
同样看例子:
1 |
|
这里分别有一个链接,一个输入框,一个按钮,接着看asd.css
:
1 | a:link { |
这里第1行是选择a
标签,且网址链接没有点击的话就显示为红色,第5行的意思是如果网址被点击过,那么就显示为蓝色。第8行是选择button
标签,hover
的作用是在鼠标悬停在按钮上时的效果,这里为背景色为#fff
。hover
同样可以在<a>
标签中使用。button:active
的作用是设置按钮在被触发时候的效果。input:focus
的作用是设置选定输入框时的效果。这里只例举了几个常用的伪类选择器。
- 伪元素选择器
直接看例子:
1 |
|
这里写了两个链接,一个段落,一个div
里面有三个p
标签,现在使用伪元素选择器对其进行修改:
1 | p:first-letter { |
这里第1-3行的意思是选择p
标签且对他的第一个字母改变字体大小,使用first-letter
。第5-8行分别是选择了类comm
,所以要加一个点号,接着使用before
在其前面添加了一个-
,第10-13行一个意思,只是是在最后加。(这里使用了content
,一般css只对样式进行修改,不会改变其中的内容,而这里是为数不多的css中增加了内容的用法,注意)第15-17行,是先选择div
标签后再选择p
标签,后对其中的“第一个孩子”进行修改。第19-21行是对“最后一个孩子”,第23-25是通过传值来指定选择“哪一个孩子”。不难类推。