HTML+CSS宝典 CSS基础 更多的样式
一、透明度
透明度有两种设置方式
1、第一种使用 opacity 属性,设置的是整个元素的透明度
就是这个元素盒子里面的内容、边框、背景所有的东西都通过opacity属性进行设置,整个元素内部所有的东西都会透明度,
opactiy不那么的常用,需要把整个区域都变成透明才会用到这个属性
opacity 属性的取值范围 0 ~ 1,
0 表示透明,
1 表示完全不透明
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>透明度 opacity</title> <style> div{ position: absolute; width: 300px; height: 300px; top:0; left:0; bottom:0; right: 0; margin: auto; background-color: #ff8c8c; line-height: 36px; text-align: center; opacity:.5; /* 透明度 */ } </style> </head> <body> <img style="width:100%;" src="http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg" alt=""> <div> <h1>There's no such thing as a free lunch.</h1> </div> </body> </html>
div元素出现透明效果
There's no such thing as a free lunch.
2、通常使用的是第二种方式,在颜色位置设置alphaton(阿尔法)通道
就是设置颜色的时候可以使用 rgba,a表示的是阿尔法通道,
阿尔法通道的意思是它的取值也是 0 ~ 1,0表示这个颜色完全透明,1表示完全不透明
可以独立的设置某一个地方,比如把文字颜色设置成透明
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>阿尔法通道</title> <style> div{ position: absolute; width: 300px; height: 300px; top:0; left:0; bottom:0; right: 0; margin: auto; background-color: #ff8c8c; line-height: 36px; text-align: center; color: rgb(255,255,255,.2); /* 文字颜色设置成半透明 */ } </style> </head> <body> <img style="width:100%;" src="http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg" alt=""> <div> <h1>There's no such thing as a free lunch.</h1> </div> </body> </html>
文字呈透明效果,不影响div元素
There's no such thing as a free lunch.
边框也可以设置成透明,先改一下背景设置,
1. 背景默认覆盖是边框盒的,改成背景覆盖内容盒 background-clip: padding-box;
2. 然后修改透明边框 border: 10px solid rgb(0, 0, 0, .2);
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>rgba</title> <style> div{ position: absolute; width: 300px; height: 300px; top:0; left:0; bottom:0; right: 0; margin: auto; background-color: #ff8c8c; background-clip: padding-box; /* 设置背景覆盖内容盒子 */ line-height: 36px; text-align: center; color:#fff; border:15px solid rgb(0,0,0,.3); /* 设置边框半透明 */ } </style> </head> <body> <img style="width:100%;" src="http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg" alt=""> <div> <h1>There's no such thing as a free lunch.</h1> </div> </body> </html>
边框变透明了
There's no such thing as a free lunch.
可以进行精细的设置某一个部分实现透明效果
1. 背景设置成透明 background-color: rgb(255, 140, 140, .6);
2. 字体不透明
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>rgba</title> <style> div{ position: absolute; width: 300px; height: 300px; top:0; left:0; bottom:0; right: 0; margin: auto; background-clip: padding-box; line-height: 36px; text-align: center; color:#fff; border:15px solid rgb(0,0,0,.3); background-color: rgb(255,140,140,.6); /* 背景设置成半透明 */ } </style> </head> <body> <img style="width:100%;" src="http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg" alt=""> <div> <h1>There's no such thing as a free lunch.</h1> </div> </body> </html>
背景透明
There's no such thing as a free lunch.
二、鼠标
1、使用 cursor 属性设置鼠标样式,属性值很多
cursor属性
poiner 小手
auto 默认,让浏览器来控制,比如遇到文字变成选择光标,在文本框变成输入状态
e-resize 表示重新调整尺寸
help 帮助,鼠标箭头多了一个问号
2、cursor属性还可以设置图片
如果要设置鼠标为一张图片,图片不能用jpg、png...这些格式有的浏览器能支持,有的浏览器支持不了的,一般都会用ico格式作为后缀的图片
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>鼠标</title> <style> div{ background:orange; width:100px; height:100px; cursor: url(./target.ico), auto; /* 设置鼠标为一张图片 */ } </style> </head> <body> <div></div> </body> </html>
一定要把图片变成.ico,或者是另外一种.cur格式(cur表示鼠标样式格式)
三、盒子显示和隐藏
用CSS来控制盒子的显示和隐藏有两种方式
display: none
表示不生成盒子,这种方式有可能会影响到其他元素的排版,因为一个元素消失了就不生成盒子了,剩下的元素可能就要改变了排列方式,
display属性是能控制盒子类型的,把类型设置为none,就表示没有盒子类型,他就不生成盒子了
visibility: hidden
表示依然生成盒子,生成的盒子是什么类型呢?
display是什么类型就是什么类型,display是block盒子就是块盒,display是inline盒子就是行盒,
这种方式不影响盒子的类型,只是从视觉上移除盒子,盒子仍然占据空间
visibility属性是可见度的意思,
visible 默认值是显示的意思,
hidden 隐藏
js里可以控制这个属性来达到一个闪烁的效果(QQ图标闪烁)
四、背景图
背景图 和 img元素的区别
已经学了img元素了,直接用img元素来表达图片不完了吗,为什么要使用背景图呢?
img是属于html的概念,背景图是属于CSS的概念。
什么时候用img元素,什么时候用背景图?
1. 当图片是网页内容时候,必须使用img元素,因为元素表示的是网页的内容结构,是网页的内容组成部分,必须使用img图片
2. 当图片仅用于网页的美化时,必须使用背景图,美化就是CSS的部分
所以背景图和图片怎么区分,关键取决于它的含义
比如广告很多使用的是图片,虽然广告不是网站的核心内容,但也是内容的一部分,
建议使用img元素,表示页面上有这么一个广告
比如游戏网站的按钮一定是一个图片,按钮使用img元素还是背景图呢?
按钮就应该使用的是一张背景图片,不应该使用img
按钮就是一个button元素,所以从内容的角度来说,这个按钮图片不是必须要有的,
这张图片就是来修饰按钮的,表示这个按钮很好看,给按钮做了一个美化,因此这个时候应该使用背景图。
背景图涉及的css属性
background-image url()
background-repeat
background-size 表示背景图的尺寸
background-position
1、url
background-image url()
注意一点,如果css文件是一个是独立的文件,背景图路径要相对css文件的路径
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>background-image:url()</title> <style> div{ width: 700px; height: 600px; border 2px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); } </style> </head> <body> <div></div> </body> </html>
给整个网站设置背景图,要给body元素设置
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>给整个网页设置背景图</title> <style> body{ background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); } </style> </head> <body> </body> </html>
2、repeat
background-repeat
背景图默认情况下,背景图会在横坐标和纵坐标中进行重复,而重复是可以控制的,可以设置背景不让他重复
repeat是重复的意思 background-repeat: no-repeat; 表示不重复
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>background-repeat</title> <style> body{ background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; } </style> </head> <body> </body> </html>
background-repeat 是一个速写属性
background-repeat: no-repeat; 相当于写了下面两个
background-repeat-x: no-repeat; 横坐标方向不重复
background-repeat-y: no-repeat; 纵坐标方向不重复
background-repeat: repeat-x; 设置背景图只在x轴横向重复
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>background-repeat:repeat-x</title> <style> body{ background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat:repeat-y; } </style> </head> <body> </body> </html>
只在x轴横坐标重复的效果,相当于设置了
background-repeat-x: repeat;
background-repeat-y: no-repeat;
也可设置只在纵向重复
background-repeat: repeat-y;
也可设置默认值repeat,两个方向都重复
background-repeat: repeat;
3、size
background-size 表示背景图的尺寸
背景图比较大,div盒子比较小,所以盒子里面显示不完整,
默认情况下,背景图按照图片的尺寸来显示,不会对图片进行缩放,我们可以通过 background-size 来控制
有两个预设值(类似于object-fit)
1. contain
2. cover
contain
意思是保证图片能完整的显示到div盒子里面,no-repeat 有重复把重复去掉
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>background-size:contain</title> <style> div{ width: 700px; height: 420px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); background-repeat: no-repeat; /* 去掉重复 */ background-size: contain; /* 保证图片能完整的显示到div盒子里面*/ } </style> </head> <body> <div></div> </body> </html>
横向撑满,纵向按照比例缩放
cover
意思背景图一定要把这个区域撑满,然后还要保证图片比例不变,所以图片有些地方就隐藏掉了
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>background-size:cover</title> <style> div{ width: 700px; height: 420px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); background-repeat: no-repeat; background-size: cover; /* 背景图一定要把这个区域撑满,然后还要保证图片比例不变,所以图片有些地方就隐藏掉了 */ } </style> </head> <body> <div></div> </body> </html>
背景图比例上发生了变化(????)
数值和百分百比
background-size: 300px 200px; 可以自己设置一些数值,宽300像素,高200像素
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>数值和百分百比</title> <style> div{ width: 700px; height: 420px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); background-repeat: no-repeat; background-size:300px 200px; } </style> </head> <body> <div></div> </body> </html>
background-size: 100%; 意思是横向上一定要撑满,纵向上按照比例缩放
background-size: 100% 100%; 写两个100%,第一个表示横向撑满,第二个表示纵向撑满,于是背景图比例上发生了变化,就没有保持比例了
4、position
background-position 设置背景图的位置
这几个预设值可以分别设置横向和纵向的位置
left
bottom
right
top
center
right bottom 横向靠右,纵向靠下
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>设置背景图的位置</title> <style> div{ width: 700px; height: 400px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position:right bottom; } </style> </head> <body> <div></div> </body> </html>
conter 表示横向居中,同时纵向也居中
background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: center;
center top 横向居中,纵向靠上
background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: center top;
center buttom 横向居中,纵向靠下
background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: center bottom;
left center 横向靠左,纵向居中
background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: left center;
也可以写数值和百分比(百分比用的不多)
数值指的是相对位置
background-position: 0px 0px; 两个数分别表示,背景图的左边离盒子左边的距离,背景图的上边离盒子上边的距离
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>设置背景图的位置</title> <style> div{ width: 700px; height: 400px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: 0px 0px; } </style> </head> <body> <div></div> </body> </html>
background-position: 0px 20px; 第二个数字表示纵向的Y坐标,离上边的距离
background-position: 40px 20px; 第一个数值增加到40像素
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>设置背景图的位置</title> <style> div{ width: 700px; height: 400px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: no-repeat; background-position: 40px 20px; } </style> </head> <body> <div></div> </body> </html>
可以写具体的数字,也可以写负数
5、雪碧图
雪碧图也叫精灵图,是单词 spirit 精灵的意思,音译过来叫雪碧图
雪碧图的意思是,网页上有一些小图标,把这些小图标合并成一张图片
为什么要合并呢?
如果单独做成一张一张单独的图片,会导致产生很多很多的图片,
网站渲染的时候就要读很多文件,这样会降低网站的渲染效率,所以会把这些零散的文件,合并成一张大的文件
这样只需要读一张文件就行了,而且图片文件还会被浏览器缓存起来,之后的运行就会非常非常快了
在实际的开发中,会遇到把很多的图标,合并到一张的大图,
我们需要从雪碧图中取出一小块出来,怎么取呢?利用背景图的位置 background-position,取出雪碧图中的一小块
看栗子
1. div元素加上一张雪碧图背景
2. no-repeat 设置不重复
3. 尺寸不变,用原始尺寸
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>雪碧图</title> <style> div{ width: 28px; height: 28px; border: 1px solid; background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164263479556296.png'); background-repeat: no-repeat; background-position: -48px -38px; } </style> </head> <body> <div></div> </body> </html>
6、attachment
background-attachment 通常用于设置背景图是否固定
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>固定背景图</title> <style> body{ background-image: url('http://www.ruyic.com/blog/uploads/image/202201/164242168139798.jpg'); background-repeat: no-repeat; /* 设置不重复 */ background-size: 100%; /* 横向100%,纵向自适应 */ background-attachment: fixed; /* 设置背景图是相对于视口的,有点类似于固定定位 */ } </style> </head> <body> <div style="height: 2000px;"></div> </body> </html>
7、背景图和背景颜色混用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>背景图和背景颜色混用</title> <style> body{ background-image: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png'); background-repeat: repeat-x; /* 只在x轴重复 */ background-color: #ffd200; } </style> </head> <body> </body> </html>
8、速写属性(简写)
background: url('./pic.jpg') 不重复 位置/尺寸 固定 背景颜色;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>简写属性</title> <style> body{ background: url('http://www.ruyic.com/blog/uploads/image/201904/155591911913470.png') no-repeat 50% 50%/200px 200px fixed #ffd200; } </style> </head> <body> </body> </html>
在速写属性里面有两地方有可能写成数字(数值),
1. 一个是尺寸 background-size,
2. 还有一个是位置 background-position,位置也可能是数字和百分比
比如位置居中 background-position: center ,
也可能设置 background-position:50% 50% 也表示居中,这里有点特殊 两个50% 好像是距离左边、上边各有一半的距离,实际上表示居中
意思是说 background-size: 100% 属性有可能取百分比,有可能是具体的像素值
那么在书写的时候,浏览器怎么知道哪个是尺寸?哪个是位置呢?
所以浏览器要求这样写
1. 先写位置
background: url('pic.jpg') no-repeat 50% 50%/100% fixed #ffd200;
2. 写一个斜杠分开,尺寸写在斜杠后面,再写尺寸
background: url('pic.jpg') no-repeat 50% 50%/100% fixed #ffd200;
3. 然后再写固定 fixed
background: url('pic.jpg') no-repeat 50% 50%/100% fixed #ffd200;
4. 写背景颜色
background: url('pic.jpg') no-repeat 50% 50%/100% fixed #ffd200;
位置这里,也不可以不写50% 50%,可以简单的写预设值center,总之顺序要先写位置,再写尺寸才行
background: url('pic.jpg') no-repeat center/100% fixed #ffd200;
也不是每个属性都写,
比如no-repeat 可以不写,不写就按照默认值
background: url('pic.jpg') center/100% fixed #ffd200;
fixed也可以不写,不写fixed背景就依附在body元素上, body元素滚动背景就跟着滚动
background: url('pic.jpg') no-repeat center/100% #ffd200;
firstTime: 20220123