推薦一份不錯的清除默認樣式的CSS樣式

時間過得真快,離 Reset CSS 研究(八卦篇) 已經 3 個多月了。廢話少說,趕緊將技術篇寫完吧。

回顧與反思

第一份 reset css 是 Tantek 的 undohtml.css, 很簡單的代碼,Tantek 根據自己的需要,對瀏覽器的默認樣式進行了一些重置。

Eric 的也是如此。

YUI 除了 cssreset, 還配套有 cssfonts 和 cssbase. cssreset 清除默認樣式,cssfonts 和 cssbase 則將一些元素的默認樣式重設回來。

很長一段時間,* { margin: 0; padding: 0; }和 YUI cssreset 模糊了我對 reset 的理解,讓我認為 reset 就應該清除掉所有樣式,將一切歸零。

后來閱讀 Eric 的博客,發現 Eric 并不期望大家下載他的 reset.css 后直接拿去用。而是期待能根據具體需求,適量裁剪和修改后再使用。

世間的事總會有些戲劇化,Eric 的期待沒有如意。大家都想得到通用解決方案,期待銀彈。在這種渴求下,YUI cssreset 很徹底很干凈,廣為流傳。

更戲劇化的是,由于 YUI 的 cssfonts 和 cssbase 只考慮了西歐文字,對漢字的考慮不多。這導致國內用戶大部分只會用 cssreset. 比喻成武林秘籍的話,我們一直在用殘卷。

調節顯示器,有一個“重置為出廠設置”的選項。這有兩重含義:一是去掉當前的設置,二是還原為出廠時的設置。CSS Reset 也一樣,第一步是清除瀏覽器的默認樣式,第二步是重設瀏覽器的默認樣式。很明顯,* { margin: 0; padding: 0; }和 YUI cssreset 偏向于第一步。

這兩步并不是截然分開的。reset 的初始意圖,是想減少各種瀏覽器下默認樣式的差異。對于沒有差異的默認樣式,則可以根據情況,選擇性重置或不重置。比如 strong, 默認都是粗體,這符合預期,就可以不重置。又比如 a, 現在的主流瀏覽器下默認樣式無差別,但為了某些因素,比如可讀性,也會考慮將下劃線重置為無。

以上,是回顧,是反思,是接下來技術實現的指導思想。

技術實現

天下一大抄,抄來抄去,種種 reset 代碼,長得都差不離。這沒什么不好,不光解決了問題,還促進了技術傳播。

但從 2004 年到現在,已經一晃眼 5 年了。曾經的一些考慮,比如針對 ie 5.5 的代碼,目前已經可以大膽舍棄了。抄的過程中,努力去做到求實求證,努力求一份自己的理解,很難很難。但只要孜孜不倦,終究會有所獲,有所得,有所悟。

這是我和好友正淳一起整理的一份 reset.css:

/*
KISSY CSS Reset
理念:清除和重置是緊密不可分的
特色:1.適應中文 2.基于最新主流瀏覽器
*/
/* 清除內外邊距 */
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 結構元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
fieldset, lengend, button, input, textarea, /* form elements 表單元素 */
th, td { /* table elements 表格元素 */margin: 0;padding: 0;
}/* 設置默認字體 */
body,
button, input, select, textarea { /* for ie *//*font: 12px/1 Tahoma, Helvetica, Arial, "宋體", sans-serif;*/font: 12px/1 Tahoma, Helvetica, Arial, "5b8b4f53", sans-serif; /* 用 ascii 字符表示,使得在任何編碼下都無問題 */
}h1 { font-size: 18px; /* 18px / 12px = 1.5 */ }
h2 { font-size: 16px; }
h3 { font-size: 14px; }
h4, h5, h6 { font-size: 100%; }address, cite, dfn, em, var { font-style: normal; } /* 將斜體扶正 */
code, kbd, pre, samp, tt { font-family: "Courier New", Courier, monospace; } /* 統一等寬字體 */
small { font-size: 12px; } /* 小于 12px 的中文很難閱讀,讓 small 正常化 *//* 重置列表元素 */
ul, ol { list-style: none; }/* 重置文本格式元素 */
a { text-decoration: none; }
a:hover { text-decoration: underline; }abbr[title], acronym[title] { /* 注:1.ie6 不支持 abbr; 2.這里用了屬性選擇符,ie6 下無效果 */border-bottom: 1px dotted;cursor: help;
}q:before, q:after { content: ''; }/* 重置表單元素 */
legend { color: #000; } /* for ie6 */
fieldset, img { border: none; } /* img 搭車:讓鏈接里的 img 無邊框 */
/* 注:optgroup 無法扶正 */
button, input, select, textarea {font-size: 100%; /* 使得表單元素在 ie 下能繼承字體大小 */
}/* 重置表格元素 */
table {border-collapse: collapse;border-spacing: 0;
}/* 重置 hr */
hr {border: none;height: 1px;
}/* 讓非ie瀏覽器默認也顯示垂直滾動條,防止因滾動條引起的閃爍 */
html { overflow-y: scroll; }

用途在注釋里都標明了,就不多解釋。測試頁面在這里:CSS Reset Test. 這份測試頁面花了我們很大心血,如果轉載,請注明下出處,呵呵。

先說明下測試過的瀏覽器:IE 6+, Firefox 3.5+, Safari 4+, Chrome 2+, Opera 10+

下面解釋一些和 YUI cssreset 的差異點:

  1. 清除內外邊距的元素,去掉了 div, code(在測試瀏覽器中,沒發現有邊距), 增加了 button(感覺是 YUI 遺漏了).
  2. 去掉了 YUI 里對 html 顏色和背景色的設置。在測試瀏覽器中,沒有發現差異。(要設的話,推薦background: transparent
  3. 對于 address, caption, …, em, strong 等文本格式元素,做了調整。保留了 strong 和 th 的粗體。
  4. 對 abbr 和 acronym 做了調整,使得在非 ie6 下可視性更好。
  5. 去掉了 sup 和 sub 的樣式,直接用瀏覽器默認的即可。
  6. 對于 input, select, textarea 表單元素,去掉了針對 ie 的 inherit, 只保留了 font-size 的 inherit hack. 因為其它 hack 經測試已失效。
  7. 增加了一些元素的默認樣式。

此外,對整體代碼的組織形式做了調整,按照元素的類別將代碼進行了分組。

如何使用

請記住:永遠不存在萬能解決方案,永遠沒有銀彈。

轉載于:https://www.cnblogs.com/ymj0906/archive/2013/04/02/2994591.html

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

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

相關文章

python深淺拷貝

在python中,對象賦值實際上是對象的引用。當創建一個對象,然后把它賦給另一個變量的時候,python并沒有拷貝這個對象,而只是拷貝了這個對象的引用。 所以一個結構類型被賦給另外一個對象的時候,盡可能不使用 &#xff…

Flash中的SLC/MLC/MLC--基礎

參考 1.http://www.upantool.com/jiaocheng/qita/2012/slc_mlc_tlc.html 2.http://www.2ic.cn/html/10/t-432410.html 3.http://kms.lenovots.com/kb/article.php?id15382 4.http://www.albertknight.com/222.html 5.http://ssd.zol.com.cn/371/3716632.html 6.這個圖比較多 h…

python定義對象的比較方法

有時候我們需要比較兩個對象。比如哪個對象大,哪個對象小。如果我們不告訴python如何比較,那么Python是不知道如何進行比較的。 下面提供實例 #__eq__(self,other): #在使用比較運算符比較兩個對象是否相等的時候會調用這個方法。 #如果是相等,那么應該返…

關于Oracle Insert 語句的子查詢 和 with check option的用法

今日睇ocp教程 發現 insert語句還可以子查詢例如:INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees where department_id 50 )VALUES (9999…

apple mac 下使用機械鍵盤的辦法,鍵盤映射工具軟件,apple mac Mechanical keyboard

apple mac 下使用機械鍵盤的辦法,鍵盤映射工具軟件,apple mac Mechanical keyboard 想在蘋果電腦 mac 系統下使用 機械鍵盤,大部分機械鍵盤不是為mac設計的,所以需要用軟件做一下鍵盤映射。 推薦使用這個:https://pqrs…

Python中鍵映射多個值的方法:defaultdict

Python中鍵映射多個值的方法有兩種: 想保持元素的插入順序就應該使用列表; 想去掉重復元素就使用集合并且不關心元素的順序問題的話應該使用set from collections import defaultdictmapping defaultdict(list)mapping [key].append(value)mapping d…

該不該讓Google收錄WordPress的目錄頁和標簽頁?

只要有一點SEO知識的 站長都會注意利用相關文件和元標簽來控制Google對網站的收錄,對于WordPress網站來說,除了我們主動添加的內容頁面,Google還會收錄目錄歸檔頁,標簽歸檔頁,時間歸檔頁,以及作者歸檔頁。這…

【原創】MapReduce編程系列之表連接

問題描述需要連接的表如下:其中左邊是child,右邊是parent,我們要做的是找出grandchild和grandparent的對應關系,為此需要進行表的連接。 Tom Lucy Tom Jim Lucy David Lucy Lili Jim Lilei Jim SuSan Lily Green Lily Bians Green…

python logging模塊簡單使用

logging 是線程安全的,也就是說,在一個進程內的多個線程同時往同一個文件寫日志是安全的。 但是多個進程往同一個文件寫日志不是安全的。 import loggingLOG_FORMAT "%(asctime)s - %(levelname)s - %(message)s" DATE_FORMAT "%m/%d/…

OpenACC 中parallel 和kernels的區別

Kernels構件 Kernels構件源于PGI Accelerator模型的region構件。嵌套kernels構件里的循環可能會被編譯器轉換成能在GPU上高效并行的部分。在這個過程中有三步。 1:判斷并行中遇到的循環。 2:把抽象的并行轉換成硬件上的并行。對于NVIDIA CUDA GPU&#…

ORACLE基本SQL語句-查詢篇

一、普通查詢 /*查詢表數據*/select * from STU /*取出前3行數據*/select * from stu where ROWNUM<3 /*模糊查詢*/select * from stu where stu_id like stu001% 說明&#xff1a;通配符“%”代表一個或者多個字符&#xff0c;通配符“_”代表一個字符。 /*別名*/select S…

三次握手建立失敗的幾種情況以及三次握手的理解

上面的圖是阻塞式socket進行通信的過程&#xff0c;阻塞的時候是操作系統內核網絡協議棧在工作 調用 connect 函數將激發 TCP 的三次握手過程&#xff0c;而且僅在連接建立成功或出錯時才返回。其中出錯返回可能有以下幾種情況&#xff1a; 1、三次握手無法建立&#xff0c;客…

db_name,instance_name,service_names,db_domain,dbid,oracle_sid等區別與聯系

最近整理了一篇文章&#xff1a;oracle listener 有網友對數據庫是否顯式設置了instance_name和service_names提出疑問。 由此引發出db_name,instance_name,oracle_sid等等這些常見的參數都代表什么意思&#xff0c;怎么取值的&#xff0c;有什么區別&#xff1f; SQL> sele…

檢測版本更新

如果我們要檢測app版本的更新&#xff0c;那么我們必須獲取當前運行app版本的版本信息和appstore 上發布的最新版本的信息。 當前運行版本信息可以通過info.plist文件中的bundle version中獲取&#xff1a; [cpp] view plaincopy NSDictionary *infoDic [[NSBundle mainBundle…

linux 啟動/關閉多個py腳本

后臺運行腳本 需求&#xff1a;很多時候我們會在 linux 服務器上執行 python 腳本&#xff0c;然而腳本程序執行的時間可能比較長&#xff0c;當耗時過長的情況下&#xff0c;我們使用 ssh 遠程登錄到 linux 服務器上容易造成超時自動斷開連接&#xff0c;當用戶注銷時&#x…

在熟練使用2B鉛筆前,請不要打開Axure

在互聯網產品領域&#xff0c;Axure已成為產品經理、產品設計師以及交互設計師的必備工具&#xff0c;從某種程度講&#xff0c;Axure幫助我們建立低保真模型&#xff0c;便于與用戶的需求驗證&#xff0c;也幫助我們構思交互細節&#xff0c;使前端和開發人員更容易理解我們的…

啟用isqlplus

iSQL*Plus是sqlplus基于web方式發布的&#xff0c;要使用它只要在服務器上開啟即可&#xff1a; [oraclelocalhost ~]$ isqlplusctl start perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE (unset), LC_ALL (unset)…

YUI 的模塊信息配置優先級關系梳理

背景 YUI的配置參數較多&#xff0c; 可以在好幾個地方配置一個module的相關信息&#xff0c; 如&#xff1a; //在全局配置&#xff0c; 所以YUI實例共享 YUI_config {modules: {w-autcomplete: {requires: [module1],path: test1.js,}},groups: {modules: {w-autocomplete: …

echarts 怎么知道鼠標點擊的哪根柱子

有個需求&#xff0c;點擊柱子&#xff0c;然后得到該柱子的信息&#xff0c;然后展示這個機房的時序圖。 第一步卡住了&#xff0c;就是不知道如何獲取柱子的序號。后參考&#xff1a;https://blog.csdn.net/zt_fucker/article/details/72461572?utm_sourceblogxgwz1 得到思路…

Oracle經典sql語句總結@sql-plus重點函數串講與sql語句案例@中文排序詳講).doc

1.經典的select sql語句 //注意&#xff1a;包含空值的數學表達式求出的結果為空值 SQL> select salcomm from emp; //連接員工編號與員工姓名這兩個字段 SQL> select empno||ename as "員工編號和員工姓名" from emp; //查詢去掉重復行的員工部門編號 SQL>…