《圖解CSS3:核心技術與案例實戰》——1.3節漸進增強

本節書摘來自華章社區《圖解CSS3:核心技術與案例實戰》一書中的第1章,第1.3節漸進增強,作者 大漠,更多章節內容可以訪問云棲社區“華章社區”公眾號查看

1.3 漸進增強
第一次聽到“漸進增強”(Progressive Enhancement)一詞是在前端重構交流會上。漸進增強并不是一種技術,而是一種開發的方式,更是一種Web設計理念。首先思考一個問題:“網站是否需要在每個瀏覽器中看起來都一樣?”帶著這個問題來看漸進增強。
1.3.1 漸進增強與優雅降級
正如前面所言,漸進增強是一種開發方式,更是一種設計理念。在編寫Web頁面時,首先保證最核心的功能實現,讓任何低端的瀏覽器都能看到站點內容,然后考慮使用高級但非必要的CSS和JavaScript等增強功能,為當前和未來的瀏覽器提供更好的支持,給用戶帶來更好的體驗。
在設計的時候,先考慮低端設備用戶能否看到所有內容,然后在此基礎之上為高端用戶進行設計。不僅為高端設備用戶提供一個完美的應用,也要為不同性能級別設備的用戶設計不同級別的不那么完美的應用。這稱為“優雅降級”。
目前而言,雖對“漸進增強”有所了解的人很多,但是要說普及或深入還遠遠沒到時候。在大家平時的設計思維中有一種極強的固定思維,也就是想讓網站在各個瀏覽器下表現一致。這種出發點本身并沒有什么問題,但是這樣會讓領先的瀏覽器的優勢無法充分顯示出來。
因此,從今天開始要改變制作Web站點的思維,讓網站能優雅降級,目標應該是——向盡可能多的用戶提供盡可能優質的用戶體驗。這跟用戶訪問網站使用方式無關,無論通過iPhone、高端的桌面系統、Kindle,還是閱讀器,用戶都能得到盡可能獨特且完美的體驗。
1.3.2 漸進增強的優點
“向盡可能多的用戶提供盡可能優質的用戶體驗”這一目標聽起來相當不錯。有的人制作Web站點時報怨,IE怎樣才具有CSS3的效果。誠然,我們不使用漸進增強也可以實現,如為一些舊瀏覽器提供一套兼容方案,確保頁面與現代瀏覽器保持一致。簡單來說就是在支持CSS3的瀏覽器中使用CSS3特性,在不支持的瀏覽器中另寫一套樣式來模擬CSS3效果,實現讓網站在所有瀏覽器都一樣。
可以說,通過這種方法只是讓低版本的瀏覽器渲染頁面更好看一點,并沒有得到實質性的提高。
因此,如果網站始終無法做到一模一樣,為什么不使用CSS3技術使它在現代瀏覽器上看起來更靚麗呢?當然,某些CSS3特性在不支持的瀏覽器中是“無法模擬”的,但使用漸進增強,就無須為了讓網站適合所有人而放棄這些技術。
CSS的漸進增強有別于CSS的hack。hack是瀏覽器廠商的一種手法,用來增強自己的競爭,而漸進增強起到錦上添花之效。所以前者應該盡量避免使用,而后者應該適當使用。
就樣式而言,漸進增強的對象是一些現代瀏覽器,漸進增強的一些屬性主要是CSS3的一些特性,或是IE低級版本不支持的一些屬性,或是其他一些特殊情況。淘寶網上的一個例子如圖1-7所示。


0f059090b0fc53edbac6ad0384358474dd8af69b

這里采用了CSS3的旋轉特性transform,鼠標移上去時,三角會實現旋轉的動畫效果,并改變方向。之前,要實現圖1-7所示的旋轉效果,需要一大串JavaScript腳本。而使用transform僅僅需要幾行代碼。

#site-nave .menu:hover .menu-hd {-webkit-transform: rotate(180deg);-webkit-transform-origin-x:50%;-webkit-transform-origin-y:30%;-moz-transform: rotate(180deg);-moz-transform-origin-x:50%;-moz-transform-origin-y:30%;-o-transform: rotate(180deg);-o-transform-origin-x:50%;-o-transform-origin-y:30%;-ms-transform: rotate(180deg);-ms-transform-origin-x:50%;-ms-transform-origin-y:30%;transform:rotate(180deg);transform-origin-x: 50%;transform-origin-y: 30%;
}

