Pure.css是一組小型的自適應CSS模塊,可以在每個Web項目中使用。Pure以Normalize.css為基礎,并提供native HTML元素以及最常見的UI組件的布局和樣式,考慮到移動設備,Pure具有開箱即用的響應能力,因此元素在所有屏幕尺寸上都看起來不錯。
<link rel="stylesheet" href="./pure-min.css" />
PS:Normalize.css使瀏覽器更一致地渲染所有元素,并符合現代標準。它只針對需要規范化的樣式。
https://github.com/pure-css/pure
通過使用Grid,Menu等,可以輕松創建適用于所有屏幕尺寸的精美響應式布局。
Pure的設計目標是可以在每個Web項目中使用它
與其他框架不同,Pure的設計不受限制,最小且扁平。添加新的CSS規則比覆蓋現有規則要容易得多。通過添加幾行CSS,可以自定義Pure的外觀以與你的Web項目一起使用。
以下創建默認的內聯表單,將pure-form類名添加到任何<form>元素。如下
<form class="pure-form"> <fieldset> <legend>A compact inline form</legend> <input type="email" placeholder="Email"> <input type="password" placeholder="Password"> <label for="remember"> <input id="remember" type="checkbox"> Remember me </label> <button type="submit" class="pure-button pure-button-primary">Sign in</button> </fieldset> </form>
還有其他常見類型表單,本文不過多介紹
要設置HTML表的樣式,請添加pure-table類名。此類為表元素添加了填充和邊框,并強調了標題。
默認情況下,菜單是垂直的。
要創建水平菜單,請添加pure-menu-horizontal類名稱。
本文只介紹了部分有關于Pure的內容,詳細的介紹可以Github以及官方提供的詳細內容和使用指南!
面幾篇文章我們聊了如何解析HTML標簽,這篇文章我們聊一下解析CSS的模塊——css。
npm install css
css模塊提供了一個解析css內容的方法parse,它返回css內容的抽象語法樹(AST)。
圖1
圖1執行結果如下:
圖2
parse方法還可以傳入第二個參數,這個參數是個對象,它有兩個屬性,其中一個屬性是source,代表css文件的路徑,如果參數中存在source屬性,在parse方法返回的抽象語法樹結果中或者在解析報錯時的信息中都會帶上文件的路徑。另外一個屬性是silent,如果設置了這個屬性,即使在解析中出錯,parse方法也不會拋出錯誤。
圖3
stringify方法的第一個參數是css內容的抽象語法樹對象,返回的結果是css內容,此方法的作用和parse正好相反,如下圖所示。
圖4
stringify方法的第二個參數也是一個對象,對象屬性有indent、compress、sourcemap、inputSourcemaps。
indent代表輸出的css內容的縮進,默認是兩個空格。利用這個屬性就可以做一個css格式化工具。
圖5
compress表示css的內容是否需要被壓縮,壓縮時會移除所有的空格和注釋。
圖6
sourcemap用于生成css的sourceMap。
圖7
圖7紅色區域中sourceMap的json串的原理是什么?不了解的同學可以參考作者之前的一篇文章《深度解析前端代碼打包過程中是如何生成sourceMap的?》,我相信一定難不倒聰明的你,這里就不再熬述了。
inputSourcemaps表示在生成sourcemap時可以讀取已存在的sourcemap引用,默認是true。因為有些打包好的css文件中已經存在了sourcemap的引用,所以在解析時這個模塊會自動讀取map信息。
在作者看來,AST是前端皇冠上的明珠,就像發動機之于飛機,石油之于工業。有了AST,前端的頁面可以在瀏覽器上渲染出來,有了AST,就可以自由的開發自己的框架。它即很重要,卻也很難掌握,所以這個知識點放在以后講。
本文主要分享了一個css的解析模塊,那它到底有什么用呢?我們平常用的語法校驗、格式校驗、sourcemap等都和它相關,所以如果需要開發一個和css相關的node工具,就可以考慮使用這個模塊。
喜歡我的文章就關注我吧,有問題可以發表評論,我們一起學習,共同成長!
/面包理想
一轉眼已經2018年,前端行業也風風雨雨地走過了10多年,網頁布局也從最原始的文檔變成了精彩紛呈的交互。當我看到第四代CSS布局技術的時候,在驚嘆互聯網發展如此突飛猛進的同時,不禁會有一個疑問:CSS經歷1.0到3.0的版本變遷,最終又將走向哪里?
今天我們就回顧一下CSS簡史和四次布局技術的躍遷。
1.CSS簡史
為什么我們需要回顧一下CSS簡史呢?
1.了解過去能夠更好地預測未來,畢竟太陽底下沒有什么新鮮事。
2.相比預測未來,通過了解CSS發展演變趨勢,能夠科學合理地評判CSS的發展,指導我們學習CSS的核心技術,讓我們在有限的精力和時間內學對知識,學好知識。
那是1989年的第一場雪,比1988年來的更早一些,伯納斯·李(Tim Berners-Lee)以超人的智慧和消耗了前額無數濃密的頭發為代價發明了World Wide Web,沒有他就沒有我們今天互聯網相關的工作,也就沒有了這個專欄教程,請允許我代表廣大前端致以崇高的敬意。我們先一睹大神的風采。
對互聯網之父,我只想對他說一句話,有一款洗發水增發效果挺好的,我一直用,你要不要試試?
互聯網誕生了以后,最初的網頁僅僅是純文本,但是隨著互聯網的發展,大家意識到web的原始版本根本就沒有提供一種裝飾網頁的方法。這就好比一個嬰兒不會穿著衣服出生一樣,孩子大了,總不能裸奔吧?這個時候兩個大神提供了解決方案Pei Yaun Wei和Andreesen。
Pei Yaun Wei說,這個好辦,我們可以給孩子穿上紙尿褲。
Pei-Yuan Wei在1991年創建圖形瀏覽器 ViolaWWW ,他整合了自己提出的樣式語言到自己開發的瀏覽器中,還期望自己的樣式語法最終能成為web關于樣式的官方標準。雖然這個目標并未達到,但是他提出的樣式語法確實為其它的一些樣式語法提供了一些靈感。
Andreesen說,那玩意得換多麻煩,我給孩子畫一身衣服吧,當然你懂的,最后Pei Yaun Wei的方案被采用了,但是我們還是看看Andreessen畫出來的情況有多亂。
與此同時,Andreessen 在他開發的網景瀏覽器中進行了不同的嘗試。他并沒有創建一種分離式的標記語言,而是采取拓展HTML標簽的方法來包含非標準化的HTML標簽已達到裝飾網頁的目的。不幸的是,沒過多久,網頁就失去了所有的語義化并看起來像下面這樣混亂:
<MULTICOL COLS="3" GUTTER="25"> <P><FONT SIZE="4" COLOR="RED">This would be some font broken up into columns</FONT></P></MULTICOL>
最終被大家采納的語言是由Hakon Wium 在 1994年 10月提出的樣式語法。它被稱為樣式層疊表,簡稱CSS,但是直到1996年的時候,CSS才演變成我們熟悉的樣子。
html { margin-left: 2cm; font-family: "Times", serif; }h1 { font-size: 24px; }
然后在1998年5月W3C發表了CSS2,緊接著一個讓我們深惡痛覺的瀏覽器誕生了!對沒錯,就是你深惡痛絕的那個萬能的IE6,2001年微軟發布了IE6,不過搞笑的是,IE6最初的出現確實很大程度推動了CSS發展。那時候的網頁已經變成跟現在很接近了。
按照常理你肯定會想,后面我就知道了,你不用說了,然后就是CSS3.0了。好吧,如果是我,我也這樣想,但是國際友人的腦回路可能跟我們不一樣,事實上,CSS3早于1999年已經開始制訂,直到2011年6月7日,CSS 3 Color Module終于發布為W3C Recommendation。這個故事告訴我們兩件事:
1.w3c這個組織活的真夠長,甚至比很多讀者年齡都大。
2.不是CSS正式版發布了你才放心使用,如果等到那個時候使用,你的項目可能未曾綻放就枯萎了。
細心的讀者可能會問了,CSS3正式版什么時候發布啊?另外CSS4.0什么時候發布?
好吧,我只能告訴你隨緣吧……而且沒有CSS4.0了,也不會有CSS5.0了。
來我們再看看國際友人的腦回路:
簡單地說,就是從CSS3開始,CSS規范就被拆成眾多模塊(module)單獨進行升級,或者將新需求作為一個新模塊來立項并進行標準化。因此今后不會再有CSS4、CSS5這種所謂大版本號的變更,有的只是CSS某個模塊級別的躍遷。
按照CSS工作組的說法,CSS歷史上并沒有版本的概念,有的只是“級別”(level)的概念。比如,CSS3其實是CSS Level 3,CSS2是CSS Level 2,而CSS Level 1當然就是CSS1。每個級別都以上一個級別為基礎。
大家可能說這個命名好亂啊,這事兒我只想跟你說,你就把CSS工作組當成你女朋友就好了,她開心就好,她說的都是對的,她說啥就是啥……
至于我們,會用就好了。
CSS出現的好處就是讓結構和表現分離,可以更靈活的修飾網頁,學習也很簡單。這里我更想說說它的不足。
1.CSS只有一個全局的命名空間,所以是無法避免出現選擇器沖突的。
2.模塊化做的不夠好,所以造成嵌套和覆蓋混亂,容易產生一大堆亂糟糟的樣式。
所以現在CSS也在向“模塊化、JS化發展”
不過客觀地說,CSS的出現確實是互聯網里程碑式的進步。
CSS其實就做了兩件事:
1.如何布局
2.元素怎么表現
說直白一點就是兩件事,一個房子是蓋成兩室一廳還是三室兩廳,另一件事是精裝修。
這里大家就會看到如果一個房子180平米隔成1個10平米的主臥170平米的廁所,你再怎么精裝修也不會是一個宜居的房間。所以布局在CSS中是極其重要的。與CSS發展簡史類似,CSS布局也經歷了一代又一代的迭代,才成為當前的樣子。
接下來我們就說說CSS布局簡史。
2.CSS布局簡史
初代table布局
在1997年的時候,David Siegel 改變了web,他自己研究出了一項網頁布局技術,利用html中的table元素和gif圖片縫合在一起,創造了表格布局技術,之后他就猶如一頭猛獸泛濫起來。
優點:布局容易、快捷、兼容性好
缺點:改動不便,需要重新調整,工作量大
由于互聯網網站越來越復雜,內容和業務更新頻繁,所以table布局是完全不能勝任的,以至于table布局的發明人都說:
“我把炸醬和面倒在了一起,并且沒法分開它。”
不過這個真不是我杜撰出來的,原文:
David Siegel:“有人說我毀掉了Web,我回答他們,的確如此。我毀掉了Web是因為我把巧克力和花生醬混合在一起卻再也不能把它們分開。我犯下了把結構跟表現混合在一起的錯誤。”
然后第二代布局技術登場了,
CSS+div布局
CSS+div布局總結起來有三大優點,
1.省時,學習容易,寫代碼也很容易,很快,效率高
2.省事,如果業務邏輯變了,改起來特別方便快捷
3.省錢,代碼量少,省帶寬,適合seo
基于這三年不難看出CSS+div布局人畜無害,人見人愛,也就不難解釋為什么被廣泛地使用成為目前主流的布局技術了。當然了他也有缺點:
1.需要考慮平臺兼容性,對制作人員的技能要求較高。
2.在移動端布局顯得有些力不從心,如未知寬高float內部元素居中、垂直水平布局、響應式布局等方面略顯繁瑣。
基于此,第三代布局技術應運而生。
Flex布局
優點:
1.CSS3的布局方式,可以在不使用其他框架的情況下,簡便、完整、響應式地實現各種頁面布局 2.移動端布局簡直太友好
缺點:
兼容性較差,IE瀏覽器版本在9.0以上,基本要10.0 對于其他瀏覽器,要求兼容性寫法
Flex布局日漸成為移動端主流布局技術,但是它是單一維度的布局,這個我會在專欄后面講到,有時候也會捉襟見肘,所以目前出現了第四代的布局技術:
grid布局
因為目前大部分瀏覽器并不支持這種技術,但是它代表了網絡發展,這里大家保持關注就好,這里我重點說下它為什么可以稱為第四代網絡布局技術。首先一個觀點大家先記住:
它并不會取代第三代的布局技術,而是顛覆和突破。就好像Flex遠比div+CSS布局更方便,但是div+CSS依然有用武之地。
我們說下它的突破之處:
1.flex對標的是float,本質上還是一維布局,這就跟別人開著夏利,你開奔馳都是地面上跑沒啥本質區別一樣。但是grid升維了,grid是飛機,在地面馬路這條線一維之上讓人能夠思考高度這個維度,以前是汽車一維交通工具(你只能在水平方向一個方向開),飛機是二維(能俯沖了(橫向、縱向同時)),所以grid可以說是拓寬了CSS布局的維度。不排除將來會有三維布局的出現。到時候CSS不僅僅能控制橫向布局,縱向布局,還可以深度布局(這個要依賴于三維展示的出現,如VR,AR三維立體的展示設備出現)。
2.grid布局里面采用了“可視化布局(template部分,所見即所得)”,這個是顛覆了傳統的,寫一句代碼刷一下瀏覽器這樣的開發方式,不排除以后會出現代碼即效果的開發模式。比如你在一個設備上畫一個區域,然后畫輪播圖。
這種方式類似于vc++控件方式,但是更智能,也更友好。誰說不可能呢?大家不要忘了grid布局的來源是早就廢棄的table布局。說到這里我多說一句搞笑的微軟,frontpage沒火,dreamwaver火了,最早提出“canvas”概念的 VML沒火,最后html5的canvas火了,連CSS3網格布局也是由微軟創建的一個模塊 ,最后火起來居然沒人認識它。心疼微軟一秒鐘。
說到這里大家對CSS簡史和布局也有所了解了,我們總結下,通過本文你應該學到:
(1)CSS的發展歷史。
(2)熟知布局的發展歷史,以便對未來布局技術的發展有一個客觀的判斷,來選擇是否學習。
通過本文的學習大家已經對CSS相關基礎知識有所了解,接下來我們就開始真正的進入技術的學習,大家是不是迫不及待了呢?
*請認真填寫需求信息,我們會在24小時內與您取得聯系。