当前位置: 首页 > news >正文

【CSS3】精灵图 背景图 阴影 过渡

目录

    • 精灵图
      • 为什么要使用精灵图
      • 什么是精灵图
      • 精灵图的优点和缺点
    • 背景图
      • 背景图大小
      • background连写
    • 阴影
      • 文字阴影
      • 盒子阴影
    • 过渡

CSDN话题挑战赛第2期
参赛话题:学习笔记

精灵图

为什么要使用精灵图

当用户访问一个网站时,浏览器会向服务器发送一系列请求,比如说网页上的每张图像都需要经过一次请求才能最终展示给用户。

然而,一个网页中往往包含大量的图像资源(例如在页面中展示的图片、网页的背景图像以及一些装饰性的图像等),这就会导致浏览器频繁的请求服务器,大大降低网页的加载速度。为了有效的减少请求服务器的次数,提高页面加载的速度,就出现了 CSS Sprites 技术,也被称为精灵技术

这样一来,多张图片发送多个请求可以合成一张精灵图只发送一次。

什么是精灵图

简单来说,精灵图就是一个大的背景图,您只需要使用 background-position 来移动背景图,从而只显示背景图的一部分。(给你一张大图片,选择性的显示出其中的小图)

background-position:x y;

x表示水平方向位置, y表示垂直方向的位置,原点(0,0)是精灵图的左上角。

如:这是一张大的背景图,我们需要选取其中的一个小图

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
      span {
        display: inline-block;
        width: 18px;
        height: 24px;
        background-image: url(./images/taobao.png);
        /* 水平方向位置  垂直方向的位置 */
        /* background-position: 0 0; */
        /* 取0的时候发现图往右边便宜,想要向左侧移动图片, 位置取负数;  */
        background-position: -3px 0;
      }


      b {
        display: block;
        width: 25px;
        height: 21px;
        background-color: green;
        background-image: url(./images/taobao.png);
        background-position: 0 -90px;
      }
    </style>
  </head>
  <body>
    <!-- 精灵图的标签都用行内标签  span, b, i -->
    <span></span>
    <b></b>
  </body>
</html>

效果:
在这里插入图片描述

精灵图的优点和缺点

优点:

  • 减少服务器发送次数,减轻服务器的压力,提高页面加载速度。

缺点:

  • 在图片合并的时候,需要把多张图片有序的、合理的合并成一张图片,每个小图之间需要预留足够的空间。
  • 在宽屏或者高分辨率的屏幕下来自适应页面宽度时,如果图片不够宽,会出现背景断裂。
  • 精灵图在维护的时候比较麻烦,如果页面背景有少许改动,就需要修改整个精灵图。

背景图

背景图大小

background-size:宽度 高度;
取值作用
数字+px简单,常用
百分比盒子自身宽高百分比
cover“覆盖”,表示将背景图片等比缩放填满整个元素
contain“容纳”,表示将背景图片等比缩放至某一边紧贴元素边沿为止

background连写

