上一篇文章,我们介绍了HTML语言的基础用法后,今天我们继续学习CSS的基础语法。
CSS,又称为层叠样式表(Cascading Style Sheets)。CSS能够对网页中元素位置的排版进行像素级精准控制,实现美化页面的效果,能够做到页面的样式和结构分离。
选择器 + (1条或多条声明)
- 选择器决定了将对谁进行修改(美化)
- 声明将决定修改什么?(怎么进行美化)
- 声明的属性是由键值对构成
<style>
选择器 {
声明
设置字体颜色
color: red;
}
style>
如上,就是一个简单的CSS代码,CSS代码是直接放在HTML代码中,还是另外建一个CSS的文件?
二者都是可以的。
内部样式
直接将CSS代码放到HTML文件中。
<style>
/* 这里的p,就是一个标签选择器,选中的是该文件中所有的p标签*/
p {
/* color,将字体颜色改为red*/
color: red;
}
style>
<p>
这是一段HTML代码
p>
style中,是CSS的代码,注释框则是/**/这样的。
p标签中,属于HTML代码,注释框是 。
外部样式
将所有的CSS代码,存储在CSS的文件中,在HTML中直接引用这个CSS文件。
/* 这是CSS文件,不需要在写style标签了*/
p {
color: red;
}
引用:
行内样式
行内样式,用的比较少,也比较简单。直接将CSS代码写在HTML的开始标签中。
<p style="color:red">
这是一个HTML文件
p>
这种写的话,将只对当前这个p标签产生作用,而不是全部的p标签。
思考:
<style> p { color: green; } style> <p style="color:red"> 这是一个HTML文件 p>
这段代码运行后,p标签里面的字体是什么颜色的?
答:红色。行内样式所应用的范围更小,所有它的优先级最高。
还需要注意的是,在使用外部形式的时候,我们所写的代码,在浏览器中,不一定能够直接生效。这涉及到一些缓存的文件。我们平时在第一次打开百度浏览网页时,将会向百度服务器发出请求,然后服务器做出响应,服务器将返回一些网页的资源。
第二次打开百度网页时,此时本地电脑的硬盘中,是存储了上次百度网页的资源文件的,向服务器发出请求时,会判断硬盘中的文件名和服务器里面的文件名是否相同,如果相同,就不会再次发送网页资源,直接用硬盘里的即可,如果不相同,才会重新发送网页资源。这样的一种机制,就有可能导致后续更新的CSS文件,并没有加载到浏览器中,所以在每次更新网页后,会在文件名里面添加版本号,表示这是一个新的网页文件。下次服务器判断时,不相同,就会将新的文件发送出去。
如果不对新的网页文件重命名,浏览器加载不出来,我们就需要按Ctrl + f5,进行强制刷新页面,此时就会直接让浏览器发送新的网页文件资源。
基础选择器,由单个选择器构成的。有标签选择器、类选择器、id选择器、通配符选择器。
标签选择器
顾名思义,HTML中的标签名,在CSS中,都可以用作选择器。像上文中的p标签,就是使用的标签选择器。这样的好处就是能够快速选出同一类型的标签。
<style>
/* 选出所有的p标签*/
p {
color: red;
}
/* 选出所有的div标签*/
div {
color: green;
}
style>
<p>
这是一个p标签
p>
<div>
这是一个div标签
div>
类选择器
在学HTML时,说到过一个HTML属性:class。此时我们也可以用这个属性,来作为选择器。这样的话,我们可以让多个不同类型的标签,使用同一份CSS代码。
<style>
.cat {
color: orange;
}
style>
<div class="cat">
这是一只猫
div>
语法细节:
示例
<style>
.cat {
color: red;
}
.cat-size {
width: 200px;
height: 150px;
}
style>
<div class="cat cat-size">
这是一只大橘色的猫
div>
id选择器
和类选择器相似。id选择器使用#,而类选择器使用.。此处的id和HTML中某个元素的id值相同。id是唯一的,不能被多个标签使用,这也是和类选择器最大的区别。
<style>
#ha {
color: red;
}
style>
<div id="ha">
这是一只猫
div>
通配符选择器
使用*的定义,选取所有的标签。
<style>
* {
color: red;
}
style>
此时页面中的所有内容都会被改成红色的。这个是不需要被页面结构调用的。
小结:
作用 | 特点 | |
---|---|---|
标签选择器 | 能够选出所有相同的标签 | 不能够差异化的选择 |
类选择器 | 能够选出一个或多个标签 | 可以根据需求灵活的变化 |
id选择器 | 能选出一个标签 | 同一个id在一个HTML中只能出现一次 |
通配符选择器 | 选出所有的标签 | 特殊情况下使用,比如除去内外边距 |
复合选择器,将多种基础选择器综合运用起来。有后代选择器、子选择器、并集选择器、伪类选择器。
后代选择器
又称为包含选择器,选择某个父元素中的某个子元素。
父级元素 子级元素 {
样式声明
}
父元素和子元素之间用空格隔开。这样写,只会影响子级元素,不会影响到父级元素。
示例:把ol中的li修改颜色,不影响ul的li。
<style>
ol li {
color: red;
}
style>
<ol>
<li>这是ol中的li>
ol>
<ul>
<li>这是ul中的li>
ul>
上面说的子级元素,不一定是儿子,也可以是孙子元素,比如:
<style>
/* 第一种写法*/
ul li a {
color: red;
}
/* 第二种写法*/
ul a {
color: red;
}
style>
<ul>
<li>这是一个ul标签li>
<li>
<a href="#">这是一个a标签a>
li>
ul>
还可以使用任意基础选择器的组合(包括类选择器器,id选择器)
<style>
.one li a {
color: red;
}
style>
<ul class="one">
<li>这是一个ul标签li>
<li>
<a href="#">这是一个a标签a>
li>
ul>
子选择器
和后代选择器比较类似,但是这个是能选择儿子元素。
父元素>子元素{
样式声明
}
使用>号进行分割,并且只能选择亲儿子,不能选择孙子元素。
<style>
ul>a {
color: red;
}
style>
<ul>
<a href="#">这是第一个a标签a>
<li>
<a href="#">这是第二个a标签a>
li>
ul>
上诉代码中,如果使用子选择器,那么只会选中第一个a标签;如果使用后代选择器,那么会选中父级元素中的所有a标签。
并集选择器
用于选择多组标签,集体声明。
标签1,标签2 {
样式声明
}
每个标签之间用逗号进行分割,以上代码就表示同时选择了标签1和标签2。并集选择器的元素,建议竖着写,每个选择器独占一行。
<style>
h4,
div {
color: red;
}
style>
<h4>
这是一个标题
h4>
<div>
这是另外一个标题
div>
伪类选择器
伪类选择器有很多种,我们这里就只说两种常用的。
1、链接伪类选择器
用于操作a标签这样的链接。
a:link 选择未被访问过的链接
a:visited 选择已经被访问过的链接
a:hover 选择鼠标指针悬停上的链接
a:active 选择活动链接(鼠标按下,还没弹起)
<style>
/* 没访问过,字体变为红色*/
a:link {
color: red;
}
/*访问过后,字体变为橙色*/
a:visited {
color: orange;
}
/* 鼠标悬停上面,字体变为灰色*/
a:hover {
color: grey;
}
/* 鼠标按下,还没弹起*/
a:active {
color: blue;
}
style>
<a href="#">这是一个a标签a>
注意事项:
2、force伪类选择器
选取获取焦点的input表单元素。
<style>
div input:focus {
color: red;
}
style>
<div>
<input type="text">
<input type="text">
div>
如上代码,将鼠标聚焦在输入框,此时输入框里面的数据就会变成红色。
复合选择器小结:
作用 | 注意事项 | |
---|---|---|
后代选择器 | 选择后代元素 | 可以孙子元素 |
子选择器 | 选择子元素 | 只能选择亲儿子 |
并集选择器 | 选择相同样式的元素 | 代码重用 |
链接伪类选择器 | 设置不同状态的链接 | 重点掌握hover的写法 |
focus伪类选择器 | 选择被选中的元素 | 重点掌握input:focus |
以上全部只是CSS2标准中支持的选择器,CSS3中还补充了一些。
CSS的属性非常多,我们这里就只介绍一些常用的属性。更多属性,请点击这里。
font-family:设置字体样式,比如微软雅黑、宋体、小宋等等。
<style>
.family .one {
font-family: 'Microsoft YaHei';
}
.family .one {
font-family: '宋体';
}
style>
<div class="family">
<div class="one">
这是微软雅黑
div>
<div class="two">
这是宋体
div>
div>
font-size:设置字体的大小,单位是px。
<style>
.fSize .one {
font-size: 20px;
}
.fSize .two {
font-size: 16px;
}
style>
<div class="fSize">
<div class="one">
大一点
div>
<div class="two">
小一点
div>
div>
font-weight:设置的参数可以是单词,也可以是数值。
<style>
.fWeight .one {
/* 这里没有单位*/
font-weight: 700;
}
.fWeight .two {
font-weight: normal;
}
style>
<div class="fWeight">
<div class="one">
这是粗体
div>
<div class="two">
这是细体
div>
div>
前面在介绍HTML时,也说到过倾斜字用em标签和i标签,在CSS中也有相应的设置倾斜字体的代码。
font-style:设置参数有两个,italic(倾斜),normal(正常)。
<style>
.fStyle .one {
font-style: italic;
}
style>
<div class="fStyle">
<em>
倾斜字体1
em>
<div class="one">
倾斜字体2
div>
div>
color: red;
color: #ff0000;
color: rgb(255, 0, 0);
设置文本颜色,有以上三种形式,最常用的可能就是第二种。
第二种写法,会有一个省略。如果两两相同的数值,会进行缩写。比如ff0000,会缩写成f00。
<style>
.fColor div {
color: red;
}
style>
<div class="fColor">
<div>
这是红色的字体
div>
div>
控制文本水平对齐:text-align。
text-align: center; /* 居中对齐*/
text-align: left; /* 左对齐*/
text-align: right; /* 右对齐*/
<style>
.tAlign .one {
text-align: left;
}
.tAlign .two {
text-align: center;
}
.tAlign .three {
text-align: right;
}
style>
<div class="tAlign">
<div class="one">
左对齐
div>
<div class="two">
居中对齐
div>
<div class="three">
右对齐
div>
div>
text-decoration:参数值有underline(下划线)、overline(上划线)、line-through(删除线)、none(啥也没有)。
none,常常用于抹去a标签自带的下划线。
<style>
.tDecoration .one {
text-decoration: none;
}
.tDecoration .two {
text-decoration: line-through;
}
.tDecoration .three {
text-decoration: underline;
}
.tDecoration .four {
text-decoration: overline;
}
style>
<div class="tDecoration">
<a href="#" class="one">
抹去下划线
a>
<div class="two">
删除线
div>
<div class="three">
下划线
div>
<div class="four">
上划线
div>
div>
text-indent:控制段落的首行缩进。
<style>
.tIndent p {
text-indent: 2em; /* 缩进2个文字*/
}
style>
<div class="tIndent">
<p>
这是一段文字说明
p>
div>
行高指的是上下文本行之间的基线距离。
HTML中展示文字涉及到这几个基准线:
line-height:行高=上边距+下边距+字体大小。上下边距是相等的
行高也可以取normal等值,这个取决于浏览器的时间,Chrome的normal是21px。
<style>
.lHeight .one {
line-height: 40px; /* 行高*/
font-size: 16px; /* 字体大小*/
}
style>
<div class="lHeight">
<div>
上一行
div>
<div class="one">
中间行
div>
<div>
下一行
div>
div>
还有,如果元素的高度等于行高,那么就可以实现垂直居中对齐。
<style>
.lHeight2 div {
line-height: 100px;
height: 100px;
}
style>
<div class="lHeight2">
<div>
居中对齐
div>
div>
background-color:可以上面那三种设置颜色的形式,也可以实现透明(transparent)。
默认是transparent的,可以通过设置颜色的方式修改
<style>
body {
background-color: #f3f3f3;
}
.bgc .one {
background-color: red;
}
.bgc .two {
background-color: #0f0;
}
.bgc .three {
/* 背景透明 */
background-color: transparent;
}
style>
<div class="bgc">
<div class="one">红色背景div>
<div class="two">绿色背景div>
<div class="three">透明背景div>
div>
background-image:url();
这个比image更方便控制图片在盒子中的位置。
注意:URL不能遗漏了,URL里面可以是绝对路径,也可以是相对路径。URL里面可以加引号,也可以不加引号。
<style>
.bgi .one {
height: 300px;
background-image: url(rose.png);
}
style>
<div class="bgi">
<div class="one">
背景图片
div>
div>
平铺指的是:假设背景是300px,现在一张图片是100px,则平铺的话就是将这图片一张张摆放,直至将全部300px的背景铺盖完。
background-repeat:
重要取值:
默认的就是repeat。
背景颜色和背景图片同时存在时,图片会在背景颜色的上面。
<style>
.bgi .one {
height: 300px;
background-image: url(/image/wallhaven-r7krmq.jpg);
background-repeat: no-repeat;
}
.bgi .two {
height: 300px;
background-image: url(/image/wallhaven-r7krmq.jpg);
background-repeat: repeat-x;
}
.bgi .three {
height: 300px;
background-image: url(/image/wallhaven-r7krmq.jpg);
background-repeat: repeat-y;
}
style>
<div class="bgi">
<div class="one">
不平铺
div>
<div class="two">
水平平铺
div>
<div class="three">
垂直平铺
div>
div>
background-position:x y;
参数有三种风格:
<style>
.bgp .one {
height: 300px;
background-image: url(/image/wallhaven-r7krmq.jpg);
background-repeat: no-repeat;
background-position: center;
}
style>
<div class="bgp">
<div class="one">
背景居中
div>
div>
注意:
background-size:length、percentage、cover、contain。
<style>
.bgs .one {
height: 300px;
background-image: url(/image/wallhaven-r7krmq.jpg);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
style>
<div class="bgs">
<div class="one">
背景尺寸
div>
div>
特别注意体会contain和cover的区别
。
可以看cover是完全装满了,contain的上方还是有一些白边。
通过border-radius可以使边框带圆角效果。
border-radius: length;
length 是内切圆的半径,数值越大,弧线越明显。
<style>
.around {
width: 200px;
height: 100px;
border: 2px solid green;
border-radius: 10px;
}
style>
<div class="around">
这是一个圆角矩形
div>
生成圆形,常见的比如某些网站的个人头像就是圆形的,我们只需要设置border-radius的值等于正方形宽度的一半即可。
<style>
.around {
width: 200px;
height: 200px;
border: 2px solid green;
border-radius: 100px;
}
style>
<div class="around">
这是一个圆形
div>
border-radius还可以展开写,也就是单独写左上角-右上角等等。
border-radius: 10px 20px 30px 40px;
/* 等价于如下*/
border-top-left-radius: 10px;
border-top-right-radius: 20px;
border-bottom-right-radius: 30px;
border-bottom-left-radius: 40px;
在CSS中,HTML的标签的显示模式有很多。我们这里就只重点介绍两个:
常见的块级元素有
h1-h6、p、div、ul、ol、li……
特点
注意
<p>
<div>
p标签里面不能放块级元素
div>
p>
常见的行内元素有
a、strong、b、em、i、del、s、ins、u、span……
特点
注意
行内元素和块级元素的区别
可以使用display属性修改元素的显示模式(行内和块级)
也就是可以把行内元素转换为块级元素,把块级元素转换为行内元素。
每一个HTML元素就相当于一个矩形的“盒子”。
这个盒子由这几个部分构成
基础属性
<style>
div {
width: 200px;
height: 100px;
border-width: 10px;
border-color: red;
border-style: solid;
}
style>
<div>
这是一块区域
div>
还可以这样简写,没有顺序:
border: 1px solid red;
也还可以改四个方向的任意边框
border-top/bottom/left/right
还需要注意的一点就是,实际边框的大小不止是设置的大小,也就是说实际的边框会比设置的边框要大一点。
就类似于买房子,会涉及到建筑面积和实用面积的概念。
可以通过box-sizing属性可以修改浏览器的行为,使边框不再撑大盒子。
* {
box-sizing: border-box;
}
padding设置内容和边框之间的距离
可以给四个方向都加上内边距:
复合写法:
可以把多个方向的padding合并到一起。
padding: 5px; 表示四个方向都是5px
padding: 5px 10px; 表示上下内边距5px,左右内边距10px
padding: 5px 10px 20px; 表示上边距5px,左右边距10px,下内边距20px
padding: 5px 10px 20px 30px; 表示上5px,右10px,下20px,左30px
顺时针方向,上右下左。
控制盒子与盒子之间的距离。
也是可以给四个方向加上边距
复合写法:规则同padding一样
margin: 5px; 表示四个方向都是5px
margin: 5px 10px; 表示上下外边距5px,左右外边距10px
margin: 5px 10px 20px; 表示上外边距5px,左右外边距10px,下外边距20px
margin: 5px 10px 20px 30px; 表示上5px,右10px,下20px,左30px
块级元素水平居中
前提是指定宽度(如果不指定宽度,默认和父元素一致),把水平margin改为auto。
/*以下三种写法都是可以的*/
margin-left: auto; margin-right: auto;
margin:auto;
margin: 0 auto;
去除浏览器默认样式
浏览器会给元素加上一些默认的样式,尤其是内外边距,不同浏览器的默认样式存在差别。为了保证代码在不同浏览器上都能按照统一的样式显示,往往我们会去除浏览器的默认样式。
* {
margin: 0;
padding: 0;
}
flex布局基本概念。
flex布局的本质是给父盒子添加display: flex
属性,来控制子盒子的位置和排列方式。
基本概念
切记:当父元素设置为display:flex之后,子元素的float、clea、vertical-align都会失效。
常用属性
1、justify-content
设置主轴上的子元素排列方式。使用之前一定要确定好主轴是哪个方向,因为主轴是可以改动的,默认就是水平方向。
<style>
div {
height: 300px;
display: flex;
background-color: red;
}
div span {
background-color: blue;
width: 100px;
height: 100px;
justify-content: flex-start;
}
style>
<div class="justify">
<span>1span>
<span>2span>
<span>3span>
<span>4span>
<span>5span>
div>
以上这就是使用flex-start后的样子,span标签的元素都在容器的左边。其他的flex-center和flex-end都是类似的效果,一个中间,一个右边而已。这里就不细讲了。特别说明一下space-between和space-around二者的区别。
2、align-items
设置侧轴上的元素排列方式。
在上面的代码中,是按照主轴的方向进行排列的。也可以按侧轴的方向进行排列。
stretch,这个和justify-content的默认值一样,意思是如果子元素没有被显示的指定高度,就会默认的填充父元素的高度。
前面讲了水平居中justify-content: center
,垂直居中就可以用align-items: center
。
好了,本期更新就到此结束啦,我们下期再见吧!!!