采用漸進增強能給現代瀏覽器用戶一個更好的體驗,在不支持CSS3的IE瀏覽器也能正常使用,只不過體驗會大打折扣。
以上只是一個簡單的例子,本書后面還會介紹CSS3漸進增強的案例,例如text-shadow文字陰影、border-radius圓角屬性、box-shadow盒陰影屬性、CSS3漸變背景和CSS3選擇器等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云云主機搭建網站攻略 - 云翼計劃

阿里云服務器(云主機)搭建網站攻略 - 云翼計劃 提示:此搭建攻略為2017版本,阿里云未跟新前。 最新搭建攻略請前往 Amaya丶夜雨博客 / 最新個人博客 https://www.amayaliu.cn 支持一下哦,謝謝。(9.5一…

用c語言遞歸函數做掃雷,【C語言基礎學習---掃雷游戲】(包含普通版+遞歸煉獄版)...

/*******************///以下是源文件game.c內容/*******************/#include"game.h"//初始化棋盤的實現void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){int i 0;int j 0;for (i 0; i < rows; i){for (j 0; j < cols; j){board…

記一次 .NET 某醫療器械 程序崩潰分析

一&#xff1a;背景 1.講故事前段時間有位朋友在微信上找到我&#xff0c;說他的程序偶發性崩潰&#xff0c;讓我幫忙看下怎么回事&#xff0c;上面給的壓力比較大&#xff0c;對于這種偶發性崩潰&#xff0c;比較好的辦法就是利用 AEDebug 在程序崩潰的時候自動抽一管血出來&a…

1251: 字母圖形 [水題]

1251: 字母圖形 [水題] 時間限制: 1 Sec 內存限制: 128 MB提交: 140 解決: 61 統計題目描述 利用字母可以組成一些美麗的圖形&#xff0c;下面給出了一個例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 這是一個5行7列的圖形&#xff0c;請找出這個圖形的規律&…

c語言 三角形三邊abc,C語言代碼輸入abc三個數,求一這3個數為邊長的三角形面積...

2011-01-04 回答#include #include #include #include #include int main(){float a 0.0;float b 0.0;float c 0.0;float s 0.0;double area 0.0;while(true){printf("input your date(a,b,c):");scanf("%f%f%f",&a,&b,&c);if(!isdigit((…

shell腳本中向hive動態分區插入數據

在hive上建表與普通分區表創建方法一樣&#xff1b; 1 CREATE TABLE dwa_m_user_association_circle(2 device_number string, 3 oppo_number string, 4 prov_id_oppo string, 5 area_id_oppo string, 6 dealer_oppo string, 7 short_call_nums bigint, 8 long3…

WPF效果第二百零二篇之TreeView帶連接線

前面文章中分享了TreeView支持多選;然而在項目上使用時,領導覺得不滿意:體現不了真正的從屬關系;既然領導都發話了;那就開整就行了;今天就再來個帶有連接線的TreeView效果:1、來看看TreeViewItem的Template:2、展開和收縮動畫:3、參考資料https://www.codeproject.com/tips/673…

ObjectTive C語言語法,[譯]理解 Objective-C 運行時(下篇)

本文來自網易云社區作者&#xff1a;宋申易所以到底 objc_msgSend 發生了什么&#xff1f;很多事情。看一下這段代碼&#xff1a;[self printMessageWithString:"Hello World!"];這實際上被編譯器翻譯成&#xff1a;objc_msgSend(self, selector(printMessageWithStr…

菜鳥學習MVC實錄:弄清項目各類庫的作用和用法

MVC模式即&#xff1a;模型&#xff08;Model&#xff09;-視圖&#xff08;View&#xff09;-控制器&#xff08;Controller&#xff09; Model &#xff08;模型&#xff09;&#xff1a;是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責數據庫中存取數據View…

SSL服務器

2019獨角獸企業重金招聘Python工程師標準>>> SSL 是一個安全協議&#xff0c;它提供使用 TCP/IP 的通信應用程序間的隱私與完整性。因特網的 超文本傳輸協議&#xff08;HTTP&#xff09;使用 SSL 來實現安全的通信。 在客戶端與服務器間傳輸的數據是通過使用對稱算…

