1. 程式人生 > 實用技巧 >剛學會 HTML5 不久,最近用 CSS3 實現了熱點地圖動畫

剛學會 HTML5 不久,最近用 CSS3 實現了熱點地圖動畫

市面上大多數的熱點地圖,都是以 JavaScript 來做的,但是使用 CSS3 製作的熱點地圖倒還真的挺少見的。

其實 CSS3 的功能也很強大,能幫助我們實現很多用 JavaScript 實現的效果,最近小編剛學會 HTML5 和 簡單的 CSS3,在這裡用 CSS3 實現了熱點地圖動畫,效果如下:

下面給大家初步講講,如何用 CSS3 製作一個熱點地圖,你可以學到 HTML 的佈局、HTML 列表、CSS 選擇器、CSS3 動畫、CSS3 的 2D 轉換等,對於練習 HTML、CSS 也有很好的幫助。

知識點

  • 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 這樣的顏色類就好了。現在我們將其他的地點以及樣式增加上去。

小編學習的這個《CSS3 實現熱點地圖動畫》課程,目前正在限時免費中,感興趣的小夥伴趕緊點選瞭解更多,進行學習吧!

說不定做出來的地圖比小編的更好看~