CSS也是一种标记语言
CSS样式规范
CSS规则主要由两个主要的部分组成:选择器以及一条或多条声明。
- css写在head标签中,具体语句写在
<style></style>
中 - 选择器是用于指定CSS样式的HTML标签
- 属性以“键值对”的形式出现
- 属性之间用分号隔开
<style>
p{
color: red;
font-size: 25px;
}
</style>
CSS选择器
标签选择器
p {
color: green;
font-size: 25px;
}
div {
color: pink;
}
- 只能修改全部的标签,无法进行差异化的修改
类选择器
可以差异化选择不同的标签,单独选择一个或者几个标签
.red {
color: red;
}
.green {
color: gold;
font-size: 50px;
}
- 指定样式可以使用多个类,中间用空格隔开
id选择器
- 通过id来设置属性,在CSS中以"#"来定义
- id选择器一般用于设置页面中的唯一值,配合JS使用
#name {
font-size: 25px;
color: blue;
}
通配符选择器
- 在CSS中以一个"*"来定义
- 不需要指定,自动页面中所有元素修改为指定样式
* {
color: red;
}
CSS字体属性
CSS Fonts(字体)属性用于定义字体系列、大小、粗细、和字体样式
字体系列
- 各个字体必须用逗号隔开
- 多个字体为了保证兼容性(在任何用户的浏览器都能正确显示)
p {
font-family: "微软雅黑";
}
div {
font-family: "Microsoft Yahei",'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
字号大小
- px(像素)是网页中最常用的单位
- 谷歌浏览器的默认大小是16px
- 不同的浏览器字体大小可能不同,开发中尽量给一个明确值,不要使用默认大小
- 可以给body指定整个页面的大小
- 标题标签比较特殊,需要单独指定大小
body {
font-size: 16px;
}
h2 {
font-size: 50px;
}
字体粗细
- normal默认值不加粗,bold加粗
- normal属性可以设置为400,加粗可以设置为700
- 实际开发中更推荐使用数字设置属性
.bold {
/* font-weight: bold; */
font-weight: 700;
}
.normal {
/* font-weight: normal; */
font-weight: 400;
}
文字样式
- 使用font-style属性设置文本的风格
- 很少给字体加斜体,反而要给倾斜字体变得不倾斜
em {
font-style: normal;
}
<em>把倾斜字体变得不倾斜</em>
字体复合属性
- 简写复合属性的时候,顺序不能乱
- 复合属性必须至少有字号和字体
div {
/* font-style: italic;
font-weight: 700;
font-size: 16px;
font-family: "Microsoft Yahei"; */
/* 复合属性,使用简写的方式 */
font: italic 700 16px "Microsoft Yahei"
}
.divSimple {
/* 必须有字号和字体 */
font: 50px "黑体";
}
<div>这个是font复合属性的文字1</div>
<div class="divSimple">这个是font复合属性的文字2</div>
文本装饰
- none没有装饰线最常用
- text-indent是缩进,2em表示缩进两个字符(缩进的长度是相对的,也可以用px)
a {
text-decoration: none;
color: black;
}
p {
text-indent: 2em;
}
<p>这个是段落文字</p>
<a href="#">这是一个链接</a>
CSS 引入方式
CSS样式表可以分为三大类
- 行内样式表(行内式)
- 内部样式表(嵌入式)
- 外部样式表(链接式)
行内样式表
- 书写方便权重高
- 其实就是设置的标签属性
- 书写繁琐不推荐使用,一般对当前元素进行简单样式时使用
<p style="color: red;font-size: 30px">行内样式演示</p>
内部样式表
在HTML文件的CSS样式称为内部样式表
<style>
标签理论上可以放在HTML文档的任何地方,一般会放在<head>
标签中
- 通过此种方式可以方便控制当前整个页面中元素的样式
- 代码结构清晰,但是没有实现结构与样式的完全分离
- 嵌入式,练习时候常用
外部样式表(最常用)
- CSS文件和布局文件分离使用标签引入样式
- rel指的是文档与链接文档之间的关系,"stylesheet"指的就是样式表,href指的就是路径
<link rel="stylesheet" href="style.css">
CSS复合选择器
后代选择器
- 在标签发生嵌套时使用,可以选择父元素里面的子元素
- 所有的后代元素都会引用选择器的样式
<style>
ol li {
color: blue;
}
ol li a {
color: deeppink;
}
</style>
<ol>
<li>后代选择器test</li>
<li>后代选择器test</li>
<li>后代选择器test</li>
<li><a href="#">test2</a></li>
</ol>
<ul>
<li>这是test</li>
<li>这是test</li>
<li>这是test</li>
<li>这是test</li>
<li>这是test</li>
</ul>
子选择器
只能选择作为某元素最近一级的元素(简单理解就是子元素)
ul>li {
color: red;
}
<ul>
<li>儿子</li>
<li><a href="#">孙子</a></li>
<p><a href="#">孙子</a></p>
</ul>
并集选择器
- 可以选择多组标签同时为他们定义样式
- 一般喜欢竖着写
<style>
/* 并集选择器 */
div,
p,
.pig {
color: deeppink;
}
</style>
<div>熊大</div>
<p>熊二</p>
<span>光头强</span>
<ul class="pig">
<li>小猪佩奇</li>
<li>pigdaddy</li>
<li>pigmom</li>
</ul>
链接伪类选择器
- 可以给链接添加特殊的效果
- 开发过程中顺序不能乱,遵循"LVHA"的顺序,如下
<style>
/* 未访问的链接 */
a:link {
color: black;
text-decoration: none;
}
/* 访问过的链接 */
a:visited {
color: orange;
}
/* 鼠标经过链接时 */
a:hover {
color: skyblue;
}
/* 鼠标按下没松开 */
a:active {
color: green;
}
</style>
<a href="#">小猪佩奇</a>
focus伪类选择器
选中元素时显示的效果
<style>
input:focus {
background-color: deeppink;
}
</style>
<input type="text"> <input type="text"> <input type="text">
CSS元素显示模式
块元素
常见的块元素有<h1>~<h6>``<p>``<div>``<ul>``<ol>``<li>
等,其中<div>
标签最为典型
- 比较霸道,自己独占一行
- 高,宽,外边距以及内边距都可以控制
- 宽度默认时容器(父级宽度)的100%
- 一个容器(盒子)可以放块级元素或行级元素
注意点
- 文字类的元素内不能使用块级元素
-
标签主要用于存放文字,因此
里面不能放块级元素,特别是
标签 - 同理
<h1>~<h6>
等,也不能放其他块级元素
行内元素
有很多,<span>
标签是最典型的行内元素
- 相邻的行内元素,一行可以显示多个
- 宽、高直接设置无效
- 默认宽度是本身内容的宽度
- 行内元素只能容纳文本或者其他的行内元素
注意点
<a>
标签链接里面不能再放链接- 特殊情况
<a>
标签里面可以放块级元素,但是给<a>
标签转换显示模式最安全
行内块元素
在行内元素中有几个特殊的标签,<img />
<input />
<td>
它们同时具有块元素和行内元素的特点
- 和相邻行内元素在一行上,但是他们之间会有空白缝隙,一行可以显示多个(行内元素特点)
- 默认宽度是它本身内容的宽度(行内元素特点)
- 高,宽,外边距以及内边距都可以控制(块级元素特点)
CSS元素显示模式
- 元素的显示模式可以转换为任意的行内元素,块级元素,和行内块元素
- 设置的属性是display:block/inline/inline-block
CSS背景
常用如下,其他查阅文档
<style>
div {
height: 300px;
width: 300px;
background-color: pink;
background-repeat: no-repeat;
background-image: url("images/logo.png");
background-position: top;
}
</style>
<body>
<div></div>
</body>
背景图片
具体代码和效果如图所示
<style>
h3 {
width: 118px;
height: 40px;
background-image: url(images/icon.png);
background-repeat: no-repeat;
background-position: left;
background-color: pink;
font-size: 12px;
font-weight: 400;
line-height: 40px;
text-indent: 1.5em;
}
</style>
<body>
<h3>成长守护平台</h3>
</body>
<style>
body {
background-image: url(images/bg.jpg);
background-position: center 40px;
background-attachment: fixed;
color: #ffff;
font-size: 20px;
}
</style>
<body>
<p>段友出征,寸草不生</p>
<p>段友出征,寸草不生</p>
<p>段友出征,寸草不生</p>
<p>段友出征,寸草不生</p>
...
</body>
背景属性的混合写法
- 实际开发中习惯简写背景属性
- 没有特定的书写顺序,一般约定的顺序是
- background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置
- 这种写法更加提倡
CSS三大特性
CSS的三大特性是:层叠性、继承性、优先级
层叠性
- 给相同的选择器设置相同的样式,下面的样式会覆盖上面的样式,但设置不同的样式则会保留
- 样式冲突:就近原则,哪个样式离结构近,就执行哪个样式
- 样式不冲突:不会层叠
继承性
- 子标签会继承父标签的某些样式,比如颜色字号等
<style>
div {
color: red;
}
</style>
<body>
<div>
<!-- 会继承div父标签的颜色属性 -->
<p>CSS继承</p>
</div>
优先级
当同一个元素指定多个选择器,就会有优先级的产生
- 选择器相同,则执行层叠行
- 选择器不同,则根据选择器权重执行、
- 作用范围越大权重越低(!important除外)
- 指定的范围越小权重越高
权重叠加
涉及到复合选择器,则会有权重叠加,需要计算权重
盒子模型
网页布局本质
- 先准备好相关的网页元素,网页元素基本都是盒子Box
- 利用CSS设置好盒子样式,然后摆放到相应位置*
- 往盒子里面装内容
网页布局核心本质:就是利用CSS摆盒子
盒子模型组成
- border(边框)
- content(内容)
- padding(内边距)
- margin(外边距)
盒子模型边框border
div {
width: 300px;
height: 200px;
/* 边框粗细一般单位用px */
border-width: 5px;
/* 实线边框:solid 虚线边框:dashed 点线边框 dotted */
border-style: dashed;
border-color: skyblue;
}
边框的复合写法
div {
width: 300px;
height: 200px;
/* 边框样式复合写法(简写) 没有顺序*/
border: red solid 5px;
}
甚至可以每个边单独设置颜色和大小,边框会影响盒子的大小
需求:上边框是红色,其余是蓝色
.red {
height: 200px;
width: 200px;
border: blue solid 5px;
/* 层叠性 */
border-top: red solid 10px;
}
padding
padding的复合写法
如果盒子本身没有指定width/height的大小,则此时padding不会撑开盒子大小
margin
- 用于设置外边距,即盒子与盒子之间的距离
- 行内元素或行内块元素水平居中时,给父元素添加text-align:center即可
外边距合并
- 尽量给相邻的盒子只添加一个margin值
嵌套块元素塌陷
解决方法
- 为父元素定义上边距
- 为父元素添加上边框(边框)
- 为父元素添加overflow:hidden(比较常用,不会使得盒子变大)
清除内外边距
- 一般网页元素都会带有默认的边距
- 用通配符选择器清除默认的边距
* {
padding: 0;
margin: 0;
}
TIPS
- 为什么要用那么多不同的标签
- 标签是有语义的,要在合适的地方用合适的标签,比如标题就用h 大量文字段落就用p
- 为什么起很多的类名
- 可以更好的找到盒子,选取盒子更容易,后期维护也更加的方便
- 什么时候用 margin 什么时候用 padding
- 可以混用,各有优缺点,根据情况来使用
- 布局有很多实现方式,然后做出自己的风格
圆角边框
设置圆角边框的属性是border-radius
数值越大,弧度越大
圆角边框的使用
可以让盒子变成一个圆或者是椭圆
border-radius: 50%;
border-radius: 盒子高度的一半px;
还可以设置每个角不同的圆角
border-radius: 10px80px;
盒子阴影(重点)
CSS3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影,盒子阴影不占用空间
语法
文字阴影
再CSS3中,可以使用text-shadow属性将阴影应用于文字