CSS 有哪些暖心卻鮮為人知的屬性?
找到例子啦 http://sale.jd.com/act/azLPEJfYkn2Rd.html
-----------------------------------------------------------
pointer-events
很有js味道的一個屬性,把值設置為none可以讓元素不捕獲事件,可以理解為讓他看得見摸不著。之前jd某個活動頁使用了它,在頁面上蓋了一層長寬都100%的canvas,canvas裡面雪花飄零。
當時我還很納悶,到底用了什麼黑科技讓canvas浮在所有dom上面而滑鼠對頁面的操作絲毫不受影響,想了半天都沒想到怎麼用js來實現,最後發現居然簡簡單單一個css屬性就搞定了。
所以還是要多看標準啊- attr
&
剩餘話費40&
[data-unit]:after{
content: attr(data-unit);
color: #3b98e0;
}
http://jsbin.com/mehuqaqica/edit?html,css,output
IE不支持Can I use... Support tables for HTML5, CSS3, etc
2. currentColor是color屬性的值
.box{
width: 200px;
height: 200px;
color: #3b98e0;
border: 1px solid currentColor;
}
&
測試測試
&
JS Bin - Collaborative JavaScript Debugging
IE7,8不支持 Can I use... Support tables for HTML5, CSS3, etc
.box-1{
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
JS Bin - Collaborative JavaScript Debugging
4.selection 可設置文字被選擇時的樣式::selection {
background: #FE6E66;
color: #FFF;
}
JS Bin - Collaborative JavaScript Debugging
5.will-change 啟動GPU加速,增強頁面渲染性能使用CSS3 will-change提高頁面滾動、動畫等渲染性能 ? 張鑫旭
6.響應圖片
在不同設備像素比的屏幕下,自動載入2倍,3倍圖
background-image: image-set( url(test@2x.png) 2x, url(test@3x.png) 3x );
兼容性:http://caniuse.com/#search=image-set
通過ime-mode屬性控制文本欄位的輸入法編輯器的狀態:
ime-mode是CSS3中最新添加的屬性,更準確點說,是CSS Basic User Interface Module Level 3 (CSS3 UI)規範新添加的屬性,該屬性可以控制文本欄位的輸入法編輯器的狀態。IE瀏覽器從IE5開始就支持該屬性了哦,FireFox瀏覽器從FireFox3.0開始也支持該ime-mode屬性。不過chrome、opera、Safari瀏覽器還沒有開始支持該屬性。
名稱: ime-mode
值: auto | normal | active | inactive | disabled | inherit
初始值: auto
應用元素: text fields(文本欄位)
繼承性: no
下面是ime-mode各個值的說明:
auto : 默認值,不影響當前輸入法編輯器的狀態
normal : 輸入法編輯器的狀態應該是normal,這個值可以用於用戶樣式表來覆蓋頁面的設置。IE瀏覽器不支持該屬性
active : 輸入法編輯器的狀態初始時是激活的;輸入將一直使用該輸入法直到用戶切換輸入法。該屬性在Linux下不支持
inactive : 輸入法編輯器的狀態初始時是非激活狀態;除非用戶激活輸入法
disabled : 禁用輸入法編輯器;該輸入法編輯器也許不會被用戶激活
&
&
&
&
&
& &
&
上面的例子在IE5+或者FireFox3+瀏覽器中運行,不允許輸入中文。
這個屬性雖然很強大,但是在chrome、opera、safari瀏覽器中都不支持該屬性,所以在這些瀏覽器中還需要通過javascript來實現當用戶輸入中文時無法輸入到文本框中。
就說兩個CSS3的
- user-modify
css版的contenteditable
使用方法:
user-modify: read-only;
user-modify: read-write;
user-modify: write-only;
user-modify: read-write-plaintext-only;
其中read-only為默認值,write-only是來搞笑的,read-write和contenteditable="true"效果一致,read-write-plaintext-only和contenteditable="plaintext-only"效果一致(沒錯這屬性還有這個值但是還是草案中)。
至於兼容性么,就跟這玩意兒為人所知的程度一樣,貧乏得可憐,目前IE瀏覽器不明,FF只支持前三個屬性,Chrome高版本可以全部支持,但是全都要加上私有前綴。
適用場景的話,大概就是contenteditable的css版,想要做高度自適應的文本編輯框,又不想在粘貼複製的時候把html給複製進去。生產環境還是老老實實用js來搞吧。
- pointer-event
最常用的屬性:
pointer-event: none;
這個屬性的作用就是把元素變成「幻影」(逼格很高有沒有),看得見卻摸不著。
這屬性曾經火過一陣,起因是國外某推主說在頁面滾動時給body加上這個屬性能夠禁用hover從而有效提高FPS,還給出了相關測試數據。但是在各位網友的質疑和測試下發現實際效果不如數據展示的那麼美好,一是各家瀏覽器都有針對滾動時指針hover的優化,二是這個屬性會導致頁面無法響應觸屏,後來就不了了之了。
現在還在使用的場景大概只剩下通過pointer-event:none加上去除href屬性來360度無死角的禁用a標籤這一項了吧。
參考文章:
小tip: 如何讓contenteditable元素只能輸入純文本 ? 張鑫旭
CSS3 pointer-events:none應用舉例及擴展 ? 張鑫旭
object-fit 解決圖片變形問題。比如把長200寬600的圖片放在一長寬都是200的div裡面,然後css img{width:100%;height:100%;}你會發現圖片變形得慘不忍睹,這個時候只需要給img加上object-fit:cover屬性,再刷新看看圖片。
詳情搜索下object-fit
----------------------------
3月3日更新兼容ie方法
//返回object-fit的屬性值,ie返回undefined)
var img_object_fit = img.css("object-fit");
if (img_object_fit == undefined) {
//寫入只對ie可見的兼容代碼即可
} else {
//其他瀏覽器不等於undefined的時候執行代碼。一般就兼容這個屬性了
img.css({"width":100 + "%","height":100 + "%","object-fit": "cover"});
}
CSS 3 的 filter 想必大家都知道,可以做色調變和模糊處理之類高大上的效果,我個人網站的 2013 版 中的很多地方都應用了它。不過,我今天要講的是 backdrop-filter,它可以實現 filter 的絕大多數效果,但僅對背景生效。
比如:background-color: rgba(255, 255, 255, 0.5);
-webkit-backdrop-filter: blur(10px);
這兩行就能實現與 iOS 系統 UI 相同的毛玻璃透明效果,見下圖底欄區域:
不過,它目前僅支持 iOS 9 和 OS X El Capitan 的 Safari 瀏覽器。
用上述瀏覽器打開我博客(https://blog.dandyweng.com/)的任意文章可以即可看到效果。
mix-blend-mode
實現photoshop里的各種圖層疊加效果
https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode
可以做一些很炫的設計,比如:http://superfamous.com/
順便,看MDN的時候只需要把網址裡面的en-US換成zh-CN就可以查看對應的中文版了,只不過很多翻譯不全。限制 CSS 的作用範圍:contain。
------------------------------------------
簡介
先上一張圖看性能:
當我們對一個頁面進行布局時,性能瓶頸通常是 style、layout、paint。
一般情況下,瀏覽器會把 整個 DOM 作為 CSS 布局上下文,因此:當我們改變部分 DOM 的樣式時,也會影響到其他部分,並且沒有什麼方式來告訴瀏覽器哪些內容應該在範圍內哪些應該在範圍外。
假設你有如下頁面結構:
&
&
&
&
&
&
現在在 view 裡面新增一些元素,會影響頁面的 style、layout、paint:
&
&
&
&Check me out!&
&
&
在上面的示例中,所有的**節點(whole DOM)**均被影響,這就意味著,不論元素的 style、layout、paint 是否改變,都會重新計算他們的樣式和布局。
現代主流的瀏覽器都會做一些智能的判斷,最終決定哪些需要改變,哪些不需要改變。
不過,頁面布局是很複雜的,瀏覽器不一定能判斷到所有的情況。好消息是,一個新的 CSS 屬性 contain 把判斷的事情交給了開發者。
兼容性
文章來源
- CSS 新屬性 contain: 允許開發者限定瀏覽器 style、layout、paint的工作範圍 · Issue #13 · justjavac/the-front-end-knowledge-you-may-dont-know
div {
color: red;
border: 1px solid;
}
&邊框顏色&
這裡有很多文字,然後&文&字的&大&小都是不一樣的,有大有小,有小&有&大,反正很多的文字裡面大小就是&不一樣&的,那麼這個時候行高應該怎&么設置&呢,應該就&這樣&比較好……&&
p {width: 250px;}
span {font-size: 40px;}
em {font-size: 80px;}
strong {font-size: 18px;}
p {line-height: 12px;}
/* p {line-height: 120%;} */
/* p {line-height: 1.2em;} */
/* p {line-height: 1.2;} */
this is an example.&&
/* p {font-variant: small-caps;} */
/* p {text-transform: uppercase;} */
/* p {text-transform: lowercase;} */
p {text-transform: capitalize;}
也不知道這三個算不算,一時也想不出來什麼東西,就這樣吧……反正吧,我覺得CSS就是一個看怎麼玩的東西……
哦,忘了說了,感謝邀請……偽類 +1
善用後可以把html結構變得特別簡單清晰。
我要說的是zoom,談不上鮮為人知,但確實太過暖心,莫怪強答啦~
懟了好久的項目終於要上線了!產品跑過來:不好意思啊危哥,有點大…尼瑪什麼?
文字有點大,還有這些高度,間距啊,說白了就是整體都大…能不能統一把所有的界面再調小一點點。所有的,what!尼瑪白天一天沒動靜偏偏逮著下班說。說完嫻熟的按了下我的鍵盤,你看,瀏覽器縮放90%的效果,就是這個feel…
沒辦法趕緊開干,因為特么的最後還加了一句「老闆說的」,還有縮放後界面確實顯得精緻了不少,畢竟我自己也喜歡好看的…
那麼多頁面一點點調我是打死不考慮的。先是想到的是scale進行縮放,一番嘗試後雖然能勉強達到效果,但也帶來不少新的問題,果斷放棄了…
後來想到了zoom,這玩意之前是IE的私有屬性,IE6時代常用來觸發hasLayout解決各種疑難雜症,現在IE6已廢,所以平常基本不用到(現在不再是IE私有屬性,只有Firefox不支持)。
嘗試後簡直驚喜呀!不但完美實現了我需要的效果,關鍵還特么綠色無害!下面圖片是使用scale和zoom表現上最直觀的一個差異(scale和zoom都能對寬高進行縮放,但當寬高為auto或用百分比表示時,zoom就「無效了」,利用這種「無效」,當使用zoom對html縮放後依然可以保持通欄效果,有時候這正是我們想要的),其實它們還有好多不一樣的地方,研究下你會發現還挺有意思
font-family: -apple-system;
在 iOS 和 macOS 的 Safari 和 web view 中使用系統默認 UI 字體。/* 如果要兼容 10.10 請使用 -apple-system-font。*/
line-height: 1.5;
屬性值不加單位表示行距倍數,自動適應font-size的各種單位。
-webkit-font-smoothing:
- none :文字模糊
- antialiased:變得非常平滑
- 等共六個屬性
註:-webkit-font-smoothing在MacOS上才有效果
checkbox的三種屬性:
第一種和第三種很常見,而且它們是可以使用HTML來設置的,就是說我們可以把CheckBox的初始狀態通過一個叫checked的html元素的屬性來確定。我們這裡要說的Indeterminate狀態雖然在IE4.0就開始支持了,可是卻沒有html元素屬性來設置其值,而只能使用腳本來設置其Indeterminate狀態。
比如使用JavaScript腳本(indeterminate默認是false):
chkb.indeterminate = true; 或 chkb.indeterminate = false;注意:CheckBox的indeterminate是一個獨立的屬性,和CheckBox的checked、status的取值無關,也就是說它只會影響CheckBox的外觀顯示,我們仍然可以正常的使用腳本讀取checked和status的值。
direction: rtl;
我們之所以看不見黑暗,是因為有人正竭盡全力,把黑暗擋在我們看不見的地方。
-webkit-darkside-visibility: hidden;
啊不,是
-webkit-backface-visibility: hidden;
這一行 CSS 能神奇地解決老版本 mobile WebKit 上好幾個完全無法理解,並且和 backface 沒有任何關係的 bug……
說個小技巧,用border可以畫三角形,這個我用的挺多……回家補上詳情(劃掉)
==========================================
/* 拖延症拖了大半年,趁著參加完 JSConf 回家(真的回家了),趕緊了結這事。我不會講到太過細緻的應用,只要有原理剩餘的自由發揮吧。最後,拖了那麼久萬分抱歉。。。 2016-09-06 */
第一次看到border畫三角形這個技巧的時候我也是挺驚訝的,而且兼容性不差,嚴格算下來根本不是黑科技。接下來從一切的開始說起。。。
起初,神創造了CSS。神說,要有盒模型,於是有了盒模型。神看盒模型是好的,就把盒模型分成幾層。分別是content,padding,border和margin。如下圖所示(這張圖是網上隨便找的,圖侵刪):
這是個很常見的圖片,大部分學過css的人都看過。不過這個和今天討論的問題有什麼關係呢?
接著來~
border大家都很常用,但是有想過上下左右border的連接處是怎麼樣的嗎?讓我來做了小實驗:
將border的大小變大,並且賦值不同的顏色:
可以明顯的看到上下左右邊框的連接處什麼樣子的。不過這個和今天討論的問題有什麼關係呢?
接著來~
如果把塊變成正方形並且去掉兩個邊框呢?
咦,似乎有奇怪的形狀出現了?
說到這裡,應該有人能看到接下來怎麼做了吧~
接著來~
讓我們繼續減少塊的高寬,加大border的大小。極端點,直接把高寬設置成0~
神奇的事情出現了,你們要的三角形,而且還有三個~(看不到第三個的快去練練腦筋急轉彎)原理到此為止就已經解釋的很清楚了,利用border單邊自帶三角形這種特性,就可以用很簡單的代碼實現指向各個方向的三角形。就像七巧板一樣,可以組合成許多形狀~
希望這篇文章能夠打開大家的思路,利用這個基礎的特性不斷發揮,組合,能夠實現更多神奇的效果~
widthwidth: calc(100% - 90px) //百分數可以-解析度。
寫自適應網頁好爽啊。
-webkit-user-select: none;
設置元素文字不可被選中,WebApp常用
outline:none
取消webkit中點擊按鈕或鏈接時的黃色(或其他顏色)的邊框
position sticky 一個css3屬性 在可見區域內相當於relative,滾動到非可見區域相當於fixed,使用以後不會出現fixed的閃跳,用戶體驗得到很大提升,可惜兼容性不是很好,不過已經支持ios6+了,對於支持的瀏覽器趕快用起來吧,畢竟用戶體驗才是王道。
推薦閱讀:
※如何通過 HTML5 實現 iOS 7 的實時毛玻璃模糊效果?
※怎麼學習前端開發?求推薦學習路線?
※HTML5 有哪些讓你驚艷的 demo?
※有哪些不錯的前端開發博客?