新课限免|CSS3 实现热点地图动画

JavaScript 的热点地图十分常见,但是使用 CSS3 制作的热点地图或许你就没有听说过了。

其实 CSS3 的功能也很强大,能帮助我们实现很多用 JavaScript 实现的效果,今天带来一门《CSS3 实现热点地图动画》的教程,效果如下:

课程将手把手带大家用 CSS3 制作一个热点地图,你可以学到 HTML 的布局、HTML 列表、CSS 选择器、CSS3 动画、CSS3 的 2D 转换等,对于练习 HTML、CSS 也有很好的帮助。

课程限时免费中,欢迎大家来实验楼亲手把这个项目实现一遍。课程地址:

https://www.lanqiao.cn/courses/2673

知识点
  • HTML 列表

  • CSS 相对定位与绝对定位

  • CSS3 动画

  • CSS3 transform 属性

  • CSS3 animation-delay () 属性

课程代码下载命令:

点击文末阅读原文,获取完整代码。

HTML 基础结构

首先我们来创建如下目录结构:

在 img 目录下获取地图图片,打开终端,执行以下命令:

$ cd img
$ wget https://labfile.oss.aliyuncs.com/courses/2673/map_black_bg.png

index.html 文件中写入如下代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>热点地图</title>
    <!-- 引入CSS -->
    <link rel="stylesheet" href="./index.css" />
  </head>
  <body>
    <!-- 地图 -->
    <div class="china-map"></div>
  </body>
</html>

为了让我们的城市能够显示在地图上,在这里我选择使用 CSS 相对定位与绝对定位的方式。

index.css 文件中写入如下代码:

/* CSS 通配符 * 号,表示所有的元素一开始默认的内外边距为 0 */
* {
  margin: 0;
  padding: 0;
}
body {
  /* 背景色 */
  background: #31363a;
}
.china-map {
  /* 给地图加上相对定位 */
  position: relative;
  /* 给地图设置宽高 */
  width: 747px;
  height: 617px;
  /* 设置背景图片,指定为不重复,并且居中 */
  background: url("./map_black_bg.png") no-repeat center;
  /* 将地图设置为离顶部60px,左右居中 */
  margin: 60px auto 0;
}

执行如下步骤预览效果:

这下我们的地图就显示出来了。

地点样式设置

地图成功显示后,我们需要在上面设置地点以及地点的样式。

index.html 中加入以下代码:

<div class="china-map">
  <!-- 地点区域 -->
  <div class="region">
    <!-- 地点显示的小圆点 -->
    <div class="dot"></div>
    <!-- 向外扩散的圆圈 -->
    <div class="place"></div>
    <!-- 地名 -->
    <div class="txt">青海</div>
  </div>
</div>

index.css 中加入以下代码:

* {
  margin: 0;
  padding: 0;
}
body {
  background: #31363a;
}
/* 地图 */
.china-map {
  position: relative;
  width: 747px;
  height: 617px;
  background: url("./map_black_bg.png") no-repeat center;
  margin: 60px auto 0;
}
/* 区域地点 */
.region {
  /* 绝对定位 */
  position: absolute;
}
/* 小圆点 */
.region .dot {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -5px 0 0 -5px;
  width: 10px;
  height: 10px;
  background: #a2a9b4;
  opacity: 1;
  border-radius: 50%;
}
/* 向外扩散的圆圈 */
.region .place {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -33px 0 0 -33px;
  width: 66px;
  height: 66px;
  border: 2px solid #b7b7b7;
  border-radius: 50%;
  /* 透明度 */
  opacity: 0.12;
  /* 阴影 */
  box-shadow: 0 0 4px #82878f inset;
}
/* 地名 */
.region .txt {
  position: absolute;
  top: -20px;
  left: 10px;
  font-size: 14px;
  color: #ccc;
  width: 50px;
}

预览效果:

如何将这个地点放置在相应位置上呢?这个时候就要使用 left 属性和 top 属性了,通过计算正确的偏移值,将地点放置在合适的位置上。

修改 .region 的样式:

.region {
  position: absolute;
  top: 302px;
  left: 308px;
}

预览效果:

青海就已经显示在正确的地方上了。但是我们转念一想,如果我们还有一个城市,比如北京,这个时候是不是该这样:

.region2 {
  position: absolute;
  top: 229px;
  left: 559px;
}

不过如此一来,每当创建一个城市,就要新写一个 CSS 类,并且每一个类中都会有同样的代码 position:absolute,如果大篇幅的重复会增加代码的冗余度。所以这个时候,我们可以专门新建一个类来放置每一个城市的偏移值,修改 index.css 文件,增加如下代码:

.region {
  position: absolute;
}
/* 青海 */
.region-qh {
  top: 302px;
  left: 308px;
}
/* 北京 */
.region-bj {
  top: 229px;
  left: 559px;
}

修改 index.html

<div class="china-map">
  <!-- 青海 -->
  <div class="region region-qh">
    <div class="dot"></div>
    <div class="place"></div>
    <div class="txt">青海</div>
  </div>
  <!-- 北京 -->
  <div class="region region-bj">
    <div class="dot"></div>
    <div class="place"></div>
    <div class="txt">北京</div>
  </div>
