1. 程式人生 > >兩個常見的 Affix 互動問題

兩個常見的 Affix 互動問題

提醒:本文最後更新於 759 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

這不是一篇技術文章,所以不深究具體的技術實現。我一直認為只要大家認識到了問題的存在,如何解決它就不是問題。

Affix 是指某元素跟隨頁面滾動的效果,通常當滾動條滾動到一定距離時才觸發。css3 新增的「position: sticky」非常適合用來實現 Affix,但現階段各瀏覽器預設都沒啟用(後面會介紹),所以現在一般用「position: fixed」和 JS 程式碼來實現它。這裡有一個簡單的例子,大家可以先看下,看完我接著介紹這個例子中的兩個問題:

瀏覽器可視高度太小

拖小剛才頁面視窗會發現,當「右邊欄高度 > 瀏覽器可視區域高度」時,處於 fixed 狀態的右邊欄沒辦法完整顯示。針對這個問題,最簡單的策略是「發現高度不夠,不 fixed 右邊欄」。這樣使用者至少能通過滾動頁面來看完右邊欄。個人覺得,如果右邊欄內容不多,大部分使用者不會遇到這種情況時,這樣處理就足夠了,如:

豆瓣影評頁Apple 官網詳情頁Yahoo 首頁則採用了相對複雜的處理策略,大家可以自行研究。

說到這個,我不得不吐槽另外一件事:某網站的浮層都是居中 fixed,某些浮層特別高,在我 1280 * 800 解析度的筆記本上根本顯示不全,每次為了點關閉或者確定按鈕,還得縮小頁面,體驗十分糟糕。

覆蓋頁面底部模組

另外一個問題是,滾動頁面接近底部時,如果「右邊欄高度 > 瀏覽器可視區域高度 - 底部模組高度」,fixed 右邊欄會覆蓋在底部模組之上,不但不美觀,還可能會擋住一些連結。這個問題也非常普遍,如:

wpjam來源頁面

又一個:

douban來源頁面

我覺得,這個問題要不要修,也取決於網站具體情況。上面兩張圖片是我故意把視窗拖很小截的,正常使用沒問題,修不修無所謂。但如果右邊欄很高,大部分使用者都會遇到這個問題時,那還是建議修一下。最常見的修復策略如下圖所示:

apple來源頁面

position: sticky

這是一個新的 css3 屬性,表現類似 position: relative 和 position: fixed 的合體:目標區域在頁面中可見時,它的行為類似於 position: relative;否則像 position: fixed 一樣跟隨頁面滾動。可以看到,sticky 的行為與用 JS 實現 Affix 的思路是一樣的。

Chrome 23+ 和 Firefox 26+ 都支援這個屬性,不過都需要手動開啟:

  • Chrome:進入 chrome://flags,啟用「experimental Web Platform features(實驗性網路平臺功能)」;
  • Firefox:進入 about:config,將「layout.css.sticky.enabled」選項值設定為 True;

更新:Chrome 35+ 移除了這個屬性;但 Chrome 56+ 又加回來了。via

它的使用方法很簡單,像下面這樣:

.aside {
    position : sticky; 
    top : 0;
}

這裡有一個使用 position: sticky 實現的 Affix,沒有使用 JavaScript。這個例子依然不完美,但比最初版已經好很多了,遺憾的是考慮到瀏覽器相容性,現在還不能用於實際專案。

最後,發一個使用 JavaScript 解決了本文提到問題的 Affix。程式碼未封裝僅做示意,可以看到要新增的程式碼並不多,但可以顯著提高使用者體驗。類似的場景還有不少,以後再慢慢寫成一個系列。

--EOF--

提醒:本文最後更新於 759 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

常見Affix 互動問題

提醒:本文最後更新於 759 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 這不是一篇技術文章,所以不深究具體的技術實現。我一直認為只要大家認識到了問題的存在,如何解決它就不是問題。 Affix 是指某元素跟隨頁面滾動的效果,通常當滾動條滾動到一定距離時才觸發。css3 新增的「posit

PHP常見不常用的方法 method_exists call_user_func