微軟Skype Translator將支持阿拉伯語即時語音翻譯

據美國科技時代網(Tech Times)3月9日報道&#xff0c;日前&#xff0c;微軟旗下即時翻譯軟件Skype Translator再添新語種&#xff0c;微軟宣布Skype Translator已經支持阿拉伯語。Skype用戶可通過使用阿拉伯語即時翻譯與朋友、家人以及海外商業伙伴進行交流。 據報道&#xff0…

是什么讓.NET7的Min和Max方法性能暴增了45倍?

簡介在之前的一篇文章.NET性能系列文章一&#xff1a;.NET7的性能改進中我們聊到Linq中的Min()和Max()方法.NET7比.NET6有高達45倍的性能提升&#xff0c;當時Benchmark代碼和結果如下所示&#xff1a;[Params(1000)] public int Length { get; set; }private int[] arr;[Globa…

html標記語言 --框架

html標記語言 --框架六、框架1、什么是框架 框架將瀏覽器劃分成不同的部分&#xff0c;每一部分加載不同的網頁 實現同一瀏覽器窗口中加載多個頁面的效果。 語法格式<frameset>.......</frameset>2. 屬性2.1 cols使用“像素數”和%分割左右窗口&#xff0c;“*” 表…

c語言兔子洞,數據結構水題選講 - osc_y08db3kb的個人空間 - OSCHINA - 中文開源技術交流社區...

[Ynoi2011]ODT\(O(nlog^2n)\) 的做法非常顯然直接把樹重鏈剖分一下&#xff0c;每個點維護輕兒子的平衡樹就行但是這題 \(1e6\) 的數據范圍使得 \(O(nlog^2n)\) 沒那么容易卡過去(當然很多人卡過去了考慮給一個點很多重兒子那么若一個點有 \(k\) 個重兒子&#xff0c;修改復雜度…

centos 7.x systemd service 配置方法整理

一、存放路徑/etc/systemd/system二、service配置整理2.1 zookeeper.service[Unit]DescriptionZooKeeper ServiceAftersyslog.targetAfternetwork.target[Service]#使用shell腳本啟動的要用forking模式TypeforkingUserzookeeperGroupzookeeper#腳本啟動ExecStart/usr/local/zoo…

MAVEN集成測試環境搭建

1. MAVEN SVN HUDSON SONAR集成測試環境搭建、1.1 軟件準備 Hudson、Jenkins、Sonar1.2 軟件安裝 說明&#xff1a;本例均使用將應用程序部署至web容器下&#xff0c;Hudson和Sonar有其他部署啟動方式&#xff0c;如有需要請自行使用&#xff0c;本文不做贅述。1.2.1 安裝hu…

ubus c語言例子,openwrt之ubus例子

好一個icrootLEDE:/# ubus call test_ubus helloworld {"id":1,"msg":"hi","array":["a","b"]}{"id": 1,"msg": "hi","shuzu": ["a","b"]}文件目…

使用Spring訪問Mongodb的方法大全——Spring Data MongoDB查詢指南

1.概述 Spring Data MongoDB 是Spring框架訪問mongodb的神器&#xff0c;借助它可以非常方便的讀寫mongo庫。本文介紹使用Spring Data MongoDB來訪問mongodb數據庫的幾種方法&#xff1a; 使用Query和Criteria類JPA自動生成的查詢方法使用Query 注解基于JSON查詢在開始前&#…

mysqldump導出備份數據庫報Table ‘performance_schema.session_variables‘ doesn‘t exist

今天在bash進行本地數據庫往云端數據庫導數據的時候&#xff0c;在本地導出.sql文件這第一步就出現了錯誤問題&#xff0c;導出sql文件的命令&#xff1a; 1 mysqldump -u 用戶名 -p 數據庫名 > xxx.sql 在做這一步將數據導出的時候報了這么一個錯誤&#xff0c; 1 mysqldu…

在Identity框架中使用RoleBasedAuthorization

本文將介紹在 Identity 框架中如何使用 Sang.AspNetCore.RoleBasedAuthorization[1] 庫。核心介紹Identity 和 jwt 的基本配置我們在這里不再贅述&#xff0c;可以參考最后的項目樣例。核心的代碼主要為 IRolePermission 的實現。internal class MyRolePermission : IRolePermi…