</div>

预览效果:

同样的道理,如果我们想设置不同地点有不同颜色的显示,我们可以专门新建一个颜色类:

修改 index.html

<!-- 北京 -->
<div class="region region-bj blue">
  <div class="dot"></div>
  <div class="place"></div>
  <div class="txt">北京</div>
</div>

index.css 中加入以下代码:

/* 颜色*/
.region.blue .place {
  width: 120px;
  height: 120px;
  margin: -64px 0 0 -64px;
  border: 1px solid #009fd9;
  box-shadow: 0 0 12px #009fd9 inset;
}
.region.blue .dot {
  background: #0080d9;
}

预览效果:

如此一来,如果我们想给一些地点加上样式,只需要为它加上像 .blue 这样的颜色类就好了。现在我们将其他的地点以及样式增加上去。

篇幅有限,完整内容请点击阅读原文查看。

???????????? 点击阅读原文,学习完整课程内容~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 CSS3 可以实现 3D 动画效果。要实现 3D 动画,需要使用 CSS3 中的 `transform` 属性。 要将一个元素变为 3D 元素,可以使用 `transform: perspective(depth)` 属性。depth 参数表示 3D 元素的透视深度,值越大,3D 效果越明显。 然后,可以使用 `transform: rotateX(angle)`、`transform: rotateY(angle)` 和 `transform: rotateZ(angle)` 属性来旋转 3D 元素。angle 参数表示旋转的角度,可以使用角度值或弧度值。 例如,以下代码将一个 div 元素变为 3D 元素,并以 y 轴为中心旋转 180 度: ```css div { transform: perspective(500px) rotateY(180deg); } ``` 还可以使用动画属性(如 `transition` 和 `animation`)来创建动画效果。例如,以下代码定义了一个持续 2 秒的 3D 旋转动画,转一圈后停止: ```css div { transform: perspective(500px) rotateY(0deg); transition: transform 2s; } div:hover { transform: perspective(500px) rotateY(360deg); } ``` 更多信息请参阅 MDN 文档:[3D 转换](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Transforms/Using_CSS_transforms) 和 [动画](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Animations)。 ### 回答2: CSS3是一种用于制作网页样式的技术,其中包括了实现3D动画的功能。通过使用CSS3的3D转换和过渡属性,我们可以在网页中创建各种令人惊叹的三维动画效果。 首先,我们可以使用`transform`属性来对HTML元素进行3D转换。例如,通过设置`transform: translateX(100px) translateY(100px) translateZ(100px)`,我们可以将一个元素在X、Y和Z轴上进行平移,并实现物体在3D空间中的移动。还可以使用`rotateX()`, `rotateY()`和`rotateZ()`来实现旋转效果。 其次,我们可以使用`transition`属性来为元素添加过渡效果。通过设置过渡的持续时间和过渡的属性,我们可以实现在一段时间内平滑地从一种状态过渡到另一种状态。例如,我们可以设置`transition: transform 1s`,使元素的转换效果在1秒内平滑进行。 另外,CSS3还提供了一些其他的3D效果,比如透视(`perspective`)和透视原点(`perspective-origin`)。透视可以让我们对元素进行近大远小的处理,使其看起来更贴近真实的3D效果。透视原点可以改变透视的起点位置。 最后,在CSS3中还有一些辅助属性可以帮助我们实现更复杂的3D动画效果。例如,`transform-style`属性可以指定元素是否保留其子元素的3D效果,`backface-visibility`属性可以指定元素的背面是否可见。 通过结合这些属性和技巧,我们可以创建出各种各样的令人惊叹的3D动画效果,为网页增添更多的视觉吸引力和交互性。 ### 回答3: CSS3可以实现各种各样的3D动画效果,为网页增添生动、时尚的展示效果。 首先,在CSS3中使用的3D变换函数包括位移、旋转、缩放和斜切等。这些函数可以通过设置不同的参数来对元素进行不同的变换,从而实现3D的效果。 其次,通过使用CSS3的透视属性perspective,我们可以将元素和整个场景建立起一个3D的参考框架。透视属性类似于人眼观察物体时的远近感,可以控制元素的远近程度,使得元素在3D空间中具有层次感。 再次,CSS3还提供了3D变换的过渡效果,通过设置过渡属性transition,可以让元素的3D效果在一定时间内平滑过渡。这可以通过设置不同的过渡时间和过渡效果函数,使得元素的变化更加流畅和自然。 此外,CSS3还提供了3D动画的关键帧动画属性animation,可以通过设置关键帧的名称、时间和属性值,让元素在一段时间内按照预设的动画路径运动或变色。 最后,CSS3还支持3D阴影、3D文字效果等特效。通过设置元素的阴影属性和文字属性,可以让元素在3D空间中产生立体感和层次感。 综上所述,CSS3提供了丰富的3D动画效果实现方式,通过简单的代码设置,可以轻松地为网页增添生动、时尚的3D展示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值