
客人看完服務介紹,想問價格,卻要捲回最上面找聯絡方式,很多人就這樣離開了。在畫面邊緣放一組一直跟著畫面走的按鈕,LINE、電話隨時點得到,是公司網站很划算的小功能。
這篇做一組常見的浮動按鈕:
- 電腦版:固定在畫面右側中間,直向排列。
- 手機版:變成畫面最下方的一排按鈕,手指好按。
- 回到頂端:往下捲一段才出現。
- 分享:手機上叫出系統的分享選單,電腦上沒有分享功能時改成複製網址。
HTML
HTML
<nav class="float-buttons" aria-label="快速聯絡">
<a class="float-btn float-line" href="https://line.me/R/ti/p/@你的LINE官方帳號ID" target="_blank" rel="noopener">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16v11H10l-5 4v-4H4z"/></svg>
<span>LINE</span>
</a>
<a class="float-btn float-phone" href="tel:+886212345678">
<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="7" y="2" width="10" height="20" rx="2"/><path d="M11 18h2"/></svg>
<span>電話</span>
</a>
<button class="float-btn float-share" type="button">
<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><path d="M8.7 13.5l6.6 4M15.3 6.5l-6.6 4"/></svg>
<span>分享</span>
</button>
<a class="float-btn float-top" href="#">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 19V5M5 12l7-7 7 7"/></svg>
<span>頂端</span>
</a>
</nav>要改的地方:
- LINE 連結:官方帳號用
https://line.me/R/ti/p/@後面接帳號 ID(ID 開頭的 @ 要保留)。在 LINE 官方帳號的後台可以找到「加入好友」的網址,直接貼過來最保險。 - 電話:
tel:後面用國際格式,台灣是+886,區碼去掉開頭的 0。例如 02-1234-5678 寫成tel:+886212345678,手機一點就會撥號。 - 圖示是用幾條線畫的簡單 SVG,顏色會跟著文字顏色走,不用另外準備圖片。每個按鈕都保留文字,客人一看就知道是什麼,報讀軟體也念得出來。
CSS
CSS
.float-buttons {
position: fixed;
right: 16px;
top: 50%;
transform: translateY(-50%);
z-index: 999;
display: flex;
flex-direction: column;
gap: 8px;
}
.float-btn {
--float-bg: #1e8a8a;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 2px;
width: 64px;
height: 64px;
padding: 0;
border: 0;
border-radius: 16px;
background: var(--float-bg);
color: #fff;
font: inherit;
font-size: 13px;
text-decoration: none;
cursor: pointer;
box-shadow: 0 4px 12px rgb(0 0 0 / 20%);
}
.float-btn svg {
width: 24px;
height: 24px;
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
.float-line { --float-bg: #2e9e4f; }
.float-phone { --float-bg: #ff6b35; }
/* 有些佈景主題會幫所有 <button> 設顏色,加 !important 才蓋得過 */
.float-buttons .float-btn {
background-color: var(--float-bg) !important;
color: #fff !important;
}
.float-btn:hover { filter: brightness(1.1); }
.float-btn:focus-visible { outline: 3px solid #ffd54a; outline-offset: 2px; }
.float-btn:focus:not(:focus-visible) { outline: none; }
.float-top {
visibility: hidden;
opacity: 0;
transition: opacity 0.3s, visibility 0.3s;
}
.float-top.is-visible {
visibility: visible;
opacity: 1;
}
@media (max-width: 767px) {
.float-buttons {
top: auto;
right: 0;
bottom: 0;
left: 0;
transform: none;
flex-direction: row;
gap: 0;
padding-bottom: env(safe-area-inset-bottom);
background: #1e8a8a;
}
.float-btn {
flex: 1;
width: auto;
height: 56px;
border-radius: 0;
box-shadow: none;
}
body {
padding-bottom: calc(56px + env(safe-area-inset-bottom));
}
}
@media (prefers-reduced-motion: no-preference) {
html { scroll-behavior: smooth; }
}
@media print {
.float-buttons { display: none; }
}重點說明:
position: fixed讓按鈕固定在畫面上,捲動時不會跟著跑走。top: 50%加translateY(-50%)是垂直置中。- 按鈕顏色用 CSS 變數
--float-bg,每顆按鈕只要改變數就換色。 - 分享是
<button>,佈景主題可能會幫它「加料」。我們在 Twenty Twenty-One 測試時,分享按鈕被佈景主題改成別的顏色、多了一大圈內距,點完還出現虛線框。所以 CSS 裡把padding歸零,顏色加上!important,滑鼠點完不顯示外框(用鍵盤 Tab 選到時才顯示黃色外框)。 - 按鈕 64px,手機底部列 56px 高。手指點的按鈕至少要 44px 左右,太小很容易點錯。
- 手機版變成底部按鈕列,並且在
body下方留出同樣的高度,網頁最下面的頁尾才不會被按鈕蓋住。 env(safe-area-inset-bottom)是 iPhone 底部橫條的高度,按鈕列會往上讓開。這個值要在網頁的 viewport 設定加上viewport-fit=cover才會有數字,沒有加的話就是 0,不影響其他功能。- 回到頂端平常是隱藏的,加上
is-visible這個 class 才淡入。 scroll-behavior: smooth讓「回到頂端」平滑捲上去;開了「減少動態效果」的人則是直接跳到頂端。- 列印網頁時把按鈕藏起來。
JavaScript:回到頂端、分享
JavaScript
const floatTop = document.querySelector('.float-top');
const floatShare = document.querySelector('.float-share');
// 往下捲超過 600px 才顯示「回到頂端」
window.addEventListener('scroll', () => {
floatTop.classList.toggle('is-visible', window.scrollY > 600);
}, { passive: true });
// 回到頂端:用程式捲上去,網址後面不會多一個 #
floatTop.addEventListener('click', (e) => {
e.preventDefault();
window.scrollTo({ top: 0 });
});
// 手機叫出系統分享選單;沒有分享功能的瀏覽器改成複製網址
floatShare.addEventListener('click', async () => {
const data = { title: document.title, url: location.href };
if (navigator.share) {
try {
await navigator.share(data);
} catch (e) {
// 使用者按了取消,不用處理
}
return;
}
try {
await navigator.clipboard.writeText(location.href);
floatShare.querySelector('span').textContent = '已複製';
setTimeout(() => { floatShare.querySelector('span').textContent = '分享'; }, 2000);
} catch (e) {
prompt('請複製這個網址:', location.href);
}
});- 回到頂端:連結本身是
href="#",沒有 JavaScript 也能回到最上面;有 JavaScript 時改用程式捲動,網址才不會多出一個#,客人之後分享出去的網址比較乾淨。捲動的速度照 CSS 的scroll-behavior,開了「減少動態效果」就直接跳上去。 - 分享:手機瀏覽器大多支援
navigator.share,按下去會出現 LINE、Facebook、訊息等選單,讓客人自己選要傳到哪裡,不用每個平台各放一顆按鈕。 - 電腦上不支援的瀏覽器,改成把網址複製到剪貼簿,按鈕上的字暫時變成「已複製」。連複製都不允許時(例如沒有用 https 的網站),才跳出視窗讓人自己複製。
passive: true告訴瀏覽器這段程式不會阻止捲動,手機捲動比較順。
放進 WordPress
- CSS:貼到 外觀 → 自訂 → 附加的 CSS;區塊佈景主題到 外觀 → 編輯器 → 樣式,在「更多」選單裡找「附加的 CSS」。
- HTML 和 JavaScript:用
wp_footer輸出在每一頁的最下方。放在子佈景主題的functions.php,或用 Code Snippets 外掛新增一段:
PHP
add_action( 'wp_footer', function () {
?>
<!-- 這裡貼上面的 HTML -->
<script>
// 這裡貼上面的 JavaScript
</script>
<?php
} );把兩段註解換成上面的 HTML 和 JavaScript 就完成了。我們在測試網站的 Twenty Twenty-Five 和 Twenty Twenty-One 都放過,電腦版在右側、手機版在底部,回到頂端和分享都正常。
使用時要注意
- 不要擋到內容。電腦版放在右側中間,螢幕比較窄的筆電上可能會蓋到文章右邊的字,可以把按鈕縮小,或在 1200px 以下就改成底部列(把
767px改大)。 - 不要和其他浮動的東西撞在一起。網站如果已經有聊天機器人、Cookie 同意視窗,位置要錯開。
- 按鈕不要太多。三、四個最清楚,全部社群都放上去,客人反而不知道要點哪個。
- LINE、電話要真的有人回。按鈕放得再好,打不通、已讀不回,客人一樣會走。
延伸閱讀
- HTML 錨點連結教學:用 id 跳到指定位置、平滑捲動與固定頁首遮擋的解法
- 連結另開新視窗怎麼寫?target=_blank 與 noopener 用法
- RWD 響應式網頁怎麼做?viewport 語法與 CSS 基本寫法完整教學
讓客人「想問的時候馬上找得到你」,是網站帶來詢問最直接的方法。正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站會依照你的接單方式規劃聯絡動線,台北與全台客戶也歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。