整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Pico.css - 優(yōu)雅的純 CSS 開(kāi)源 UI 框架,用原始的 HTML 元素標(biāo)簽來(lái)做界面

          同瀏覽器對(duì)網(wǎng)頁(yè)默認(rèn)的組件解析樣式不一致,而且不夠美觀,網(wǎng)頁(yè)樣式開(kāi)發(fā)需要大量時(shí)間,今天介紹一款優(yōu)雅的 CSS 框架。

          關(guān)于 Pico.css

          Pico.css 是一個(gè)簡(jiǎn)單輕量化的 CSS UI 框架,最大的特點(diǎn)是樣式都基于 HMTL 原始的標(biāo)簽名和內(nèi)置的屬性,少用甚至是不用 class 來(lái)定義樣式,寫(xiě)出來(lái)的代碼語(yǔ)義清晰,可維護(hù)性強(qiáng),能夠幫助開(kāi)發(fā)者構(gòu)建自己的 UI 系統(tǒng),也可以直接用于快速的小型項(xiàng)目中。

          Pico-css 官網(wǎng)

          截止發(fā)文日期,Pico.css 在 Github 上已經(jīng)有高達(dá) 3898 個(gè) Star。

          Pico.css 框架的特點(diǎn)

          • 去 class 以及原生語(yǔ)義化的代碼。Pico.css 盡可能使用原生的 HTML 元素的標(biāo)簽名稱來(lái)定義樣式,整個(gè)框架使用的 class 名稱不到10個(gè)
          • 純 CSS 實(shí)現(xiàn)。所有組件都由一個(gè) 10KB(壓縮后)的 CSS 文件實(shí)現(xiàn),無(wú)包管理,沒(méi)有依賴和外部文件,甚至連 javascript 代碼都沒(méi)有
          • 響應(yīng)式布局。內(nèi)置響應(yīng)式的柵格系統(tǒng),在 PC / 手機(jī) / 平板等不同屏幕大小的設(shè)備上排版美觀一致
          • 支持深色主題。附帶兩個(gè)漂亮的顏色主題,根據(jù)用戶喜好一鍵啟用

          開(kāi)發(fā)上手

          引入 Pico.css 最簡(jiǎn)單直接的方式就是下載后直接引入一個(gè)樣式文件:

          Pico-css cdn 引入

          當(dāng)然也可以通過(guò) npm 安裝:

          Pico-css npm 安裝

          然后就可以編寫(xiě) html 代碼了。

          HTML 原生語(yǔ)義化的編程

          想要做一個(gè)輸入框和提交表單,往往需要這樣的代碼:

          常規(guī)實(shí)現(xiàn) form 表單代碼

          而使用 Pico.css,只需要:

          Pico-css 實(shí)現(xiàn)表單

          Pico.css 內(nèi)置了很多基礎(chǔ)的組件,包括常用表單控件、表格、彈窗、導(dǎo)航菜單、卡片等,代碼非常簡(jiǎn)潔,比如實(shí)現(xiàn)一個(gè)美觀的進(jìn)度條,只需要這點(diǎn)代碼:

          Pico-css 實(shí)現(xiàn)進(jìn)度條

          使用深色主題

          Pico.css 內(nèi)置了淺色和深色兩套主題,使用方法非常簡(jiǎn)單,給父級(jí)元素添加屬性data-theme

          切換主題

          官網(wǎng)還有很多代碼例子,比如編寫(xiě)一個(gè)美觀大氣的登錄界面,html 代碼十分簡(jiǎn)潔,仿佛回到了剛剛開(kāi)始學(xué)習(xí) html 語(yǔ)法的時(shí)代。

          登錄界面

          通過(guò) CSS 文件的源碼,可以看到樣式的選擇器大多通過(guò) HTML 元素標(biāo)簽名、內(nèi)置的屬性以及自定義屬性來(lái)命中,這樣就規(guī)避了常規(guī)的只使用 class 來(lái)區(qū)分的“命名地獄”,是一種非常好的網(wǎng)頁(yè)編程思路。

          Pico-css 源碼

          面向?qū)兇?HTML 有極致追求的開(kāi)發(fā)者,Pico.css 還提供了 classless 版本,這個(gè)版本將一個(gè) class 都沒(méi)有,完全使用元素標(biāo)簽名和屬性編寫(xiě)網(wǎng)頁(yè)。

          使用 Pico.css 的原因

          在項(xiàng)目中使用 Pico.css 源自于一次快速的營(yíng)銷頁(yè)需求,需要做簡(jiǎn)單的幾個(gè)帶有輸入交互的頁(yè)面,使用 bootstrap 這樣龐大的框架顯然有點(diǎn)笨重了,如果使用當(dāng)前流行的能夠按需引入的 Vue UI 組件庫(kù),又免不了要用 Vue.js 來(lái)工程化。只是做幾個(gè)簡(jiǎn)單的頁(yè)面,沒(méi)有必要用中大型項(xiàng)目的標(biāo)配,考慮到目前市面上大多數(shù) UI 框架都過(guò)度封裝,堆疊了很多包含各種語(yǔ)義的 class 名,不僅會(huì)讓頁(yè)面加載變慢,而且會(huì)導(dǎo)致更長(zhǎng)的樣式計(jì)算時(shí)間,最終還是找到了適合這樣場(chǎng)景的 Pico.css。

          css 樣式的寫(xiě)法很自由,目前前端開(kāi)發(fā)存在一個(gè)趨勢(shì),為了做精美的界面,需要花費(fèi)大量的時(shí)間來(lái)寫(xiě)樣式,為了樣式可以復(fù)用,絞盡腦汁給 class 起名字,甚至網(wǎng)上還有各種 class 命名規(guī)范,這可能導(dǎo)致了大量的樣式被覆蓋,很多時(shí)候 class 屬性的名稱,甚至比樣式的代碼還要多,極難維護(hù)。

          Pico.css 的出現(xiàn)給這樣的開(kāi)發(fā)現(xiàn)狀提供了一種新思路,不僅可以直接用在實(shí)際項(xiàng)目中,也能夠作為構(gòu)建自己的 UI 庫(kù)的基礎(chǔ)樣式。

          免費(fèi)開(kāi)源說(shuō)明

          Pico.css 是一個(gè)免費(fèi)開(kāi)源的項(xiàng)目,源碼基于 MIT 開(kāi)源協(xié)議托管在 Github 上,任何個(gè)人和公司都可以免費(fèi)下載使用。

          關(guān)注我,持續(xù)分享高質(zhì)量的免費(fèi)開(kāi)源、免費(fèi)商用的資源。

          ↓↓點(diǎn)擊查看本次分享的網(wǎng)址。

          Pico.css - 簡(jiǎn)單優(yōu)雅的純 CSS 開(kāi)源 UI 框架,用原始的 HTML 元素標(biāo)簽來(lái)做界面|那些免費(fèi)的磚

          • 關(guān)知識(shí)

          Node JS環(huán)境、Protractor工具、Jasmine框架、JavaScript語(yǔ)言

          • 簡(jiǎn)介

          Protractor是作為Angular JS應(yīng)用程序的測(cè)試工具,簡(jiǎn)單的理解就是驅(qū)動(dòng)腳本來(lái)實(shí)現(xiàn)客戶端到服務(wù)器端測(cè)試的一種工具,也就是我們常聽(tīng)到的一個(gè)詞,e2e(end to end),也就是端到端的測(cè)試,其中Angular JS是一款優(yōu)秀的前端開(kāi)發(fā)框架,當(dāng)時(shí)的開(kāi)發(fā)團(tuán)隊(duì)就額外設(shè)計(jì)出Protractor這樣一個(gè)小工具便于測(cè)試基于Angular JS開(kāi)發(fā)的產(chǎn)品,它的構(gòu)建基于Selenium WebDriver之上,所以使用起來(lái)你會(huì)發(fā)現(xiàn)很多方法和不同語(yǔ)言下的webdriver操作類似,至少形式上看上去很像,而且是圍繞著Selenium WebDriver進(jìn)行封裝的,因此,Protractor中包含的每一個(gè)feature對(duì)于Selenium WebDriver都是可用的。但是需要注意一點(diǎn),假如我設(shè)計(jì)的自動(dòng)化代碼并不是基于Angular JS開(kāi)發(fā)的,那么就會(huì)有個(gè)疑問(wèn),是不是還可以鐘情于這款框架呢,答案是肯定的,我們只需要在js代碼中加入這樣一行“browser.ignoreSynchronization = true”,就可以跳過(guò)Angular JS產(chǎn)品的驗(yàn)證了。當(dāng)然,既然人家最初設(shè)計(jì)目的是為了測(cè)試基于Angular JS的產(chǎn)品,它會(huì)提供了獨(dú)享的一些方法,例如waitforangular()

          我們還會(huì)接觸到另外一個(gè)詞“Jasmine”,其實(shí)它是Protractor內(nèi)部支持的三種行為驅(qū)動(dòng)開(kāi)發(fā)中的一種,具體有Jasmine/Mocha/Cucumber,也就是我們理解上的自動(dòng)化測(cè)試框架的三種,我聽(tīng)過(guò)前兩種,第三種沒(méi)用過(guò),而且要注意一點(diǎn)protractor默認(rèn)使用的就是Jasmine,自動(dòng)化測(cè)試框架主要是提供語(yǔ)法、提供流程管理模塊、和報(bào)告工具,主要也就是這三點(diǎn),這些框架都是基于JavaScript和Nodejs的,Nodejs就是支持javascript的運(yùn)行環(huán)境。

          • 準(zhǔn)備過(guò)程

          接下來(lái)簡(jiǎn)單看下怎么搭建一個(gè)基于Protractor測(cè)試框架的測(cè)試環(huán)境,用來(lái)寫(xiě)我們的自動(dòng)化測(cè)試代碼。

          第一步毫無(wú)疑問(wèn),安裝Node.js,安裝Node.js并不難,可以直接到 https://nodejs.org/en/ 網(wǎng)站上下載相應(yīng)的安裝包,這里選擇的是windows的安裝包,有的網(wǎng)絡(luò)會(huì)下載比較慢,雖然只有12M左右(親身經(jīng)歷,還會(huì)經(jīng)常中斷。。。)。

          其中npm package manager是我們安裝Node.js最為重要的目的,當(dāng)然,Add to PATH是幫助我們省去了配置變量的環(huán)節(jié),也是很重要的,安裝步驟不多贅述,如果圖方便的話,閉上眼睛一路Next下去就好。

          安裝完成后,打開(kāi)命令窗口,使用命令 “npm —version” 查看Node.js是否安裝成功。

          由于這里需要使用pratractor,所以需要使用命令 “npm install —global protractor” 或者 “npm install -g protractor” 全局安裝protractor,為什么是全局安裝而不是本地安裝,因?yàn)槲覀冞@里只需要使用CLI(Command Line Interface) 而不需要用require將protractor包含進(jìn)去,如果需要后者,則需要再在本地安裝一次,當(dāng)然,如果不放心,也完全可以將全局和本地都安裝一次,以后如果需要用,就可以直接用了,這里作為例子來(lái)看,只需要全局安裝即可。

          這時(shí)候,可以試著啟用webdriver, 注意,如果這里是先做了webdriver-manager update操作,而直接輸入 webdriver-manager start則會(huì)不成功,它會(huì)提示 java 不能識(shí)別,它既不是內(nèi)部也不是外部命令。而緊接著才安裝JDK的話,在相同的command window中也同樣會(huì)持續(xù)這個(gè)提示,此時(shí)只需要重新開(kāi)一個(gè)新的command window即可。

          這時(shí)候可以發(fā)現(xiàn),webdriver 啟動(dòng)了,接下來(lái)我們?cè)囍_(kāi)始寫(xiě)case來(lái)看下是不是可以運(yùn)行了。

          • 腳本過(guò)程

          我們一定要編寫(xiě)的文件只有兩個(gè),一個(gè)是configure.js,當(dāng)然文件名是隨意編寫(xiě)的,也可以叫做config.js,用做什么呢,目的有兩個(gè),一個(gè)是指定4444端口作為selenium調(diào)用服務(wù)的配置,另一個(gè)是作為執(zhí)行測(cè)試用例的入口文件,也就是可以在這個(gè)文件內(nèi)指定運(yùn)行哪些測(cè)試用例。

          代碼如下:

          (function () {

          exports.config = {

          seleniumAddres : 'http://localhost:4444/wd/hub',

          specs: 'testcase.js'

          }

          }

          )()

          另一個(gè)文件也就是我們的測(cè)試用例文件,名字叫做testcase.js,當(dāng)然名字也是可以用別的,代碼如下(代碼是可以直接運(yùn)行的哦),里面有一條自動(dòng)化測(cè)試用例,用于測(cè)試光宇游戲社區(qū)點(diǎn)擊登錄按鈕之后,輸入用戶名和密碼后,會(huì)出現(xiàn)復(fù)雜驗(yàn)證碼彈層,也就是我們的期望值。

          (function (){

          var requires = require('./testdata.js')

          describe('XXX_Community', function () {

          var url = requires.urls.AngularJSURL

          beforeEach(function() {

          browser.ignoreSynchronization = true

          browser.manage().window().maximize();

          browser.get(url)

          });

          it('Account_Login_WithPassword_001', function () {

          element(by.xpath('//*[@id="js_pubtoplogin_div"]/div[1]/a')).click()

          element(by.id('Account')).sendKeys('xieshuyu')

          element(by.id('Password')).sendKeys('xieshuyu')

          var EC = protractor.ExpectedConditions;

          browser.wait(EC.presenceOf(element(by.id('sigin'))), 5000);

          element(by.id('sigin')).click()

          expect(element(by.xpath('/html/body/div[8]')).isPresent()).toBeTruthy()

          }

          )

          })

          })()

          • 說(shuō)明部分

          如果有一定代碼經(jīng)驗(yàn)的同學(xué),其實(shí)看這段代碼和我們之前的自動(dòng)化用例代碼差別并不是很大,變化的就是形式和語(yǔ)言。

          1、describe就是我們通常講的自動(dòng)化測(cè)試用例集,it就是自動(dòng)化測(cè)試用例,兩個(gè)的實(shí)質(zhì)就是js方法,it當(dāng)中包含了測(cè)試用例的內(nèi)容,包含了操作步驟和斷言;

          2、如果要停止運(yùn)行某一個(gè)case,只需用xit()代替it(),同理在describe前加’x’也可以停止整個(gè)describe封裝的運(yùn)行;

          3、引號(hào)中的description用來(lái)描述case行為,便于在查看報(bào)告時(shí)理解case行為;

          4、expect()用于判斷結(jié)果,一個(gè)case中可以有多個(gè)expect(),只有當(dāng)所有的expect()都通過(guò)的時(shí)候,這個(gè)case才可以通過(guò),否則會(huì)提示失敗,常見(jiàn)匹配器如下:

          expect(x).toEqual(y); 當(dāng)x和y相等時(shí)候通過(guò)

          expect(x).toBe(y); 當(dāng)x和y是同一個(gè)對(duì)象時(shí)候通過(guò)

          expect(x).toMatch(pattern); x匹配pattern(字符串或正則表達(dá)式)時(shí)通過(guò)

          expect(x).toBeDefined(); x不是undefined時(shí)通過(guò)

          expect(x).toBeUndefined(); x 是 undefined時(shí)通過(guò)

          expect(x).toBeNull(); x是null時(shí)通過(guò)

          expect(x).toBeTruthy(); x和true等價(jià)時(shí)候通過(guò)

          expect(x).toBeFalsy(); x和false等價(jià)時(shí)候通過(guò)

          expect(x).toContain(y);x(數(shù)組或字符串)包含y時(shí)通過(guò)

          expect(x).toBeLessThan(y); x小于y時(shí)通過(guò)

          expect(x).toBeGreaterThan(y); x大于y時(shí)通過(guò)

          expect(function(){fn();}).toThrow(e); 函數(shù)fn拋出異常時(shí)候通過(guò)

          5、關(guān)于element元素的定位,常用方法如下(暫時(shí)用到這么多):

          element(by.xpath(‘//*[@id=”js_pubtoplogin_div”]/div[1]/a’))

          element(by.id(‘xieshuyu’))

          element(by.name(‘xieshuyu’))

          element(by.className(‘xieshuyu’))

          element(by.model(‘xieshuyu’)) //根據(jù)ng-model名來(lái)查找元素,Angular JS專用(還記得上文提到的嗎,呵呵呵)

          element(by.binding(‘xieshuyu’)) //查找綁定了指定名的元素,Angular JS專用

          element(by.repeater(‘xieshuyu’)) //查找指定repeater中的元素,Angular JS專用

          • 執(zhí)行方式

          看到這,是不是有點(diǎn)小興奮了呢,哈哈哈!其實(shí)執(zhí)行方式很簡(jiǎn)單,前提是環(huán)境已經(jīng)配置正確了,在文件路徑下切換到對(duì)應(yīng)的cmd窗口,然后輸入“protractor config.js —config spec —disableChecks”,記得加上—disableChecks,會(huì)避免一些不必要的檢查。

          然后你就可以谷歌瀏覽器被打開(kāi)了,然后執(zhí)行我們測(cè)試用例的文件,至少?gòu)囊曈X(jué)效果上來(lái)看,執(zhí)行速度高于利用java來(lái)寫(xiě)的自動(dòng)化代碼,速度很快,但是有一個(gè)缺點(diǎn),至少我理解上是這樣的,我們都知道javascript是一種前端流行語(yǔ)言,是不支持后臺(tái)操作的,就連數(shù)據(jù)庫(kù)連接和執(zhí)行sql語(yǔ)句也是不支持的,所以我們自動(dòng)化流程中可能用到的數(shù)據(jù)庫(kù)操作是沒(méi)辦法利用它實(shí)現(xiàn)的,但這里會(huì)有一個(gè)問(wèn)題值得討論,我們的UI端的自動(dòng)化是否需要或者有必要連接后臺(tái)來(lái)模擬一些用例的前提條件,以后再寫(xiě)另外的一篇博客來(lái)討論吧,在這一句兩句也說(shuō)不清楚。

          如果有同學(xué)看到這里,會(huì)不會(huì)有個(gè)疑問(wèn),也就是有沒(méi)有發(fā)現(xiàn)我們的代碼是沒(méi)有任何語(yǔ)句來(lái)指定谷歌瀏覽器驅(qū)動(dòng)的地方,那怎么在輸入“protractor config.js —config spec —disableChecks”之后就自動(dòng)打開(kāi)chrome進(jìn)行自動(dòng)化測(cè)試了呢。其實(shí)答案就是特別簡(jiǎn)單,因?yàn)槿思襭rotractor支持的默認(rèn)瀏覽器就是chrome,還有一點(diǎn),我想到也就是nodejs環(huán)境本身就是一個(gè)基于Chrome V8引擎的。

          • 后續(xù)

          文中提到的代碼只是一個(gè)簡(jiǎn)單的自動(dòng)化測(cè)試用例demo,用于說(shuō)明利用NodeJS環(huán)境+Protractor工具+Jasmine框架+JavaScript語(yǔ)言是可以做到UI的自動(dòng)化,而且效果還不錯(cuò)的,之后會(huì)陸續(xù)更新的。如果有什么說(shuō)的不準(zhǔn)確的地方,歡迎留言!

          —————————————————————————————————————

          給大家推薦一個(gè)學(xué)習(xí)資料分享群(574253227),里面大牛已經(jīng)為我們整理好了許多的學(xué)習(xí)資料,有自動(dòng)化,接口,性能等等的學(xué)習(xí)資料!



          站和移動(dòng)用戶應(yīng)用程序設(shè)計(jì)范圍內(nèi)的UI工具包是一組設(shè)計(jì)元素,例如:按鈕,導(dǎo)航欄,字段框,下拉菜單,復(fù)選框,單選按鈕,列布局,圖標(biāo),等等,通常采用分層PSD格式(Adobe Photoshop)。UI套件成為用戶界面設(shè)計(jì)人員在網(wǎng)站和移動(dòng)應(yīng)用程序上工作的主要彈藥。UI工具包可以節(jié)省時(shí)間,并為項(xiàng)目提供新的參考。

          BlackUI v1 設(shè)計(jì)

          超級(jí)干凈的UI套件設(shè)計(jì)


          深色圖表UI套件

          義工具

          “比薩餅” UI工具包-PSD

          黑暗的用戶界面已滿。

          Caramel UI

          暗網(wǎng)和Apps UI套件

          深色UI –用戶界面工具包

          終極線框UI套件

          PrimeUI-第1卷

          Coffee iPhone Retina App控件

          深色UI套件

          Noire UI元素

          黑暗管理面板UI套件

          平滑的Web App UI套件

          透明UI套件

          奶油硬糖UI套件

          漢娜(Hanna)UI套件

          奶油UI包

          Poky UI套件

          多云的UI套件

          Flat UI Free – PSD&HTML用戶界面工具包

          Square UI Free –用戶界面工具包

          Polaris UI Free –用戶界面包

          磚頭–用戶界面框架

          適用于iOS的Pandora UI Free –用戶界面包

          Futurico UI Free –用戶界面元素包

          印象派UI-用戶界面包


          主站蜘蛛池模板: 国产日韩视频一区| 中文字幕无码一区二区免费 | 一区高清大胆人体| 国产精品视频一区二区猎奇| 国产精品视频免费一区二区| 精品视频在线观看一区二区| 中文人妻无码一区二区三区| 精品一区二区三区四区在线播放| 精品国产亚洲一区二区三区在线观看 | 亚洲综合无码一区二区痴汉| 国产一区二区三区免费看| 国产一区二区不卡在线播放| 亚洲国产国产综合一区首页| 精品人妻少妇一区二区三区不卡| 一区二区三区四区在线观看视频| 日本一区二区不卡视频 | 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲午夜在线一区| 老湿机一区午夜精品免费福利| 国产在线精品一区二区不卡麻豆| 国产91久久精品一区二区| 日本一区视频在线播放| 在线播放一区二区| 亚洲av片一区二区三区| 精品成人乱色一区二区| 香蕉久久AⅤ一区二区三区| 亚洲一区影音先锋色资源| 福利一区二区在线| 亚洲中文字幕在线无码一区二区 | 亚洲一区二区三区高清视频| 日韩精品一区二区三区视频| 色噜噜狠狠一区二区三区果冻| 日韩高清一区二区三区不卡| 国产免费无码一区二区| 国产成人精品一区二三区| 91精品一区二区三区久久久久 | 精品成人乱色一区二区| 中文字幕久久亚洲一区| 精品国产福利在线观看一区 | 国产乱码精品一区二区三区| 久久婷婷久久一区二区三区|