Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Web APIs】JavaScript 操作元素 ⑦ ( 多精灵图背景设置 | 核心要点 - 设置 backgroundPosition 属性 | 清除默认样式 | )

【Web APIs】JavaScript 操作元素 ⑦ ( 多精灵图背景设置 | 核心要点 - 设置 backgroundPosition 属性 | 清除默认样式 | )

作者头像
韩曙亮
发布于 2024-08-09 01:23:06
发布于 2024-08-09 01:23:06
16400
代码可运行
举报
运行总次数:0
代码可运行
一、案例需求

给定一张精灵图 , 如下所示 :

将其设置到 Web 页面中 , 显示如下样式 :

二、案例核心要点分析


1、清除元素的默认内外边距样式 ★ ( 重点 )

HTML 标签元素 都有自己的 默认内边距 和 外边距 样式 , 如下所示 :

  • <body> 元素 : 默认外边距 常见为 8px 或 16px , 默认内边距 常为 0 ;
  • <h1>, <h2>, <h3>, <h4>, <h5>, <h6> 元素 : 默认的 上边距和下边距可能都在 16px 到 24px 之间 , 内边距 通常为 0 ;
  • <p> 元素 : 默认的上边距和下边距 为 16px 或 1em , 默认内边距 0 ;
  • <ul>, <ol> 元素 : 默认的上边距和下边距 16px 或 1em , 默认的左内边距 40px 或 2em ;
  • <li> 元素 : 默认外边距 0 , 默认的左内边距 20px 或 1em ;
  • <blockquote> 引用块元素 : 上边距和下边距可能都在 16px 到 32px 之间 , 左内边距 为 40px 或 2em ;

本案例中 , 就 使用了 <li> 元素 进行页面结构布局 , 布局时需要使用到 浮动 样式 , 计算换行时 , 每个像素宽高都要精确计算 ;

如果要精确到像素级别进行布局 , 默认的 内外边距 margin 和 padding 是不可接受的 , 必须将默认的内外边距取消 ;

下面的代码中 , 使用 通用选择器 * 将网页上所有 HTML 元素的 外边距 ( margin ) 和 内边距 ( padding ) 都设置为 0 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        /* 全部元素的通用样式设置 */
        
        * {
            /* 去除所有元素的外边距(margin) */
            margin: 0;
            /* 去除所有元素的内边距(padding) */
            padding: 0;
        }

上述代码操作 用于 重置 或 初始化 样式 , 使得所有 元素 的 外边距 和 内边距 都从相同的起点开始 ;

确保 在不同浏览器中 , 元素的 布局 和 对齐 方式 不会因为默认的外边距和内边距值而有所不同 , 从而减少跨浏览器的样式差异 ;

2、清除 li 元素的默认样式

li 标签元素的默认样式如下所示 , li 元素是 块级元素 , 并且在左侧有小圆点 ;

  • 块级元素会在页面上占据整行 , 前面的元素在上一行 , 后面的元素在下一行 ;

设置如下代码 , 可以清除 左侧的 小圆点 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        /* 设置所有 li 元素的样式 */
        
        li {
            /* 去除 li 元素的默认列表样式(如项目符号或数字) */
            list-style-type: none;
        }

3、ul 和 li 元素的块级元素本质

ul 和 li 元素 都是 块级元素 ;

  • <ul> 无序列表 标签元素 是一个 块级元素 , 表示 列表容器 , 该元素会在页面上占据整行 , 并在其前后添加换行 ;
  • <li> 列表项 是一个 块级元素 , 用于表示 </ul> 无序列表 或 </ol> 有序列表 中的一个条目 ; 每个 <li> 元素在其父容器中占据整行 , 尽管 <li> 元素内的内容 可以是 行内元素 或 块级元素 , <li> 元素本身作为一个列表项是 块级元素 ;

块级元素 特点 :

  • 块级元素通常开始于新的一行 , 并且占据整个可用的宽度 ;
  • 块级元素可以包含其他 块级元素 和 行内元素 ;

行内元素 特点 :

  • 行内元素不会开始于新的一行 , 只在其包含块的行内显示 ;
  • 行内元素的 宽度 仅限于其内容的宽度 ;

4、为 li 元素设置浮动 ★ ( 重点 )

