- 使用原则
- .装饰型元素多使用Background-image
- .功能性元素多使用img;或者说如果去掉图片仍能正常显示就使用Background-image,否则应使用img
- [] 背景点缀 - 位置、大小、不重复
- 1. 单背景:背景图片定位于右下角
- [独立属性]
-
.single-img {
height: 200px;
background-color: rgba(255, 68, 0, 0.4);
background-image: url(../imgs/logo0.png);
background-position: right bottom;
background-size: 50px;
background-repeat: no-repeat;
}
- [复合属性]
-
background: #a8e073 url(../imgs/logo0.png) right bottom/50px no-repeat;
- 2. 多背景:背景图片分别定位于左上角和右下角
- [独立属性]
-
.multi-img {
height: 200px;
background-color: rgba(255, 68, 0, 0.4);
background-image: url(../imgs/lg.png), url(../imgs/glc.png);
background-position: right bottom, top left;
background-size: 50px;
background-repeat: no-repeat;
}
- [复合属性]background-color放在后面
-
background: url(../imgs/logo0.png) right bottom/50px no-repeat, url(../imgs/logo1.png) top left/50px no-repeat;
background-color: #a8e073;
- 精灵图 sprite
- . 为减少服务器的资源请求次数,将多个图片/图标有规则的排列在一张图上:根据具体位置,使用对应的图片
- . 适合小图片/图标使用
- . 由美工完成精灵图的制作
- . 图片通常不做缩放
- . 优点:一次请求,多次使用
- . 缺点:图片尺寸调整后,需要重新制作精灵图;且不适合媒体自适应
- . 现在大多使用字体图标代替
- [] 京东宣传
-
- [提示]
- .坐标轴向下是正y;向右是正x
- .取消重复,只保留一个图片
- .原始图片是308*234;对应的图片大小约为36*45,应该从[0,-189]开始显式;如果计算不出来,使用开发者视图F12调整:从左边顶部(0,0)开始调整至合适
- [CSS]参考代码
-
.sprite .icon {
width: 36px;
height: 45px;
background-image: url(./web/imgs/jd.png);
background-repeat: no-repeat;
}
.sprite .more {
background-position: 0 -189px;
}
.sprite .fast {
background-position: -41px -189px;
}
.sprite .good {
background-position: -82px -189px;
}
.sprite .save {
background-position: -123px -189px;
}
- [] 自定义目录 - 水平方向重复铺贴
-
-
背景图片尺寸小于容器尺寸
1
-
背景图片采用水平重复
6
- 采用flex布局
9
- [传统方法]为什么整个百分比加起来不是100%?
-
.cont span:nth-child(1) {
width: 5%;
display: inline-block;
}
.dot-bg {
display: inline-block;
width: 90%;
height: 3px;
background-image: url(./web/imgs/dot.png);
background-repeat: repeat-x;
vertical-align: middle;
}
.cont span:nth-child(3) {
width: 3%;
display: inline-block;
}
- [flex]
-
.dot-bg {
flex: 1;
height: 3px;
background-image: url(../imgs/dot.png);
background-repeat: repeat-x;
}
- 图片分割
- . 将图片水平分隔为若干片,每个元素显示其中一片
- . 每个元素显示的图片位置为:(当前片数-1) /(总片数-1):从0到100%分成若干段;第一段从0开始;最后一段在100%结束
- . 为了媒体自适应,每片的背景图片大小background-size应为总片数*100%
- . 为查看效果,以下各例采用hover触发特效,且采用公共类tile;任意调试尺寸均无异常
-
.tile {
width: 320px;
height: 180px;
margin: 2rem auto;
display: flex;
}
- [] 2片
- .2个点平分100%
- .第一片在开始0,第二片在结束100%;每片的位置:0、100%
-
- [HTML]
-
<div class="tile tile-2">
<div></div>
<div></div>
</div>
- [CSS]
-
.tile-2>div {
flex: 1;//2等分
background-image: url(../imgs/bg.jpg);
background-size: 200%;//2倍大小
background-repeat: no-repeat;
}
.tile-2>div:nth-child(1) {
background-position: 0;
}
.tile-2>div:nth-child(2) {
background-position: 100%;
}
.tile-2>div:hover {
transform: translateY(1rem);
}
- [] 3片
- .3个点平分100%
- .第一片在开始0,第三片在结束100%;第二片在中间50%;每片的位置:0、50%、100%
-
- [HTML]
-
<div class="tile tile-3">
<div></div>
<div></div>
<div></div>
</div>
- [CSS]
-
.tile-3>div {
flex: 1;
background-image: url(../imgs/bg.jpg);
background-size: 300%;//3倍
background-repeat: no-repeat;
}
.tile-3>div:nth-child(1) {
background-position: 0;
}
.tile-3>div:nth-child(2) {
background-position: 50%;
}
.tile-3>div:nth-child(3) {
background-position: 100%;
}
.tile-3>div:hover {
transform: translateY(1rem);
}
- [] 4片
- .4个点平分100%
- .第一片在开始0,第四片在结束100%;每片的位置:0、33.3%、66.7%、100%
-
- [HTML]
-
<div class="tile tile-4">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
- [CSS]
-
.tile-4>div {
flex: 1;
background-image: url(../imgs/bg.jpg);
background-size: 400%;//4倍
background-repeat: no-repeat;
}
.tile-4>div:nth-child(1) {
background-position: 0;
}
.tile-4>div:nth-child(2) {
background-position: 33.3%;
}
.tile-4>div:nth-child(3) {
background-position: 66.7%;
}
.tile-4>div:nth-child(4) {
background-position: 100%;
}
.tile-4>div:hover {
transform: translateY(1rem);
}
- [] 使用内联变量优化
-
- [HTML]
-
<div class="tile tile-4 adv">
<div style='--pos:0'></div>
<div style='--pos:1'></div>
<div style='--pos:2'></div>
<div style='--pos:3'></div>
</div>
- [CSS]
-
.tile-4.adv div {
background-position: calc(var(--pos)*100%/(4 - 1));
}
- [] banner滑动
- . 使用过渡动画 transition
- . 静态采用默认位置
- . hover时采用右上位置
- . 图片要大于容器
-
.slider-bg {
height: 150px;
background-image: url(../imgs/banner.jpg);
transition: 2s;
}
.slider-bg:hover {
background-position: right top;
}
- [] 综合应用 - 折角/狗耳朵[进阶]
-
.dog {
position: relative;
background-image: linear-gradient(210deg, transparent 3em, #ddd 0);
border-radius: 1em;
overflow: hidden;
}
.dog::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
background-image: linear-gradient(-120deg, #888 3em, transparent 0);
border-radius: 1em;
transform-origin: top right;
transform: rotate(150deg) translate(5em, -3em);
}