大廠h5開源視頻系列 是一個專題,在這個專題中咱們會解析一些酷酷的線上h5,在每個細節,每個細膩的過渡背後都能看到前端工程師付出的心血,本篇帶來的是👉👉 搜狗:每個人都是一句詩javascript
線上鏈接請戳👉👉 每一個人都是一首詩你們可自行感覺下。 天地造人,每一個人心裏深處都藏着一句詩,那就是這我的的靈魂。 咱們一塊兒學習一下這個h5裏面比較有意思的幾個部分css
搜狗的loading採用最簡單的進度條來展現。咱們先來看看這個html的結構,html
<div class="body_logobg" id="loaddingWrap">
<div class="loadingbox xycenter">
<div class="loadingrange">
<div class="loading" id="loadingPercent" style="width: 100%;"></div>
</div>
<p id="loading">100%</p>
</div>
</div>
複製代碼
分析:從html中咱們並不難看出loading是由上下兩部分組成一個是進度條(loadingrang),另外一個就是文字的百分比。傳統的佈局寫法loadingrange作進度條的外框、loading作進度條的內容、文字單獨定義。但做者這裏採用了一種新奇的想法。margin-block-xxxx: 餘量-嵌段-xxxx去定義p標籤的文字。 官方翻譯:前端
margin-block-xxxx property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.java
意思是這是一種縮寫,它對應於margin-top,margin-right,margin-bottom,或margin-left屬性根據爲定義的值writing-mode,direction和text-orientation。能夠簡單的理解爲就是定義文字左右上下的位置。jquery
爲了演示進度條加載的過程,我採用css動畫去繪製進度條內容。git
.loading {
height: 100%;
background: #8f82bc;
border-radius: 4px;
color: #fff;
animation: prece 1.5s ease-out
}
複製代碼
而後經過js去獲取這個進度條內容的寬度,把它轉換出來繪製在文本上。這裏須要注意浮點數帶來的影響。還不知道什麼是浮點數的能夠自行google一下,這裏就不展開了。github
(function(){
let interval = setInterval(increment, 100)
function increment () {
let num = parseFloat((($('#loadingPercent')[0].offsetWidth / 200).toFixed(2)*1000)/10) + '%'
$('#loading')[0].innerHTML = num
if (num === '100%') {
clearInterval(interval)
}
}
}())
複製代碼
值得一提的是整個h5的頁面都是基於一個插件---pageResponse移動端響應插件。這裏簡單的介紹下:bash
常見的移動端佈局方式前端工程師
一、rem佈局,經過動態設置根目錄下的font-size達到元素大小「自適應」,一般和百分比佈局一塊兒使用
二、固定像素設固定視口寬度。
三、最費事的media query,根據設備視口寬度不一樣設置不一樣的樣式,換句話說一個頁面有多套樣式。能夠說是正宗的響應式佈局。
另闢蹊徑
在學習viewport的時候,咱們就知道里面有scale這麼個東西,有的時候就會想按比例縮放整個頁面不就能夠了。關於pageResponse你們能夠一步文檔查看具體的使用方式。所以在咱們header里加一個meta標籤這裏就不在描述了
分析
整個h5頁面的佈局在一個居中的模版中,所以做者將引言頁、答題頁、結果頁都放在一個div裏,而後經過pageResponse對因此內容處理。實現移動端的兼容。
按上述的分析,咱們能夠獲得做者的html結構:
<div class="wrapper body_bg" id="minWrap">
<div class="minWrapper">
<!-- 引言頁 -->
<div class="mainConbox wrapYinyan" id="introductionWrap">
<img id="introductionTxt" class="xycenter" src="./img/yinyan.png" alt="">
</div>
<!-- 答題頁 -->
<!-- 結果頁 -->
</div>
</div>
複製代碼
你一看,可能會發出這樣的疑問:引言頁的界面這麼簡單?這是大廠開發的嗎?非也。做者在這裏的設計也是巧奪天工。
在這一頁,我本來跟你們同樣認爲這應該是一個input吧,當看到做者的代碼時,才發現高手真的是什麼武林祕籍都會。話很少說。跟我一塊兒來結構一下做者的內力。<div class="wrapIndex xycenter" id="indexWrap">
<img class="ycenter font_index" src="./img/index.png" alt="">
<a href="javascript:;" class="btn_start anipulse" id="btn_start"></a>
<div class="input_text">
<div class="textbox" id='textbox' placeholder='1' contenteditable='true' max-length='4'>輸入姓名,探測最真實的你</div>
</div>
<div class="logo_ingdex"></div>
</div>
複製代碼
html裏真的沒用input的標籤。那做者是怎麼作到的呢?
分析
<div class="mainConbox wrapAnswre displaynone" id="questionWrap">
<div class="answerbox" id="questionBox">
<div class="answerimg">
<img src="./dati/image_18.png" alt="">
</div>
<div class="questionTit">
<span class="qnum qnum1"></span>
<span class="qtit">
<img src="./dati/wenti_18.png" alt="">
</span>
</div>
<div class="questionoption">
<span class="option">A</span>
</div>
<div class="questionoption">
<span class="option">B</span>
</div>
<div class="questionoption">
<span class="option">C</span>
</div>
</div>
</div>
複製代碼
分析
從html中可看出做者將這個頁分爲三層,上層是圖片層,中間是題目,下層是選項的佈局。結果頁、推廣頁和其差很少,這裏就不在展開 每一個頁面的css我也將其分開放在不一樣的文件夾裏,方便你們查看。
連接地址請👉👉這裏 連接地址
寫到這裏差很少每一個頁面都寫完了,最關鍵的一點就是如何將因此的頁面組織起來。經過查看做者的源碼,發現這個h5採用的仍是jquery的方式。經過display:none來鏈接整個H5界面。這裏我將源碼的js部分抽離出
連接地址請👉👉這裏 連接地址
這是把因此的頁面都分割開了,每一個文件都放至各自的界面。整個h5我頁也佈置在gitPag上,不過題目只寫了一個,由於每一個都是同樣的,我就沒有重複去寫,感興趣的也能夠看看源碼。
須要源碼請👉👉這裏: 源碼地址
線上體驗請👉👉這裏: 體驗
你們在學習的時候是否是隻單獨知道每一個css屬性,綜合例子沒有思路,不知道怎麼動手,快快結合上面的講解動起手來。
歡迎關注本系列文章,有問題能夠加入👇👇👇羣聊和我一塊兒討論。最後祝你們五一快樂!!