CSS
(Cascading Style Sheets)层叠样式表。用于控制网页数据的表现,实现网页的表现与数据内容分离
通过(标签选择器)找到标签。
通过(element)操作标签对象。
CSS引入方式
行内式
行内式是标记的style属性中设定的css样式,这种方式没有体现出CSS优势,不推荐使用
CSS很多的时候,如果全写在行内的话,耦合性过强
实例:
<p style="background-color:red">this is p title</p>
导入式
在其他文件写好CSS文件,然后使用
@import
导入样式。导入式属于CSS代码范畴,数量有限制,有顺序,从上往下,如果文件大,则导入慢。通常用的也不多
实例:
- 新建test.css文件
1 | h1 { |
- 在
<head>
标签中导入
1 | <head> |
链接式
类似导入式,在
<head>
中使用<link>
引入样式链接式属于HTML代码范畴,不限引入次数,通常用于第三方css样式
实例:
新建test.css文件
在
<head>
中引入
1 | <head> |
嵌入式
嵌入式就是将css样式集中写在网页中的
<head>
标签下
示例:
1 | <head> |
CSS选择器
css选择器(selector)
选择器指明{ } 中的“样式”作用对象,也就是”样式”作用于网页中的那些元素
基本选择器
1 | * 普通元素选择器,匹配任何元素 |
基本选择器示例
1 | <head> |
组合选择器
1 | E,F 多元素选择器,同时匹配E元素或者F元素,E和F之间用逗号分隔 |
嵌套规则
1 | 块级元素可以包含内联元素或某些块级元素,但内联元素不能包含块级元素,他只能包含其他内联元素 |
组合选择器示例
1 | 通常E,F 和E F 用的多 |
属性选择器
1 | [attr] #属性为attr |
属性选择器示例
1 | <head> |
CSS伪类
1 | link 点击前显示的颜色 |
CSS伪类示例
1 | <head> |
CSS优先级
通常优先级顺序如下:
行内式(style) > id > class > div > *
style优先级:1000
id 优先级:100
class优先级:10
div优先级:1
示例1
1 | <head> |
示例2
1 | <head> |
如果加 important 就不属于优先级,直接用important属性
1 | <style> |
优先级总结
- 文内样式优先级为1000 ,所以优先级高于外部定义。
这里文内样式执行 如
<div style="color:red">blah</div>
的样式,而外部定义指定由<link>
或者<style>
卷标定义的规则
有!important声明规则高于一切
如果!important声明冲突,则比较优先级 如果优先级一样,则按照在源码中出现的顺序决定,后来者居上
由继承而得到的样式没有specificity的计算,他低于一切其他规则,比如全局选择符*定义的规则
CSS继承
继承是css一个主要特性,它是依赖于祖先-后代的关系。继承是一种机制,它允许样式不仅可以应用于某个特定的元素
它可以应用于它的后代,例如一个BODY定义了的颜色值也会应用到段落的文本中
示例:
1 | <head> |
CSS属性
颜色属性
1 | style=color:red; |
字体属性
1 | font-size:20px|50%|larger #大小 |
背景颜色属性
1 | background-color:red #背景颜色 |
文本属性
1 | font-size: 10px; #字体大小 |
边框属性
1 | border-style:solid; #边框风格solid直线,dashed虚线,none无(默认)dotted点边框,groove凹槽边框,ridge垄装,inherit继承 |
列表属性
1 | list-style-type:none #无标记 disc 实心圆 circle空心圆 square实心方块 decimal实心数字.... |
display属性
1 | display:none 层不显示,用的很多 |
DIV
<div>
在整个HTML标记中,没有任何意义,它的存在只是为了引用CSS样式,有一个叫<span>
也是类似不过
<span>
是内联元素,<div>
是块级元素
示例
1 | <html> |
盒子模型
盒子模型 |
---|
1 | margin 外边距,控制元素与元素之间距离,margin的最基本用途就是控制元素周边空间的间隔,从视觉上达到相互隔开的目的 |
盒子属性
1 | height 盒子高度 |
margin 外边距属性
1 | margin-left |
border 内边距属性
1 | padding-left |
示例
1 | <style> |
margin collapse
margin collapse边界塌陷或者说边界重叠
外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。
设想,当我们上下排列一系列规则的块级元素(如段落P)时,那么块元素之间因为外边距重叠的存在,段落之间就不会产生双倍的距离。又比如停车场
兄弟div:上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值
父子div:如果父级div中没有 border,padding,inline content(文本),子级div的margin会一直向上找,直到找到某个标签包括border,padding,inline content中的其中一个,然后按此div 进行margin,当然如果border为0px,或者inline content是空字符也不行
float属性
block和inline对比
block:块级元素
- block元素通常被显示为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填充满父元素宽度,block元素可以设置width,height,margin,padding属性
- 常见块级元素有
<div> <form> <p> <pre> <h1~h5> <dl> <ol> <ul>
等inline:内联元素
inline元素不独占一行,多个相邻的行内元素会排列在同一行,知道一行排列不下,才会新换一行,其宽度随元素的内容而变化,
inline元素设置width,height无效,inline元素的margin和padding属性,水平方向的padding-left,padding-right,margin-left,margin-right都会产生边距效果
但是竖向的padding-top,padding-bottom,margin-top,margin-botton不会产生效果
- 常见内联元素有
<a> <span> <strong> <em> <lable> <input> <select> <textarea> <img> <br>
等
文档流和脱离文档流
所谓文档流,值得是元素排版布局过程中,元素会自动从左往右,从上往下流式排列
脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而定位
只有绝对定位
absolute
和浮动float
才会脱离文档流。 部分无视和完全无视的区别?需要注意的是,使用
float
脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围(可以说是部分无视) 对于使用
absolute postition
脱离文档流的元素,其他盒子与其他盒子内的文本都会无视他(完全无视)
浮动的表现
浮动的框可以向左向右移动,知道他的外边缘碰到包含框 或 另一个浮动框 的边框位置,由于浮动框不在文档的普通流中,所以文档的普通流中的浮动框之后的块框
表现的就像浮动框不存在一样(注意这里是块框,不是内联元素;浮动框只对她后面的元素造成影响)
当初float被设计的时候就是用来完成文本环绕效果,所以文本不会被挡住,这里float的特性,即float是一种不彻底的脱离文档流方式,无论多么复杂的布局,其基本出发点均是:”如何在一行显示多个div元素”
浮动清除
清楚浮动
1 | clear语法 |
浮动示例
1 | <!DOCTYPE html> |
postition属性
position定位属性
static 默认值,无定位
relative 相对定位
absolute 绝对定位
fixed 固定定位
属性说明
1 | static |
注意
仅使用margin属性布局绝对定位元素
此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。
另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物