浅谈前端的CSS
css指的是层叠样式表(Cascading Style Sheet),用于定义如何显示HTML元素
下面,我们就来简单的讲一下CSS的功能与用法
注释
css的注释用的是
/*这是注释*/
字体属性
字体属性可以控制字体的种类,大小,粗细,颜色等
我们就直接用代码展现(之前展示的已经被注释掉,可以一个一个把注释解除来尝试)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*非重点 哪种字体*/
/*body{*/
/*font-family: "Microsoft Yahei", "微软雅黑", "Arial", sans-serif */
/*}*/
/*字体的大小*/
/*span{*/
/*font-size: 17px;*/
/*}*/
/*字体的粗细*/
/*span{*/
/*font-weight: normal;*/
/*}*/
/*字体的颜色*/
span{
/*color: yellow;*/
/*color:#3333;*/
/*color: rgb(255,0,255);*/
color: rgba(255,0,255,0.5);
}
</style>
</head>
<body>
<span>我是span</span>
</body>
</html>
属性的引入方式
属性的引入方式分为行内样式和内部样式
行内式是在标记的style属性中设定CSS样式,但是不推荐大规模使用
内部样式则是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--内部样式-->
<style>
.a{
10px;
height: 20px;
background-color: yellow;
}
</style>
<link rel="stylesheet" href="b.css">
</head>
<body>
<!--行内样式-->
<div style=" 10px;height: 20px;background-color: red"></div>
<div class="a"></div>
<div class="b"></div>
</body>
</html>
基本选择器
元素选择器
p {color: "red";}
ID选择器
#i1 { background-color: red; }
类选择器
.c1 { font-size: 14px; }
p.c1 {color: red;}
注意:
样式类名不要用数字开头(有的浏览器不认)。
标签中的class属性如果有多个,要用空格分隔。
通用选择器
* { color: white; }
组合选择器
组合选择器分为儿子选择器,兄弟选择器以及后代选择器。顾名思义,如果将某个属性看做一个类,这个属性中的属性看做子类的话,组合选择器的作用就是进行筛选,选择特定的某个属性进行操作
儿子选择器
儿子选择器则是选择直接继承父亲的属性,对它进行操作
儿子选择器的语法操作是 > ,例如想要对class = a 下的div进行操作,则是 .a>div
具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.a>div{
background-image:url("1.jpg") ;
}
</style>
</head>
<body>
<div class="a">我是爸爸
<div class="b">我是儿子
<p class="b" >我是孙子</p>
</div>
</div>
</body>
</html>
值得注意的是,某些属性,比如对字体颜色的赋值,本身就是所有的后代都会继承,所以并没有什么卵用
兄弟选择器
兄弟选择器类似于儿子选择器,可以对同一级别的其他所有同类属性进行操作
他的用法是 span~.a,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
span~.a{
color: red;
}
</style>
</head>
<body>
<div>
<span>span</span>
<h1 class="a">h1</h1>
<h2 class="a">h2</h2>
<p>p</p>
<h4 class="a">h4</h4>
</div>
<p class="a">sdsd</p>
</body>
</html>
后代选择器
后代选择器则是可以对它的后代进行选择
方法为 div div 具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div div{
color: red;
}
</style>
</head>
<body>
<div id="b" class="c">asda
<div>我是第一个儿子</div>
<div class="a">我是第二个儿子
<div>我是孙子</div>
</div>
</div>
</body>
</html>
毗邻选择器
对相邻的属性进行操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
<style>
div+p{
color: red;
}
p
</style>
</head>
<body>
<div>
dasd
</div>
<p>ppppp</p>
<p>2ppp</p>
</body>
</html>
毗邻选择器
对相邻的属性进行操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
<style>
div+p{
color: red;
}
p
</style>
</head>
<body>
<div>
dasd
</div>
<p>ppppp</p>
<p>2ppp</p>
</body>
</html>
属性选择器
属性选择器主要用于选取带有指定属性的元素
比如 div[name="123"] 则是指定name=123 的div进行操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div[name="123"]{
color: red;
}
</style>
</head>
<body>
<div name="123"> div</div>
<div name="455">我是div</div>
<div>没有属性的div</div>
</body>
</html>
分组和嵌套
分组
当多个元素的样式相同的时候,我们没有必要重复地为每个元素都设置样式,我们可以通过在多个选择器之间使用逗号分隔的分组选择器来统一设置元素样式。
div, p { color: red; }
上面的代码为div标签和p标签统一设置字体为红色。
通常,我们会分两行来写,更清晰:
div, p { color: red; }
嵌套
多种选择器可以混合起来使用,比如:.c1类内部所有p标签设置字体颜色为红色。
.c1 p { color: red; }
伪类选择器
伪类选择器主要是作用于链接属性
/* 未访问的链接 */
a:link { color: #FF0000 }
/* 鼠标移动到链接上 */
a:hover { color: #FF00FF }
/* 选定的链接 */
a:active { color: #0000FF }
/* 已访问的链接 */
a:visited { color: #00FF00 }
/*input输入框获取焦点时样式*/
input:focus { outline: none; background-color: #eee; }
如果是已经访问过的链接,则如果不清除访问记录的话其余的都会没有用
为元素选择器
伪元素选择器一般分为3种,其中最常用的是 first-letter, before, after
first-letter
常用的给首字母设置特殊样式:
p:first-letter { font-size: 48px; color: red; }
before
/*在每个<p>元素之前插入内容*/ p:before { content:"*"; color:red; }
after
/*在每个<p>元素之后插入内容*/ p:after { content:"[?]"; color:blue; }
before和after多用于清除浮动。
选择器的优先级
选择器的优先级其实是按不同选择器的权重计算的
内联样式>id选择器>类选择器>元素选择器
label
label标签可以为input元素定义标注
label标签可以用for属性将label绑定到另一个元素上
当label和另一个input标签绑定之后,用鼠标点击label元素内的内容,会转到绑定的元素上
我们可以用代码进行实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<label for="a"> 姓名:</label>
<input type="text" id="a">
<label for="b">男</label>
<input type="radio" id="b" name="sex">
<label for="c">女</label>
<input type="radio" id="c" name="sex">
</form>
<label for="c">点我</label>
</body>
</html>
文字属性
文字对齐
text-align 属性规定元素中的文本的水平对齐方式。
值 | 描述 |
---|---|
left | 左边对齐 默认值 |
right | 右对齐 |
center | 居中对齐 |
justify | 两端对齐 |
文字装饰
text-decoration 属性用来给文字添加特殊效果。
值 | 描述 |
---|---|
none | 默认。定义标准的文本。 |
underline | 定义文本下的一条线。 |
overline | 定义文本上的一条线。 |
line-through | 定义穿过文本下的一条线。 |
inherit | 继承父元素的text-decoration属性的值。 |
常用的为去掉a标签默认的自划线:
a { text-decoration: none; }
首行缩进
将段落的第一行缩进 32像素:
p { text-indent: 32px; }
去除li标签的样式
list-style: none;
文字之间的距离
将文字的间距调整为5像素:
p {
letter-spacing: 5px;
}
代码展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*文字对齐方式*/
/*div{*/
/* 100px;*/
/*background: yellow;*/
/*text-align: center;*/
/*}*/
/*文字装饰*/
/*div{*/
/* 100px;*/
/*background: yellow;*/
/*!*text-decoration: underline;*!*/
/*!*text-decoration: overline;*!*/
/*text-decoration: line-through*/
/*}*/
/*a{*/
/*text-decoration: none;*/
/*}*/
/*li{*/
/*list-style: none;*/
/*}*/
/*缩进与字间距*/
/*p,div{*/
/*!*缩进*!*/
/*text-indent: 32px;*/
/*!*字间距*!*/
/*letter-spacing: 10px;*/
/*}*/
/*行高*/
div{
400px;
height: 200px;
background: yellow;
text-align: center;
line-height: 200px;
}
</style>
</head>
<body>
<div> 我是文字</div>
<a href="">adsasd</a>
<ul>
<li>123</li>
<li>123</li>
<li>123</li>
</ul>
<p>蓝蓝的天空我的爱</p>
<div>蓝蓝的天空我的爱</div>
</body>
</html>
背景属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*div{*/
/*height: 1000px;*/
/*background-color: green;*/
/*background-image: url("1.jpeg");*/
/*background-repeat: repeat;*/
/*}*/
div{
height: 100px;
100px;
background-image: url("1.jpeg");
background-position: 200px 200px
}
</style>
</head>
<body>
<div>
asdasdasdas
</div>
</body>
</html>
背景属性也可以支持简写
background:#336699 url('1.png') no-repeat left top;
边框
边框属性
- border-width
- border-style
- border-color
#i1 { border- 2px; border-style: solid; border-color: red; }
通常使用简写方式:
#i1 { border: 2px solid red; }
边框样式
值 | 描述 |
---|---|
none | 无边框。 |
dotted | 点状虚线边框。 |
dashed | 矩形虚线边框。 |
solid | 实线边框。 |
除了可以统一设置边框外还可以单独为某一个边框设置样式,如下所示:
#i1 { border-top-style:dotted; border-top-color: red; border-right-style:solid; border-bottom-style:dotted;border-left-style:none; }
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
height: 100px;
100px;
/*border: green solid 3px;*/
border:orange solid 3px;
border-radius:50%;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
用于控制HTML元素的显示效果。
值 | 意义 |
---|---|
display:"none" | HTML文档中元素存在,但是在浏览器中不显示。一般用于配合JavaScript代码使用。 |
display:"block" | 默认占满整个页面宽度,如果设置了指定宽度,则会用margin填充剩下的部分。 |
display:"inline" | 按行内元素显示,此时再设置元素的width、height、margin-top、margin-bottom和float属性都不会有什么影响。 |
display:"inline-block" | 使元素同时具有行内元素和块级元素的特点。 |
display:"none"与visibility:hidden的区别
visibility:hidden: 可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。
display:none: 可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
/*消失设成none*/
/*display: none;*/
/*display: inline;*/
}
/*span{*/
/*display: block;*/
/*height: 230px;*/
/* 1000px;*/
/*background-color: orange;*/
/*}*/
span{
200px;
height: 100px;
background-color: black;
display: inline-block;
}
.a{
400px;
height: 300px;
background-color: green;
/*display:none ;*/
visibility:hidden
}
.b{
400px;
height: 300px;
background-color: red;
display: inline-block;
}
/*.a,.b{*/
/*display: inline-block;*/
/*}*/
</style>
</head>
<body>
<div>123</div>
<span>1232323</span>
<span>1232323</span>
<div class="a">456</div>
<div class="b">789</div>
</body>
</html>
盒子模型
- margin: 用于控制元素与元素之间的距离;margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。
- padding: 用于控制内容与边框之间的距离;
- Border(边框): 围绕在内边距和内容外的边框。
- Content(内容): 盒子的内容,显示文本和图像。
margin外边距
.margin-test { margin-top:5px; margin-right:10px; margin-bottom:15px; margin-left:20px; }
推荐使用简写:
.margin-test { margin: 5px 10px 15px 20px; }
顺序:上右下左
常见居中:
.mycenter { margin: 0 auto; }
padding内填充
.padding-test { padding-top: 5px; padding-right: 10px; padding-bottom: 15px; padding-left: 20px; }
推荐使用简写:
.padding-test { padding: 5px 10px 15px 20px; }
顺序:上右下左
补充padding的常用简写方式:
-
提供一个,用于四边;
-
提供两个,第一个用于上-下,第二个用于左-右;
-
如果提供三个,第一个用于上,第二个用于左-右,第三个用于下;
-
提供四个参数值,将按上-右-下-左的顺序作用于四边;
浮动
在 CSS 中,任何元素都可以浮动。
浮动元素会生成一个块级框,而不论它本身是何种元素。
关于浮动的两个特点:
- 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
- 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。
三种取值
left:向左浮动
right:向右浮动
none:默认值,不浮动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.a,.b,.c{
250px;
height: 250px;
}
.a{
background-color: red;
float: left;
}
.b{
background-color: black;
float: right;
}
.c{
background-color: gold;
float: right;
}
.p{
border: gold solid 3px;
/*height: 200px;*/
}
.clear{
clear: both;
}
/*.clear:after{*/
/*content: "";*/
/*display: block;*/
/*clear: both;*/
/*}*/
</style>
</head>
<body>
<div class="p clear">
<div class="a">123</div>
<div class="b"></div>
<div class="c"></div>
<!--<div class="clear"></div>-->
</div>
</body>
</html>
overflow溢出属性
值 | 描述 |
---|---|
visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
hidden | 内容会被修剪,并且其余内容是不可见的。 |
scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
inherit | 规定应该从父元素继承 overflow 属性的值。 |
- overflow(水平和垂直均设置)
- overflow-x(设置水平方向)
- overflow-y(设置垂直方向)
定位
相对定位
relative(相对定位)
相对定位是相对于该元素在文档流中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档流空间。对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
注意:position:relative的一个主要用法:方便绝对定位元素找到参照物。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
div{
200px;
height: 200px;
background-color: gold;
position: relative;
top:20px;
left: 40px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
绝对定位
定义:设置为绝对定位的元素框从文档流完全删除,并相对于最近的已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
重点:如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。
另外,对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
}
.c{
400px;
height: 400px;
background-color: black;
float: left;
}
.a{
400px;
height: 400px;
background-color: gold;
position: relative;
float: right;
}
.b{
200px;
height: 200px;
background-color: red;
position: absolute;
top:400px;
left: 30px;
}
</style>
</head>
<body>
<div class="c"></div>
<div class="a">
<div class="b"></div>
</div>
</body>
</html>
固定定位
fixed(固定)
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。
定位脱离文档流
脱离文档流:
绝对定位
固定定位
不脱离文档流:
相对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.b,.c{
200px;
height: 200px;
}
.a{
700px;
height: 700px;
background-color: green;
/*position: relative;*/
}
.b{
background-color: black;
position: fixed;
bottom: 30px;
}
.c{
background-color: blue;
}
</style>
</head>
<body>
<div class="a">
<div class="b"></div>
<div class="c"></div>
</div>
</body>
</html>
模态框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.a{
position: fixed;
/*opacity:0.4;*/
top:0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(255,192,203,0.4);
z-index:200;
}
.b{
position: fixed;
200px;
height: 200px;
background-color: white;
z-index:201;
top:50%;
left: 50%;
margin: -100px 0 0 -100px;
}
</style>
</head>
<body>
<div class="a">asdasd</div>
<div class="b"></div>
</body>
</html>