当 li 元素 设置了 float 浮动 属性 , 如 : float: left;float: right; , 该元素会脱离正常的 标准流 , 并向其浮动方向排列 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        .box li {
            /* 将 li 元素浮动到左侧,使它们在同一行显示 */
            float: left;

浮动元素 会从其所在 块级容器 的 左侧或右侧 开始排列 , 直到其内容的宽度被填满或者达到容器的边界 ,

当浮动元素的宽度总和超出其包含块的宽度时 , 后续的浮动元素会自动换行到下一行 ;

5、精灵图设置要点 ★ ( 重点 ) - 设置 backgroundPosition 属性

在该案例中 , 使用了 精灵图 技术来显示不同的背景图像 , 精灵图是一种将多个图像合并到一个单独图像文件中的技术 , 以减少网页加载时间 ;

精灵图 的 设置要点 就是 设置 背景图像 background: url(images/sprite.png) no-repeat; , 设置了 li 元素的背景图像为 images/sprite.png , 并确保图像不重复 no-repeat ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        /* 设置 .box 内部 li 元素的样式 */
        
        .box li {
            /* 将 li 元素浮动到左侧,使它们在同一行显示 */
            float: left;
            /* 设置 li 元素的宽度为 24 像素 */
            width: 24px;
            /* 设置 li 元素的高度为 24 像素 */
            height: 24px;
            /* 设置 li 元素的背景颜色为粉色 */
            background-color: pink;
            /* 设置 li 元素的外边距为 15 像素 */
            margin: 15px;
            /* 设置 li 元素的背景图像,背景不重复 */
            background: url(images/sprite.png) no-repeat;
        }

通过 JavaScript 动态设置 backgroundPosition 属性 , 以调整精灵图中每个图像的位置 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // 1. 获取 box 元素 中的 li 元素
        var lis = document.querySelectorAll('li');

        // 2. 为每个 li 设置不同的精灵图
        for (var i = 0; i < lis.length; i++) {
            // 精灵图中 每个图片显示位置是 0,44 0,88 0,132 y 坐标是 44 的倍数
            // 显示第一张精灵图设置背景位置 0 0
            // 显示第二张精灵图设置背景位置 0 -44
            // 显示第三张精灵图设置背景位置 0 -88
            var start_height = i * 44;
            lis[i].style.backgroundPosition = '0 -' + start_height + 'px';
        }

三、完整代码示例


1、代码示例

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Inline Style Operation Example</title>
    <style>
        /* 全部元素的通用样式设置 */
        
        * {
            /* 去除所有元素的外边距(margin) */
            margin: 0;
            /* 去除所有元素的内边距(padding) */
            padding: 0;
        }
        /* 设置所有 li 元素的样式 */
        
        li {
            /* 去除 li 元素的默认列表样式(如项目符号或数字) */
            list-style-type: none;
        }
        /* 设置 .box 类的样式 */
        
        .box {
            /* 设置 .box 元素的宽度为 250 像素 */
            width: 250px;
            /* 设置 .box 元素的上下外边距为 100 像素,并使其在水平居中 */
            margin: 100px auto;
        }
        /* 设置 .box 内部 li 元素的样式 */
        
        .box li {
            /* 将 li 元素浮动到左侧,使它们在同一行显示 */
            float: left;
            /* 设置 li 元素的宽度为 24 像素 */
            width: 24px;
            /* 设置 li 元素的高度为 24 像素 */
            height: 24px;
            /* 设置 li 元素的背景颜色为粉色 */
            background-color: pink;
            /* 设置 li 元素的外边距为 15 像素 */
            margin: 15px;
            /* 设置 li 元素的背景图像,背景不重复 */
            background: url(images/sprite.png) no-repeat;
        }
    </style>
</head>

<body>

    <div class="box">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>

    <script>
        // 1. 获取 box 元素 中的 li 元素
        var lis = document.querySelectorAll('li');

        // 2. 为每个 li 设置不同的精灵图
        for (var i = 0; i < lis.length; i++) {
            // 精灵图中 每个图片显示位置是 0,44 0,88 0,132 y 坐标是 44 的倍数
            // 显示第一张精灵图设置背景位置 0 0
            // 显示第二张精灵图设置背景位置 0 -44
            // 显示第三张精灵图设置背景位置 0 -88
            var start_height = i * 44;
            lis[i].style.backgroundPosition = '0 -' + start_height + 'px';
        }
    </script>
</body>

</html>

2、执行效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
元素自上而下,自左而右,块元素独占一行,行内元素在一行上显示,碰到父集元素的边框换行。
Daotin
2018/08/31
6240
从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
前端成神之路-盒子模型
网页布局中,我们是如何把里面的文字,图片,按照美工给我们的效果图排列的整齐有序呢?
海仔
2020/11/12
1K0
前端成神之路-盒子模型
【CSS】课程网站 网格商品展示 模块制作 ① ( 网格商品展示模块盒子模型测量及样式 | 顶部文本标题盒子测量及样式 | 代码示例 )
文本所在盒子 , 与 顶部的导航栏有 15 像素间隔 , 这里使用 上外边距 设置 ;
韩曙亮
2023/04/06
4.4K0
【CSS】课程网站 网格商品展示 模块制作 ① ( 网格商品展示模块盒子模型测量及样式 | 顶部文本标题盒子测量及样式 | 代码示例 )
CSS入门指南-4:页面布局
display是 CSS 中最重要的用于控制布局的属性。每个元素都有一个默认的 display 值。对于大多数元素它们的默认值通常是 block 或 inline 。一个 block 元素通常被叫做块级元素。一个 inline 元素通常被叫做行内元素。
goodspeed
2020/12/22
2.3K0
CSS入门指南-4:页面布局
【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒子模型测量及样式 | 处理列表间隙导致意外换行问题 | 代码示例 )
下面的 10 个盒子 , 放在 ul 列表中 , 每个盒子都占用一个 li 列表项 ;
韩曙亮
2023/04/06
2.5K0
【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒子模型测量及样式 | 处理列表间隙导致意外换行问题 | 代码示例 )
css应知应会 第二集
h-shadow v-shadow blur spread color inset
李才哥
2020/08/17
1.3K0
css应知应会 第二集
大型编程电视剧连载 | CSS知识点硬核整理归纳(二)
网页布局中,我们是如何把里面的文字,图片,按照美工给我们的效果图排列的整齐有序呢?
上分如喝水
2021/08/16
1.8K0
大型编程电视剧连载 | CSS知识点硬核整理归纳(二)
CSS学习笔记(基础篇)
CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表)
Daotin
2018/08/31
4.7K0
CSS学习笔记(基础篇)
CSS重要的盒子模型
新浪导航栏的核心就是因为里面的字数不一样多,所以我们不方便给宽度,还是给padding ,撑开盒子的。
乐心湖
2020/07/31
1.1K0
CSS重要的盒子模型
css基本样式1(7.1)
2.盒模型 盒模型内容的width、height、padding内边距、border、margin外边距。
bamboo
2019/01/29
8730
css基本样式1(7.1)
Web前端温故知新-CSS基础
  定义:CSS成为层叠样式表,它主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。CSS以HTML为基础,提供了丰富的功能(如字体、颜色、背景的控制以及整体排版等等),还可以针对不同的浏览器设置不同的样式。
