层叠样式表 (Cascading Style Sheets).
CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离.
选择器 + {一条/N条声明}
注意:
- CSS 要写到 style 标签中(后面还会介绍其他写法)
- style 标签可以放到页面任意位置, 一般放到 head 标签内
- CSS 使用 /* */ 作为注释 (使用 ctrl + / 快速切换) (CSS 不支持 // 的注释方法)
例如上述 hello world 中,把 CSS 代码写到 style 标签里,并且 style 一般在head 标签中
外部样式:
文件名是啥都行,只要后缀是 .css 就行
然后在内部使用 link 连接就行了
注意:如果出现多个颜色作用在相同的声明上,那么看谁最后发挥作用,那就是谁的颜色(层叠的含义,后来的覆盖前面的)
内联样式:
不必写选择器,把样式写在哪个标签里,就是哪个标签生效
内联样式的优先级默认情况下 > 外部样式和内部样式的
选中页面中指定的标签元素.
以上内容只是 CSS2 标准中支持的选择器, 在 CSS3 中还做出了一些补充, 后面再说补充的
就是直接选中这一类标签,只要一写标签名,就把所有的对应标签选中了
此处的 “类” 和 Java 中的类没关系
例如我们希望第一个 div 和第三个 div 是绿色的
其中的 .one 中的点就是类选择器
运行结果也符合我们的要求。
一个类选择器,是可以被多个标签来引用的;一个标签,也可以引用多个类选择器。
有了类选择器,就可以随心所欲的选择任意的对象了
类选择器的优先级,是比标签选择器更高!
注意:
- 类名用 . 开头的
- 下方的标签使用 class 属性来调用.
- 一个类可以被多个标签使用, 一个标签也能使用多个类(多个类名要使用空格分割, 这种做法可以让代码更好复用)
- 如果是长的类名, 可以使用 - 分割.
- 不要使用纯数字, 或者中文, 以及标签名来命名类名
例如让第二个选择器被选择
id 选择器只能选中一个元素(id 值是唯一的),类选择器是可以选中多个元素的
id 选择器优先级 > 类选择器 > 标签选择器
特殊的情况,用来选中页面的所有元素
使用 * 的定义,选取所有的标签
* {
color: red;
}
页面的所有内容都会被改成 红色,不需要被页面结构调用。
把上述介绍的基础选择器进行组合
又叫包含选择器,选择某个父元素中的某个子元素。(选择某个元素里包含的一个元素)
例如下面我们只想要有序列表变为红色,无序列表还是默认的颜色,我们在 style 里就可以进行后代选择器的使用,注意中间有空格。
和后代选择器类似,但是只能选择子标签。
可以看到 a 标签是蓝色的,没有被选中,它是一个孙子元素,因为蓝色是 a 是浏览器默认的颜色
a:link 选择未被访问过的链接
a:visited 选择已经被访问过的链接
a:hover 选择鼠标指针悬停上的链接
a:active 选择活动链接(鼠标按下了但是未弹起)
鼠标挨到它就会变色,变成我们设置的伪类选择器的颜色
body {
font-family: '微软雅黑';
font-family: 'Microsoft YaHei';
}
也有办法测量像素大小,一般截图都可以测量出来,只需要注意系统的等比例缩放是 100% 就行。
font-weight
设置倾斜
font-style: italic;
取消倾斜
font-style: normal;
一般是取消倾斜 (比如针对 em / i)
使用 color 来进行设置
color 的写法
- 直接写单词
- 使用 rgb 的形式
- 使用十六进制的形式
为了量化的表示一个颜色,计算机中引入了 RGB 这样的概念。
上面的三种颜色是三原色,任何一种颜色,都可以通过三原色不同的比例来混合构成!
例如上述 rgb 取值范围是 0~255,表示一个字节的取值范围。
那我们如何知道这个颜色的 rgb 呢,取色器,就可以查看到,例如用 QQ 截图就可以查看到。
十六进制如何表示呢?
例如上面的前两位是 FF 的十进制表示就是 255,前面两个数字表示 R,中间两个数字表示 G,后面两个数字表示 B。
也有缩写形式(但是注意只能 AABBCC 才可以换成 ABC)
text-align: [值];
text-decoration: [值];
如果要想实现首行缩进几个空格,就可以使用文本缩进属性.
text-indent: [值];
在开发者工具中,选中值,按下方向键,就可以实现变大变小。在 Chrome 中的修改都是临时的,刷新页面就没了
行高指的是上下文本行之间的基线距离
line-height: [值];
行高 = 文字高度 + 行间距
background-color: [指定颜色];
background-image: url(…);
使用 background-image 默认是平铺的
background-position: x y;
使用 background-repeat 设置平铺~~
background-position: [值]; 设置背景位置
background-position: center center; 水平垂直都居中
background-size: length|percentage|cover|contain;
border-radius: length;
length 是内切圆的半径. 数值越大, 弧线越强烈
效果就是让矩阵的四角更加圆滑
常见的元素:
h1 - h6
p
div
ul
ol
li
…
常见的元素:
a
strong
b
em
i
del
s
ins
u
span
…
使用 display 属性可以修改元素的显示模式.
常见操作都是把行内元素设为块级元素
style=“display:none” 可以让元素隐藏不显示
支持简写, 没有顺序要求
还需要注意的是边框会撑大原有的盒子
我们还可以通过一个特殊的属性来进行设置
box-sizing: border-box; 边框不撑大盒子
升级一下写法 让全局都不会撑大
*{
box-sizing: border-box;
}
边框是分成四个方向的,可以直接给四个方向都加上边框,也可以只加某一边的边框,还可以让不同的方向不同的边框
使用padding来设置内边距。内容和边框之间的距离,只是单纯的设置距离而已,不像是边框,能设置粗细,风格,颜色。
上面写四行太麻烦 我们也可以缩写成一行
实际的效果是一样的
如果是两个数字 那就是先上下 后左右
如果是四个数字 那就是 “上右下左” 顺时针进行排列
如果是一个数字 则四个方向是一样的
默认情况下 内边距也会撑大盒子 得我们自己设置盒子不被撑大
控制盒子和盒子之间的距离,可以给四个方向都加上边距
当我们写出如下代码
全局效果图:
哈哈哈外边距图:
呵呵外边距图:
俩人合起来的边距图:
那么问题就来了:div 下方 margin 是 30px,p 下方 margin 是 16px,div 和 p 之间间隔的距离是多少像素呢?
难不成是合起来的 46px 吗?不是的,实际上,这两个元素的外边距是重叠起来的,实际两个元素的间隔,是两个 margin 值里的最大值,而不是相加。
上述规则是两个元素上下排列的时候如此,如果两个元素是水平方向排列,此时两个元素的实际距离,则是两个外边距的加和
外边距还可以设置元素水平居中(不是文字水平居中(text-align:center))
margin: 0 auto;
注意:没有垂直方向的水平居中,所以 margin: auto 0; 是无效的。
当给一个元素设为 display. flex 此时子元素就不再遵守原来的"块级元素""行内元素"的规则了,变成了弹性元素.这些元素就会按照弹性布局的规则来排列,但是不影响孙子元素。
flex-start : 默认靠左排列
flex-end : 默认靠右排列
space-between: 元素之间,有空白间隙,首尾没有间隙
space-around : 元素之间和首尾都有间隙
写一串代码:
效果图:
并不好看,在 div 里加上 display: flex; ,此时里面的 span 发生了改变,此时宽度生效,span 已经不是行内元素了,高度默认和父元素一样高,也可以手动改。
使用弹性布局就可以更方便的实现居中效果
实现了水平和垂直都居中: