层叠样式表 (Cascading Style Sheets).
CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离.
基本的语法格式
选择器 + {一条至N条声明}
;
区分键值对使用 :
区分键和值<style>
p {
/* 设置字体颜色 */
color: red;
/* 设置字体大小 */
font-size: 30px;
}
style>
<p>hellop>
写在 style 标签中. 嵌入到 html 内部.
理论上来说 style 放到 html 的哪里都行. 但是一般都是放到 head 标签中
<html>
<head>
<meta charset="utf-8">
<style>
/* 被style标签包围的范围是CSS环境,可以写CSS代码 */
/* 标签样式表 */
p{
color:red;
}
style>
head>
<body>
<p>这里是段落一p>
<p>这里是段落二p>
body>
html>
通过 style 属性, 来指定某个标签的样式.
只适合于写简单样式. 只针对某个标签生效.
缺点: 不能写太复杂的样式.
这种写法优先级较高, 会覆盖其他的样式
.
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
/* 被style标签包围的范围是CSS环境,可以写CSS代码 */
/* 标签样式表 */
p{
color:red;
}
style>
head>
<body>
<p style="font-size:60px;font-weight:bolder;color:yellow;">HELLOspan>p>
body>
html>
实际开发中最常用的方式.
<link rel="stylesheet" href="[CSS文件路径]">
CSS/引入方式.css
/* 标签样式表 */
p{
color:red;
}
引入方式.html
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="CSS/引入方式.css">
head>
<body>
<p >HELLOspan>p>
body>
html>
关于缓存:
这是计算机中一种常见的提升性能的技术手段.
网页依赖的资源(图片/CSS/JS等)通常是从服务器上获取的. 如果频繁访问该网站, 那么这些外部资源 就没必要反复从服务器获取. 就可以使用缓存先存起来(就是存在本地磁盘上了). 从而提高访问效率.
可以通过 ctrl + F5 强制刷新页面, 强制浏览器重新获取 css 文件.
特点:
<html>
<head>
<meta charset="utf-8">
<style>
p {
color: red;
}
div {
color: green;
}
style>
head>
<body>
<p >HELLOp>
<div>DIVdiv>
body>
html>
id和class是HTML元素中两个最基本的公共属性。
特点:
<html>
<head>
<meta charset="utf-8">
<style>
.blue {
color: blue;
}
style>
head>
<body>
<div class="blue">咬人猫div>
<div>咬人猫div>
body>
html>
语法细节
注意: 一个标签可以同时使用多个类名 这样做可以把相同的属性提取出来, 达到简化代码的效果.
<html>
<head>
<meta charset="utf-8">
<style>
.box {
width: 200px;
height: 150px;
}
.red {
background-color: red;
}
.green {
background-color: green;
}
style>
head>
<body>
<div class="box red">div>
<div class="box green">div>
<div class="box red">div>
body>
html>
元素的id属性
id属性被赋予了标识页面元素的唯一身份(id是唯一的,虽然在html不唯一也不会报错)。如果一个页面出现了多个相同id属性取值,CSS选择器或者JavaScript就会因为无法分辨要控制的元素而最终报错。
<html>
<head>
<meta charset="utf-8">
<style>
#ha {
color: red;
}
style>
head>
<body>
<div id="ha">蛤蛤蛤div>
body>
html>
使用 * 的定义, 选取所有的标签.
* {
color: red;
}
页面的所有内容都会被改成 红色 .
不需要被页面结构调用.
又叫包含选择器. 选择某个父元素中的某个子元素
或者孙子元素
.
元素1 元素2 {样式声明}
<html>
<head>
<meta charset="utf-8">
<style>
ol li {
color: red;
}
style>
head>
<body>
<ul>
<li>aaali>
<li>bbbli>
<li>cccli>
ul>
<ol>
<li>dddli>
<li>eeeli>
<li>fffli>
ol>
body>
html>
和后代选择器类似, 但是只能选择子标签.
元素1>元素2 { 样式声明 }
<div class="two">
<a href="#">链接1a>
<p><a href="#">链接2a>p>
div>
.two a {
color: red;
}
后代选择器的写法, 会把链接1 和 2 都选中
.two>a {
color: red;
}
子选择器的写法, 只选链接 1
用于选择多组标签 (集体声明)
元素1, 元素2 { 样式声明 }
链接伪类选择器
注意事项
:force 伪类选择器
此时被选中的表单的字体就会变成红色
每一个 HTML 元素就相当于是一个矩形的 “盒子”
这个盒子由这几个部分构成
内容区
内容区有3个属性:width、height和overflow。使用width和height属性可以指定盒子内容区的高度和宽度。在这里注意一点,width和height这两个属性是针对内容区而言,并不包padding部分。当内容信息太多时,超出内容区所占范围时,可以使用overflow溢出属性来指定处理方法。对于overflow这个属性,我们在后面会详细讲解到。
内边距
关于内边距的属性有5种,即padding-top、padding-bottom、padding-left、padding-right以及综合了以上4个方向的简洁内边距属性padding。使用这5种属性可以指定内容区域各方向边框之间的距离
边框
边框属性有border-width、border-style、border-color以及综合了3类属性的快捷边框属性border。其中border-width指定边框的宽度,border-style指定边框类型,border-color指定边框的颜色。“border-width:1px;border-style:solid;border-color:gray;”等价于“border:1px solid gray;”。
外边距
外边距使得元素之间不必紧凑地连接在一起,是CSS布局的一个重要手段。外边距的属性也有5种,即margin-top、margin-bottom、margin-left、margin-right以及综合了以上4个方向的简洁内边距属性margin。同时,CSS允许给外边距属性指定负数值,当指定负外边距值时,整个盒子将向指定负值的相反方向移动,以此可以产生盒子的重叠效果。
标准 w3c 盒子模型
的范围包括 margin、border、padding、content,并且 content 部分不包含其他部分。
content = height + width
ie 盒子模型
的范围也包括 margin、border、padding、content,和标准 w3c 盒子模型不同的是:ie 盒子模型的 content 部分包含了 border 和 pading
content = height + width + border + padding
基础属性
粗细: border-width
样式: border-style, 默认没边框. solid 实线边框 dashed 虚线边框 dotted 点线边框
颜色: border-color
支持简写, 没有顺序要求
<div>testdiv>
div {
width: 500px;
height: 250px;
border-width: 10px;
border-style: solid;
border-color: green;
}
边框会撑大盒子
可以看到, width, height 是 500*250, 而最终整个盒子大小是 520 * 270. 边框10个像素相当于扩大了大小
通过 box-sizing 属性可以修改浏览器的行为, 使边框不再撑大盒子.
* {
box-sizing: border-box;
}
支持简写, 没有顺序要求
border: 10px solid green;
可以改四个方向的任意边框.
border-top/bottom/left/right
padding 设置内容和边框之间的距离.
默认内容是顶着边框来放置的. 用 padding 来控制这个距离
test
div {
height: 200px;
width: 300px;
padding-top: 5px;
padding-left: 10px;
background-color: green;
}
我们发现在左边和上面有对应的边距
整个盒子的大小从原来的 300 * 200 => 310 * 205. 说明内边距也会影响到盒子大小(撑大盒子).
使用 box-sizing: border-box 属性也可以使内边距不再撑大盒子. (和上面 border 类似)
复合写法
padding: 5px; 表示四个方向都是 5px
padding: 5px 10px; 表示上下内边距 5px, 左右内边距为 10px
padding: 5px 10px 20px; 表示上边距 5px, 左右内边距为 10px, 下内边距为 20px
padding: 5px 10px 20px 30px; 表示 上5px, 右10px, 下20px, 左30px (顺时针)
控制盒子和盒子之间的距离.
"first">蛤蛤
呵呵
div {
background-color: red;
width: 200px;
height: 200px;
}
.first {
margin-bottom: 20px;
}
复合写法
margin: 10px; // 四个方向都设置
margin: 10px 20px; // 上下为 10, 左右 20
margin: 10px 20px 30px; // 上 10, 左右 20, 下 30
margin: 10px 20px 30px 40px; // 上 10, 右 20, 下 30, 左 40
浏览器会给元素加上一些默认的样式, 尤其是内外边距. 不同浏览器的默认样式存在差别.
为了保证代码在不同的浏览器上都能按照统一的样式显示, 往往我们会去除浏览器默认样式.
使用通配符选择器即可完成这件事情.
*{
marign: 0;
padding: 0;
}
在 CSS 中, HTML 的标签的显示模式有很多.
此处只重点介绍两个:
常见的元素:
特点:
独占一行
特点:
不独占一行, 一行可以显示多个
使用 display 属性可以修改元素的显示模式.
可以把 div 等变成行内元素, 也可以把 a , span 等变成块级元素.
css的布局很麻烦,但是我知道一些简单的布局方式就行,满足一些简单的应用
在弹性布局中,任何元素均已不存在行内元素(inline)和块级元素(block)的区分,只能说它们都已经变成弹性盒子中的子元素,或者容器成员(flex item),它们可以自由设置大小,但整体上是受整个容器(flex container)所控制的。
<div>
<span>1span>
<span>2span>
<span>3span>
div>
此时看到的效果为
当我们给 div 加上 display:flex 之后, 效果为
此时看到, span 有了高度, 不再是 “行内元素了”
再给 div 加上 justify-content: space-around; 此时效果为
flex 布局的本质是给父盒子添加 display:flex 属性, 来控制子盒子的位置和排列方式.
基础概念:
当父元素设置为 display: flex 之后, 子元素的 float, clear, vertical-align 都会失效.
justify-content
设置主轴上的子元素排列方式.
属性取值
值 | 描述 |
---|---|
flex-start | 默认值。项目位于容器的开头。 |
flex-end | 项目位于容器的结尾。 |
center | 项目位于容器中央。 |
space-between | 项目在行与行之间留有间隔。 |
space-around | 项目在行之前、行之间和行之后留有空间。 |
<div>
<span>1span>
<span>2span>
<span>3span>
<span>4span>
<span>5span>
div>
未指定 justify-content 时, 默认按照从左到右的方向布局
设置 justify-content: flex-end , 此时元素都排列到右侧了.
设置 jutify-content: center , 此时元素居中排列
设置 justify-content: space-around;平分了剩余空间.
设置 justify-content: space-between;先两边元素贴近边缘, 再平分剩余空间
align-items
设置侧轴上的元素排列方式
在上面的代码中, 我们是让元素按照主轴的方向排列, 同理我们也可以指定元素按照侧轴方向排列
属性值
值 | 描述 |
---|---|
stretch | 默认。项目被拉伸以适合容器。 |
center | 项目位于容器的中央。 |
flex-start | 项目位于容器的开头。 |
flex-end | 项目位于容器的末端。 |
baseline | 项目被定位到容器的基线。 |
stretch(拉伸):
这个是 align-content 的默认值. 意思是如果子元素没有被显式指定高度, 那么就会填充满父元素的高度
1
2
3
设置字体font-family
body {
font-family: 微软雅黑;
font-family: 'Microsoft YaHei';
}
设置字体大小font-size
p {
font-size: 20px;
}
设置字体粗细font-weight
p {
font-weight: bold;
font-weight: 700;
}
文本颜色 color
认识 RGB
我们的显示器是由很多很多的 “像素” 构成的. 每个像素视为一个点, 这个点就能反映出一个具体的颜色.
我们使用 R (red), G (green), B (blue) 的方式表示颜色(色光三原色). 三种颜色按照不同的比例搭配, 就能
混合出各种五彩斑斓的效果.计算机中针对 R, G, B 三个分量, 分别使用一个字节表示(8个比特位, 表示的范围是 0-255, 十六进制表示为 00-FF).数值越大, 表示该分量的颜色就越浓. 255, 255, 255 就表示白色; 0, 0, 0 就表示黑色.
color: red;
color: #ff0000;
color: rgb(255, 0, 0);
color 属性值的写法:
文本对齐 text-align
不光能控制文本对齐, 也能控制图片等元素居中或者靠右
text-align: [值];
文本装饰 text-decoration
text-decoration: [值];
文本缩进 text-indent
控制段落的 首行 缩进 (其他行不影响)
text-indent: [值]
行高 line-height
line-height: [值];
行高指的是上下文本行之间的基线距离
HTML 中展示文字涉及到这几个基准线
顶线
中线
基线
底线
其实基线之间的距离 = 顶线间距离 = 底线间距离 = 中线间距离
内容区:底线和顶线包裹的区域,也就是深灰色背景区域
行高 = 上边距 + 下边距 + 字体大小
行高等于元素高度, 就可以实现文字居中对齐
<div class="line-height">
<div class="two">
文本垂直居中
div>
div>
背景颜色 background-color
background-color: [指定颜色]
默认是 transparent (透明) 的. 可以通过设置颜色的方式修改
背景图片 background-image
background-image: url(...);
比 image 更方便控制位置(图片在盒子中的位置)
背景平铺 background-repeat
background-repeat: [平铺方式]
默认是 repeat.
背景颜色和背景图片可以同时存在. 背景图片在背景颜色的上方.
边框的椭圆型 border-radius
通过 border-radius 使边框带圆角效果.
length 是内切圆的半径. 数值越大, 弧线越强烈
border-radius: length;