background:color image repeat position /size;
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
      .box {
        width: 400px;
        height:300px;
        background-color: pink;
        background-image: url(./images/girl.jpg);
        /* 不重复显示多图 */
        background-repeat: no-repeat;
        /* background-size: 300px; */
        background-size: 100%;
        /* 最大的百分比,如这里最大的是宽 */


        /* 如果图的宽或高与盒子的尺寸相同了, 另一个方向停止缩放 -- 导致盒子可能有留白 */
        /* background-size: contain; */
        /* 保证宽或高和盒子尺寸完全相同 , 导致图片显示不全 */
        /* background-size: cover; */


        /* 一般图的比例和盒子的比例都是相同的, contain 和cover效果完全相同; */
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
  </body>
</html>

在这里插入图片描述

阴影

文字阴影

在CSS3的坐标系中使用的是W3C坐标系,这种坐标系与我们学习的数学坐标系的区别在于Y轴正方向的不同。

W3C坐标系:y轴正方向向下。

文字阴影语法

text-shadow:x轴偏移值  y轴偏移值  blur  color;

x轴偏移值是“水平阴影”,表示阴影的水平偏移距离,单位可以是px、em和百分比等。如果值为正,则阴影向右偏移;如果值为负,则阴影向左偏移。

y轴偏移值是“垂直阴影”,表示阴影的垂直偏移距离,单位可以是px、em和百分比等。如果值为正,则阴影向下偏移;如果值为负,则阴影向上偏移。

blur是“模糊度”,表示阴影的模糊程度,单位可以是px、em、百分比等。blur值越大,则阴影越模糊;blur值越小,则阴影越清晰。而且blur不能为负值。如果不需要阴影模糊效果,可以把blur值设置为0。

color是“阴影颜色”。

盒子阴影

box-shadow:x轴偏移值  y轴偏移值  blur  spread  color  style;

基本和文字阴影一样,不过多了spread和style属性。
spread:表示阴影大小
style:表示内阴影还是外阴影,如果想表示内阴影则用insert,表示外阴影则什么都不用写

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>


      /* 文字阴影 */
      .text{
        font-size: 20px;
        /* 水平 垂直 模糊度 颜色*/
        text-shadow: 4px 4px 4px blue;
      }
      /* 盒子阴影 */
      .box {
        width: 200px;
        height: 200px;
        background-color: pink;


        /* insert内阴影要么加要么不加 */
        /* 水平 垂直 模糊度 阴影大小 颜色 */
        box-shadow:4px 4px 10px 1px blue;
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
    <br>
    <br>
    <div class="text">文字阴影</div>
  </body>
</html>


在这里插入图片描述

过渡

在CSS3中,我们可以使用transition属性来将元素的某一个属性从“一个属性值”在指定的时间内平滑地过渡到“另一个属性值”,从而来实现动画效果。

过渡(transition)呈现的是一个“过程”。这个所谓的“过程”,通俗来说就是一种动画变化过程,如渐渐显示、渐渐隐藏、动画快慢等。
语法:

transition: 过渡属性 过渡时间 过渡方式 延迟时间;

属性:

属性说明
transition-property对元素的哪一个属性进行操作
transition-duration过渡的持续时间
transition-timing-function过渡的速率方式
transition-delay过渡的延迟时间(可选参数)

上面的写法都不常用,常用的是:

transition: all 过渡时间;

all表示所有能过渡的属性都过渡。

凡是涉及过渡,我们都是结合:hover伪类,来实现过渡效果,不然如果我们只设置过渡不使用伪类,打开浏览器直接呈现的结果而不是“过渡效果”。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .father{
            
            position: relative;
            width: 400px;
            height: 400px;
            background-color:beige;
        }
        /* 过渡配合hover使用, 谁变化谁加过渡属性 */
        .box {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);

            width: 400px;
            height: 400px;
            background-color: skyblue;
            
            /* transition: width 1s, background-color 2s; */
            /* 如果变化的属性多, 直接写all,表示所有 */
            transition: all 1s;
        }
        /* hover后面只能跟前面的子级,不能颠倒 */
        .box:hover{
            width: 200px;
            height: 200px;
            /* 变色 */
            background-color: rebeccapurple;
            /* 变形 */
            border-radius: 200px;
            
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="box"></div>
    </div>
    
</body>
</html>

鼠标没碰到之前:
在这里插入图片描述
鼠标碰到后:
在这里插入图片描述

相关文章:

  • 微服务笔记:第一章_微服务简介 | Eureka注册中心 | Nacos注册中心 | Nacos配置管理 | Feign
  • 信息检索经典文章-1
  • tensorflow 2.10.0安装所需依赖库版本确定方法
  • Hadoop平台搭建与数据分析实验报告
  • # 透过事物看本质的能力怎么培养?
  • 数据库-存储过程
  • 【0基础学习mysql】之DML-表中数据的操作
  • HybirdCLR 探索—— .NET相关概念(基础)
  • Linux篇【1】:入门与基本指令详解(中)
  • 基于强化学习PPO(Proximal Policy Optimization)算法的无人机姿态控制系统
  • HDFS源码分析——NameNode启动流程
  • 【Day20】LeetCode算法题【1784. 检查二进制字符串字段】【14. 最长公共前缀】
  • 状态反馈镇定之非线性系统反馈线性化
  • 【408计算机组成原理】—加减运算和溢出判断(八)
  • vue3 setup的四点注意
  • Java比较器对数组,集合排序
  • js ES6 求数组的交集,并集,还有差集
  • mysql 5.6 原生Online DDL解析
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • python_bomb----数据类型总结
  • Python打包系统简单入门
  • Python连接Oracle
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 成为一名优秀的Developer的书单
  • 从重复到重用
  • 给初学者:JavaScript 中数组操作注意点
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于springcloud Gateway中的限流
  • 基于axios的vue插件,让http请求更简单
  • 基于组件的设计工作流与界面抽象
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 人脸识别最新开发经验demo
  • 主流的CSS水平和垂直居中技术大全
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #每天一道面试题# 什么是MySQL的回表查询
  • (06)金属布线——为半导体注入生命的连接
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++17) std算法之执行策略 execution
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (转)树状数组
  • . Flume面试题
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 中的轻量级线程安全
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • ;号自动换行
  • @Bean, @Component, @Configuration简析
  • @RequestMapping 的作用是什么?
  • @Service注解让spring找到你的Service bean
  • [100天算法】-二叉树剪枝(day 48)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式