CSS
- CSS:层叠样式表。主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。
- CSS语法:CSS实例由选择器,以及一条或多条声明(属性)两部分组成。每个声明(属性)可以有一个或多个值。属性和值被冒号分开。CSS声明以分号;结束,声明以大括号{}括起来。
- CSS引入:引入CSS样式表的方法有三种。外部样式表、内部样式表、内联样式。
<head>
<!--
引入外部样式文件(推荐):<link>标签在写在<head>标签内。外部样式表文件不能包含任何的HTML标签。样式表应该以.css扩展名进行保存。
href:定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径。
type:定义所链接文档的类型,在这里需要指定为“text/CSS”,表示链接的外部文件为CSS样式表。
rel:定义当前文档与被链接文档之间的关系,在这里需要指定为“stylesheet”,表示被链接的文档是一个样式表文件。
-->
<link type="text/css" rel="styleSheet" href="./study.css" />
</head>
<body>
<!-- 行内样式:语法中style是标签的属性,实际上任何HTML标签都拥有style属性,用来设置行内式。其中属性和值的书写规范与CSS样式规则相同,行内式只对其所在的标签及嵌套在其中的子标签起作用。 -->
<div style="font-style:italic; color:blue;"> Hello there</div>
<div class="a"> Hello A</div>
<!-- 内部样式:语法中,style标签一般位于head标签中title标签之后,也可以把他放在HTML文档的任何地方。 -->
<style>
.a {
color: red;
}
</style>
</body>
CSS选择器
- CSS选择器(一):用于选取页面上的某个标签,在CSS中称为选择器。
- 通配符选择器:通配符选择器是以*选取所有标签。
- 标签选择器:直接使用标签名选取该标签名的所有标签。
- id选择器:id选择器可以选取到标有该id属性的HTML标签。id选择器以"#"来定义。一个元素只能有一个ID
- 类选择器:类选择器可以选取到标有该class属性的HTML标签。类选择器以"."来定义。class选择器有别于id选择器,class属性可以在多个标签中使用。也支持一个标签中有多个class属性值(用空格隔开)。
<!-- 类可以在同个标签上有多个值 -->
<div class="a b c"> Hello A</div>
<!-- 类可以在多个标签上使用 -->
<div class="a b"> Hello B</div>
/* 通配符选择器 */
* {
color: gray;
}
/* id选择器 */
#china {
color: red;
}
/* 类选择器 */
.america {
color: green;
}
/* 标签选择器 */
li {
color: yellow;
}
后台选择器:两个元素用空格隔开,并且选中的是元素1所有层级的后代
子代选择器:只能选择子元素
并集选择器:并集选择器中间用逗号隔开,支持任意其他选择器,多个元素要求竖着写
伪类选择器:伪类选择器表示的是同一个标签,根据其不同的种状态,有不同的样式。例如<a>标签有点击前和点击后两种状态。
<body>
<ol class="haha">
<li>1</li>
<li>
<p>我是儿子</p>
</li>
<li>3</li>
<p>我是孙子</p>
</ol>
<div>熊大</div>
<p>熊二</p>
<span>光头强</span>
<a href="http://www.baidu.com">百度一下</a>
<input>
</body>
<style>
/* 后台选择器:两个元素用空格隔开,并且选中的是元素1所有层级的后代 */
.haha p {
color: green;
}
/* 子代选择器:只能选择子元素 */
.haha>p {
color: red;
}
/* 并集选择器:并集选择器中间用逗号隔开,支持任意其他选择器,尽量竖着写 */
div,
p,
.haha>a {
color: pink;
}
/* 伪类选择器:伪类选择器表示的是同一个标签,根据其不同的种状态,有不同的样式。例如<a>标签有点击前和点击后两种状态。注意:一定先写静态伪类,后写动态伪类。
1.静态伪类:只能用于超链接的样式。
:link。超链接点击之前(主要是能区分是不是带有href的<a>标签)
:visited。链接被访问过之后
2.动态伪类:针对所有标签都适用的样式。
:hover。悬停,鼠标放到标签上的时候
:active。激活,鼠标点击标签,但是不松手时。
:focus。是某个标签获得焦点时的样式(一般用于输入框获得焦点)
*/
/* 让超链接点击之前 */
a:link {
color: red;
}
/* 让超链接点击之后 */
a:visited {
color: orange;
}
/* 鼠标悬停,放到标签上的时候 */
a:hover {
color: green;
}
/* 鼠标点击链接,但是不松手的时候(激活) */
a:active {
color: black;
}
/* 输入框获取焦点时 */
input:focus {
background-color: palegoldenrod;
}
CSS常用属性
- 字体相关属性:可以用CSS设置的四种主要的字体属性:family(字体族)、style(样式)、size(大小)和weight(粗细)。字体一般直接设置在body上用于控制整个页面。
- font-family:设置文本的字体
- font-size:设置文本的字体大小
- font-style:设置文本的字体样式(正常normal、斜体italic、倾斜oblique)
- font-weight:设置文本的字体粗细
<style>
div {
height: 50px;
width: 50px;
}
#cqz {
/* 设置文本的字体系列:楷体、宋体等(不推荐汉字,推荐使用英文)。可以设置多个,当前一个浏览器不支持的时候,用第二个,以此类推 */
font-family: "楷体";
/* 设置文本的字体大小:可以使用px、em、百分比。不同浏览器字体默认大小不同,所以必须设定文字默认值。h1等标题标签需要单独指定字体大小。 */
font-size: 16px;
/* 设置文本为斜体:默认normal是正常字体 */
font-style: italic;
/* 设置文本粗细:主要是normal和bold这两个值。blod为加粗。或者可以使用数字(注意不要有单位) */
font-weight: 700;
/* 复合写法:前两个可以省略,后两个不能省略。 */
font: font-style font-weight font-size font-family;
}
</style>
<body>
<div id="cqz">曹</div>
</body>
- color:文本颜色。
- text-align:设置文本的水平对齐方式。左对齐(left)、右对齐(right)、居中(center)和两端对齐(justify)。
- line-height:设置文本垂直的对齐方式(行高)【实现原理:行高由文字高度 + 上下空隙组成,当父类有高度,则会自动填满上下空隙,保证文字居中。】
- word-spacing:设置文本字间距
- letter-spacing:设置单词和字符间距
- text-transform:设置文本转换。无、首写字母大写、大写和小写。
- text-decoration:设置文本装饰。下划线、删除线、上划线、闪烁等。
- text-indent:设置首行文本缩进距离。
#cqz {
/* 设置文本颜色(具体设置方式见下文CSS中颜色定义) */
color: #00f0ff;
/* 设置文本水平对齐方式:左对齐(left)、右对齐(right)、居中(center)和两端对齐(justify)。 */
text-align: center;
/* 设置文本垂直对齐方式(设置行高,当行高与父容器的高度相同时且文字仅有一行,则文本垂直居中) */
line-height: 100px;
/* 设置文本装饰:下划线(underline)、删除线(line-through)、上划线(overline)、闪烁(blink)等。注意:<a>标签默认值为underline,想要去除<a>标签的下划线,就将text-decoration设置为none */
text-decoration: line-through;
/* 设置文本缩进:一般设置为em,代表当前文字大小的距离,是一个相对单位 */
text-indent: 2em;
}
a {
/* 去除<a>标签的默认下划线 */
text-decoration: none;
}
- CSS中颜色定义:W3C标准化组织定义的标准的16中颜色的名称分别是:aqua(水蓝)、black(黑)、blue(蓝)、fuchsia(紫红)、gray(灰)、green(绿)、lime(绿黄)、maroon(酱紫)、navy(深蓝)、olive(橄榄绿)、ourple(紫)、red(红)、silver(银)、teal(青)、white(白)、和yellow(黄)。还可以使用十六进制RGB:#ff0000、#00ff00、#0000ff等。还可以使用rgb函数【rgb(0,255,255)】
#cqz {
/* RGB函数 */
color: rgb(0, 255, 255);
/* 十六进制RGB */
color: #fff000;
/* W3C标准色 */
color: red;
}
- background-color:设置背景颜色
- background-image:设置背景图片
- background-repeat:设置背景图片重复/平铺方式
- background-position:设置背景图片定位
- background-attachment:设置背景图片是否固定或者随着页面的其余部分滚动
- background-size:设置背景图片大小【CSS3以前,背景图像大小由图像的实际大小决定】
background:复合写法。任意属性都可以省略。
<body>
<div class="cqz"></div>
</body>
<style>
* {
margin: 0;
padding: 0;
}
.cqz {
margin-top: 50px;
margin-left: 50px;
height: 1000px;
width: 1000px;
border: 1px solid red;
/* 设置背景颜色 */
background-color: rgb(0, 0, 0);
/* 设置背景图片:默认重复铺满盒子 */
background-image: url("../images/123.webp");
/* 设置背景图片重复平铺方式:
1.repeat 垂直方向和水平方向重复。【默认】
2.repeat-x 水平方向重复。
3.repeat-y 垂直方向重复。
4.no-repeat 背景图像将仅显示一次(不重复)。
*/
background-repeat: no-repeat;
/* 设置背景图片定位:一般建议小图标和超大图片使用背景进行设置而不是<img>
1.需要有两个值。
2.如果仅规定了一个关键词,那么第二个值将是center。
3.方位名词: top left center right(方位名词不区分设置顺序)
4.像素/百分比: 设置像素值时,第一个值是x轴,第二个值是y轴。
*/
/* background-position: center top; */
background-position: 50% 100%;
/* 设置背景图片大小:如果设置了图片大小,图片会被自动拉伸或压缩到设置的大小。 */
background-size: 1000px 1000px;
/* 设置背景图片是否固定或者随着页面的其余部分滚动
1.scroll 默认值。背景图像会随着页面其余部分的滚动而移动。
2.fixed 当页面的其余部分滚动时,背景图像不会移动。
*/
background-attachment: fixed;
/* 复合写法:支持省略任意属性 */
/* background: #00FF00 url(bgimage.gif) no-repeat fixed top; */
}
</style>
元素显示模式
- 元素显示模式:在CSS中,根据元素显示模式的不同元素标签被分为了两类。行内元素(inline-level)、块级元素(block-level)。
- 行内元素:行内元素就是不会独占一行的元素,行内元素不能设置宽度和高度。它的宽度和高度会随着文本的改变而该改变。内部不能填写块级元素。例如:<span> <buis> <strong> <em> <ins> <del>等;
- 块级元素:块级元素就是会独占一行的元素,块级元素可以设置宽度和高度,如果没有设置宽度和高度,默认父元素一样宽,高度则为0。例如:<p> <div> <h> <ul> <ol> <dl> <li> <dt> <dd>等。
- 行内块级元素:由于我们有的时候不仅要设置元素的宽度和高度,同时也希望元素不会独占一行,这时就出现了行内块级元素(inline-block)。同一行的行内块级元素会有空白间隔。例如<img><input><td>等。
- 转换CSS元素的显示模式:设置元素的display属性。inline(行内)、block(块级)、inline-block(行内块级)
<body>
<span>我是行内元素,被转换成了块级元素</span>
<div>我是块级元素,被转换成了行内元素</div>
<img src="../images/1.webp"><img src="../images/1.webp">
</body>
<style>
* {
margin: 0;
padding: 0;
}
/* 将span转换为块级元素 */
span {
display: block;
background-color: red;
width: 400px;
height: 200px;
}
/* 将div转换为行内块级元素 */
div {
display: inline-block;
background-color: green;
width: 300px;
height: 300px;
}
/* 将img转换为块级元素 */
img {
display: block;
width: 200px;
}
</style>
CSS三大特性
- CSS三大特性:CSS的三个特性是指层叠性、继承性以及优先级。
- 层叠性:层叠性是在HTML中对于同一个元素可以有多个CSS样式存在,当有相同权重的样式存在时,会根据这些样式书写的先后顺序来决定,处于最后面的CSS样式将会覆盖前面的CSS样式。
- 继承性:子标签会继承父标签的某些样式,如文本颜色和字号。想要设置一个可继承的属性,只需将它应用于父元素即可。合理使用继承可以简化代码,降低CSS样式的复杂性。对于字体、字号、颜色、行距等文本类属性具有继承性,都可以在body中统一设置,然后影响文档中所有文本。但是,并不是所有的CSS属性都可以继承,如边框、外边距、内边距、背景、定位、元素高度等与块级元素相关的属性都不具有继承性。
- 优先级:在复杂CSS样式表,经常出现两个或多个不同样式规则应用在同一元素上,这时到底采用哪个样式呢?这就是典型的CSS优先级问题。计算优先级有如下规则:继承 < 元素选择器 < 类选择器/伪类选择器 < ID选择器 < 行内样式 < !important
- 继承样式的权重为0:在嵌套结构中,无论父元素样式权重多大,子元素继承时,应用在子元素上的权重都为0,即子元素定义的样式会覆盖所有继承来的样式。
- 行内样式优先:应用style属性的元素,其行内样式的权重非常高,可以理解为远大于100。总之,他拥有比上面提高的选择器都大的优先级。
- 就近原则:权重相同时,CSS遵循就近原则。也就是说靠近元素的样式具有最大的优先级,或者说排在最后的样式优先级最大。
- !important命令:CSS定义了一个!important命令,该命令被赋予最大的优先级。也就是说不管权重如何以及样式位置的远近,!important都具有最大优先级。
- 权重会叠加,但是永远不会进位。(下面讲解权重叠加问题)
<style>
div {
height: 100px;
/* 层叠性:该属性会被同权重CSS覆盖 */
width: 50px;
margin-left: 50px;
border: black 1px solid;
/* 继承性:该属性会被子标签继承 */
font-size: 20px;
/* 继承性:该属性会被子标签覆盖 */
font-family: "楷体";
}
div {
/* 层叠性:该属性会覆盖上方的同权重CSS */
width: 60px;
}
p {
font-family: "微软雅黑";
}
</style>
<body>
<div>
<p>曹老三</p>
</div>
</body>
- 权重叠加问题:每种选择器的权重见下方表格。样式继承的权重为0,复合选择器使权重叠加,权重之间不能越界,11个类也没有id的权重大
<body>
<div class="father" id="fatherid">
<div class="child1" id="child1Id">孩子1</div>
</div>
</body>
<style>
* {
margin: 0;
padding: 0;
/* 权重为0 */
background-color: pink;
}
.child1 {
/* 权重为0010 */
background-color: red;
}
.father .child1 {
/* 权重为0020 */
background-color: black;
}
#fatherid .child1 {
/* 权重为0110 */
background-color: green;
}
#child1Id {
/* 权重为0100 */
background-color: wheat;
}
#fatherid #child1Id {
/* 权重为0200 */
background-color: greenyellow;
}
.child1 {
/* 权重为+∞ */
background-color: hotpink !important;
}
</style>