php class str log 索引 truct all array blog method_exists判斷方法是否存在 <?php class F{ public function __construct(){ if(method_

github上傳程式碼失敗的常見異常

最近在將程式碼上傳到github的倉庫中遇到了兩個異常,下面是具體的異常以及解決的命令 1.拒絕合併不相關的東西 異常顯示 Git Pull Failed: fatal: refusing to merge unrelated histories 解決方法: 在相應的目錄(也就

常見tomcat警告分析

1. 警告描述: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:XXX

一道面試題:通過wait和notify的執行緒互動輸出thread1-1...thread1-5,thread2-6...thread2-10...

這是一道關於多執行緒的面試題,好久沒有做過這種多執行緒的題了,手有點生,那麼就來敲一敲 package threadDemo; /* * 多執行緒的交叉列印 */ public class

程式模擬互動,出現No route to host異常

(本人小白,寫文章只為記錄自己學習過程,同時記錄一些遇到的問題,雖然很低階,各位大神不喜勿噴)     今天又寫了兩個程式模擬兩臺計算機在網路上的連線互動,一個模擬伺服器接收端,一個模擬客戶端的接收,結果出現No route to host異常。 這個異常從來沒見過啊,然後

常見Qt編譯錯誤的解決

作者:朱金燦     如果在電腦上安裝了兩個Qt版本,在編譯一個工程時有可能出現如下的編譯錯誤:ERROR: failed to refresh moc step forqtpropertybrowse

Unity3D 和 Android 互動時遇到的常見問題

CommandInvokationFailure: Failed to re-package resources. E:\android\android-sdk-windows\android-sdk-windows\build-tools\25.0.2\aapt.exe package

C#.NET常見問題(FAQ)-如何判斷類是否相同類型

cnblogs 空間 ont -s 交流 在線 下載 c# 教學視頻 可以用is方法判斷是否是一個類 ?更多教學視頻和資料下載,歡迎關註以下信息: 我的優酷空間: http://i.youku.com/acetaohai123 ?我的在線

常見的語音互動平臺的簡介和比較

1.概述 最近做了兩個與語音識別相關的專案,兩個專案的主要任務雖然都是語音識別,或者更確切的說是關鍵字識別,但開發的平臺不同, 一個是windows下的,另一個是android平臺的,於是也就選用了不同的語音識別平臺,前者選的是微軟的Speech API開發的,後者則選用 的是CMU的poc

ajax用post請求後臺controller實現前端後臺互動引數 ,後臺controller接收處理

PS→無奈:生氣,就是拿別人的過錯來懲罰自己。原諒別人,就是善待自己。  前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1",

紅外通訊模組、NEC紅外收發模組——學習之三——微控制器互動控制小車

先上兩個圖: 微控制器A: 微控制器B: 現在實現的功能的是: 微控制器A控制微控制器B完成一定的任務,包括以下幾點: 微控制器A作為遙控器,資料的傳送端 微控制器A有微控制器和紅外線模組組成,完成的功能是:微控制器控制紅外模組,使得紅外模組向外傳送控

JVM記憶體結構--新生代及新生代裡的Survivor區(下一輪S0與S1交換角色,如此迴圈往復)、常見調優引數

轉自http://www.cnblogs.com/duanxz/p/6076662.html 一、為什麼會有年輕代   我們先來屢屢,為什麼需要把堆分代?不分代不能完成他所做的事情麼?其實不分代完全可以,分代的唯一理由就是優化GC效能。你先想想,如果沒有分代,那我們

web前端——ajax提交後臺controller實現前端後臺互動(2) 傳引數 ,後臺controller接收處理

前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1", "keywordId":"26"

關於數字順序顛倒函式的幾種常見錯誤

在我沒學指標之前,編寫兩個數字顛倒的這個函式時,我感覺沒有太大的問題,但是老師給我們講了指標的相關的知識後,這個函式的問題就出現了以下問題: (前提是不允許在函式中使用列印函式)第一個函式一直到第三個函式的錯誤都是沒有把數字換過來,例如在下面這個主函式中,輸入a=10,b=

ubuntu下cmake常見錯誤的解決

今天在用原始碼安裝mysql的時候遇到下面的兩個問題 一、提示“CMAKE_CXX_COMPILER-NOTFOUND ”。 具體形式: Check for working CXX compiler: CMAKE_CXX_COMPILER-NOTFOUND  CM

MFC中不同視窗之間的資料互動

從MFC的一個視窗A控制元件中得到的資料要在另一個視窗B中進行顯示,首先要確保控制元件的資料儲存的變數在這兩個控制元件中都能使用,一般建議將該變數設為全域性變數。然後要將在A視窗的.CPP檔案中新增顯示函式即可。 1.全域性變數的設定: 建議個人最好自己建立一個”Gl

net-snmp常見錯誤及解決辦法

第一個: Warning: noaccess control information configured.   It's unlikely this agent can serve any usefulpurpose in this state.   Run "snmpc

Appium移動端UI自動化中,如果需要APP互動操作的實踐經驗

轉載至:http://www.cnblogs.com/appstest/p/5088877.html 前段時間在用Appium做UI自動化,碰到一個原來沒有碰到的問題,原來做的專案都是單獨的APP操作。 在目前的專案中,有兩個APP,兩個APP需要互動操作

如何使用Intent建立互動的Activity

                                                         作者:段興              2014-5-27 1  :建立一個最基礎的android application 比如MyFisrtApp,細節及步