Edison Zhou
2018/08/21
3.6K0
Web前端温故知新-CSS基础
【CSS】课程网站横版导航栏 ( 横版导航栏测量及样式 | 代码示例 )
该盒子是处于版心位置 , 先为其设置版心的样式 , 版心宽度 1200 像素 , 水平居中 , 先将版心的样式设置给盒子 ;
韩曙亮
2023/04/06
5.3K0
【CSS】课程网站横版导航栏 ( 横版导航栏测量及样式 | 代码示例 )
【移动端网页布局】Flex 弹性布局案例 ③ ( 横向导航栏 | 固定定位下面的布局设置 | 设置横向导航栏弹性布局 | 弹性布局主轴和侧轴设置 | 二倍精灵图 )
在上一篇博客中实现的搜索栏 , 使用 固定定位 设置该搜索栏位置 , 不管网页如何滚动 , 最上方始终显示该搜索栏 ;
韩曙亮
2023/10/11
6860
【移动端网页布局】Flex 弹性布局案例 ③ ( 横向导航栏 | 固定定位下面的布局设置 | 设置横向导航栏弹性布局 | 弹性布局主轴和侧轴设置 | 二倍精灵图 )
前端-CSS-更改标签样式-长宽字体-背景-边框-显示方式-定位-透明度-扩展点-02
目录 控制标签元素样式 长宽属性、字体属性、文本对齐、文本装饰、首行缩进 背景属性、边框属性、圆角 display 显示方式 盒子模型 margin、padding... float浮动 overflow 清除溢出(超出div大小的部分) position 定位 对文档流的影响 z-index 层级 opacity 标签整体透明度 去掉li 前面的标识 文本垂直居中 单行文本居中 作业案例 关于自适应(不需要了解) 控制标签元素样式 小心得: 样式有继承(遗传)效果(子元素将继承父元素的样式,如果子元素
suwanbin
2019/09/26
1.5K0
前端-CSS-更改标签样式-长宽字体-背景-边框-显示方式-定位-透明度-扩展点-02
【Web APIs】JavaScript 操作元素 ⑥ ( 关闭对话框案例 | display 属性简介 | 页面标签结构和样式 | 盒子模型细节 | 绝对布局要点 - 设置负值即可超出父容器模型 )
在 【Web APIs】JavaScript 操作元素 ① ( 修改元素内容 | innerText 属性修改元素文本内容 | innerHTML 属性修改元素 HTML 内容 ) 博客中介绍了 使用
韩曙亮
2024/08/09
2020
【Web APIs】JavaScript 操作元素 ⑥ ( 关闭对话框案例 | display 属性简介 | 页面标签结构和样式 | 盒子模型细节 | 绝对布局要点 - 设置负值即可超出父容器模型 )
【CSS】盒子模型案例 ( 盒子模型尺寸计算 | 盒子模型水平居中 | 盒子模型内外边距设置 | 背景图片及位置设置 | 盒子嵌套设置 )
将 效果图片拖动 到 Adobe Fireworks 中 , 使用 切片工具 分析盒子模型 :
韩曙亮
2023/03/30
1.5K0
【CSS】盒子模型案例 ( 盒子模型尺寸计算 | 盒子模型水平居中 | 盒子模型内外边距设置 | 背景图片及位置设置 | 盒子嵌套设置 )
【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
该 Banner 条宽度填充整个浏览器 , 不需要给出宽度 , 只需要设置高度即可 ;
韩曙亮
2023/04/04
4.1K0
【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
CSS入门?一篇就够了!
CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。
对话、
2022/02/22
5.3K0
CSS入门?一篇就够了!
CSS基础(一)
CSS引入方式: 1. 行内式: <div style = "..."></div>(使用最少,因为会产生冗余,而且不符合W3C规定) 2. 内嵌式: <style> ... (写的是样式)... </style>(不会有冗余) 3. 外链式:<link href = "style.css"> (用的最多)
且陶陶
2023/04/12
9500
CSS基础(一)
CSS-02
复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签。
用户9615083
2022/12/25
2K0
CSS-02
推荐阅读
从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
6240
前端成神之路-盒子模型
1K0
【CSS】课程网站 网格商品展示 模块制作 ① ( 网格商品展示模块盒子模型测量及样式 | 顶部文本标题盒子测量及样式 | 代码示例 )
4.4K0
CSS入门指南-4:页面布局
2.3K0
【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒子模型测量及样式 | 处理列表间隙导致意外换行问题 | 代码示例 )
2.5K0
css应知应会 第二集
1.3K0
大型编程电视剧连载 | CSS知识点硬核整理归纳(二)
1.8K0
CSS学习笔记(基础篇)
4.7K0
CSS重要的盒子模型
1.1K0
css基本样式1(7.1)
8730
Web前端温故知新-CSS基础
3.6K0
【CSS】课程网站横版导航栏 ( 横版导航栏测量及样式 | 代码示例 )
5.3K0
【移动端网页布局】Flex 弹性布局案例 ③ ( 横向导航栏 | 固定定位下面的布局设置 | 设置横向导航栏弹性布局 | 弹性布局主轴和侧轴设置 | 二倍精灵图 )
6860
前端-CSS-更改标签样式-长宽字体-背景-边框-显示方式-定位-透明度-扩展点-02
1.5K0
【Web APIs】JavaScript 操作元素 ⑥ ( 关闭对话框案例 | display 属性简介 | 页面标签结构和样式 | 盒子模型细节 | 绝对布局要点 - 设置负值即可超出父容器模型 )
2020
【CSS】盒子模型案例 ( 盒子模型尺寸计算 | 盒子模型水平居中 | 盒子模型内外边距设置 | 背景图片及位置设置 | 盒子嵌套设置 )
1.5K0
【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
4.1K0
CSS入门?一篇就够了!
5.3K0
CSS基础(一)
9500
CSS-02
2K0
相关推荐
从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验