HTML5+CSS3靜態頁面項目-BusinessTheme的總結


  因為期末考試、調整心態等等的種種原因,距離上一次的項目練習已經過了很久了,今天終於有時間繼續練習HTML5+CSS3的頁面架構和設計稿還原。設計圖很長,整個頁面分為了好幾個區域,所以就不放完整的設計圖了,具體的設計文件可以在文末的Github地址中下載。第一次的總結是以我對頁面架構的理解,按照代碼實現順序講解的,那這一次就按照遇到的問題總結性地記錄吧。歡迎大家看完我的作品和總結以后,提出寶貴的建議!謝謝大家!

  經過上一次的練手,這次的練手就更加從容了,不僅僅是為了查缺補漏,也是為了解決問題的同時,讓代碼可以更加簡潔。但也有一些小瑕疵,比如說頁面中每個模塊的每個標題其實都是同樣的字號以及顏色,部分的標題根據背景顏色有變化,本來可以在開頭先設置總體的顏色和字號,這樣遇到特殊情況的時候再進行修改。但是因為最后犯懶,這部分的設置就在每個模塊里重復了很多遍。還有頁面的字體也是沒有導入的,所以顯得沒有涉及稿那么完美了。還有一點疑問是,因為是靜態頁面,所以所有的尺寸都是固定值,在頁面縮放的時候就會出現一些不好的現象,而且設置了絕對定位以后,也是不可以同時實現響應式的。這樣在實際的產品生產中,應該是大家都很不友善的?下一個作品要好好地考慮這個問題呢。最后一點是,頁面上有很多可以用到JavaScript的地方,不過現在學藝不精,也還沒有勇氣嘗試(???),所有也沒有好好設計,但能夠用CSS實現的,還是實現了。

  下面就從我在實現過程中遇到的一些問題來進行總結吧。

問題一:遇到行內元素與塊級元素需要在同一行上顯示時,總會讓人很抓狂。

這個問題在上一次作品中也遇到了,提到幾種解決方案,針對一些問題,有的方案可以解決,而有的卻沒有什么效果。下面就根據我實現頁面過程中遇到的問題,再來說說我的解決方案。

方案一:神奇的vertical-align

在這個頁面中,紅框圈的地方是一個表單的文本輸入框,是由多個div組成,div中包括了img圖片和input輸入框。圖片和輸入框就會發生錯位的問題,我使用將圖片的樣式設置為“vertical-align:middle ;”的方法后,就可以簡單地解決這個問題。(注:在網上搜索解決方案的時候,有答案提到將input的樣式line-height設置為與div同高,但我嘗試后發現,沒能成功。后來才使用vertical-align設置成功了。)

代碼如下:

.textbox img {
    vertical-align: middle;
}
.textbox input {
    font-size: 13px;
    width: 200px;
}

同樣的,下面這個是圖片+文字的組合,也是設置“vertical-align:middle; ”即可。

方案二:使用margin。

圖中的組合是圖片+多個段落文字,這個時候嘗試了vertical-align以后發現,還是不能正常顯示,這個時候就只能選擇使用margin的方法。將img的樣式設置為“float:left;”,使用div包裹文字,並設置左邊距即可。

代碼如下:

.sers img {
    float: left;
}
.serstext {
    margin-left: 80px;
}

下面二圖也是同樣的例子:

方案三:是將圖片作為div的背景圖片,再修改文字的屬性即可。

這個方案就要視圖片是否適合作背景圖片的具體情況而定了。在本次項目中就沒有使用這個方法。

附加的方案四:其實不是圖片和文字的情況,而是單純的文字在div中水平居中和垂直居中。

可以使用“text-align:center;”設置水平居中以及將文字的line-height設置為與div同高以設置垂直居中。

代碼如下:

.copyright {
    height: 45px;
    background-color: #709dca;
    text-align: center;
}
.copyright p {
    line-height: 45px;
    color: #fff;
    font-size: 13px;
}

如下圖效果:

問題二:取消元素的默認樣式,分別為取消inline、inline-block元素的默認邊距以及input元素的默認樣式。

一、取消inline、inline-block元素的默認邊距

每次按照設計稿設定a元素的邊距時,發現無論怎么設置都會多出一點默認的邊距,而出現這個問題的原因是標簽段之間的空格,去掉HTML中的空格即可。

方案一:去掉HTML空格。

<div>
     <a>
     ...</a><a>
     ...</a><a>
     ...</a>
</div>
或:
<div>
     <a>...</a
     ><a>...</a>
     ><a>...</a>
</div>

方案二:添加HTML注釋。

<div>
     <a>...</a><!--
     --><a>...</a><!--
     --><a>...</a>
</div>

方案三:使用margin負值進行縮進(不推薦)

方案四:不使用閉合標簽,僅閉合最后一個標簽

<div>
<a>...
<a>...
<a>...</a>

方案五:使用“font-size:0px;”

.space {
     font-size:0px;
}
.space a {
     font-size:12px;
}

方案六:使用letter-spacing或word-spacing。

.space {
     letter-spacing:-3px;
}
.space a {
     letter-spacing:0px;
}
或
.space {
     word-spacing:-6px;
}
.space a {
     word-spacing:0px;
}

最后很尷尬的是,不知道什么原因,上述的方法都不能夠成功。最后是將HTML代碼中a元素不留任何空格。當然,在實際生產中,代碼被壓縮后,也就沒有空格了,這時就不影響邊距的設定了。如我在項目中是這樣設置的:

<nav>
     <a href="#">Home</a><a href="#Service">Service</a><a href="#About">AboutUs</a><a href="#Price">PricingTable</a><a href="#How">HowItWork</a><a href="#Client">HappyClients</a><a href="#Contact">ContactUs</a>
</nav>

二、取消input元素的默認樣式。

在Chrome瀏覽器中,input元素自帶有點擊后,自動顯示一個藍色的外邊框。取消這一效果只需要設定border和outline為none即可。

問題三:關於a元素的三個問題,分別為在鏈接周圍加上背景色、設置a的上邊距以及a元素的四個偽類。

一、在鏈接周圍中加上背景色

如下圖效果所示:

當時做的時候,是想着用一個設置背景顏色的button按鈕,但其實只要設置a元素的padding屬性和背景顏色即可。代碼如下:

.price_box a {
    color: #fff;
    font-size: 14px;
    display: inline-block;
    margin-top: 35px;
    padding: 20px;
    background-color: #ffbb42;
    border-radius: 2px;
}

二、設置a元素的上邊距。

行內元素如a、span等等的元素無法設定上下邊距,這時只要設置樣式“display:inline-block;”即可。從上一例子可以看到通過設置了display,以設定margin-top。

三、設置a元素的四個偽類:a:link、a:visited、a:hover、a:active。

通過設置a元素的四個偽類,可以改變鼠標與a元素之間的操作效果,如導航欄中,鼠標經過時改變背景色等等的效果。

效果圖如下(截圖時,鼠標被隱藏了):

 

代碼如下:

.head nav a:hover {
    color: #fff;   
    background-color: #ffbb42;
    border-radius: 2px;
}

問題四:調整字間距。

因為沒有使用設計中的字體,而原字體的字間距並不適合,所以需要調整字間距。

調整字間距可以使用letter-spacing或word-spacing。

問題五:hr元素的屬性設置。

圖中的橫線是使用<hr>實現的,可是原本默認的樣式卻不太適合,因此改變了hr元素的長度和顏色。但修改顏色的時候要注意,一般用color改變文本顏色,而線條等的元素則使用background-color來修改,並且需要設定一個線條的高度才能顯示顏色,同時hr還有一個默認的boder屬性,所以還要設置為none。代碼如下:

hr {
    width: 330px;
    height: 1px;
    border: none;
    background-color: #e2e9f0;
}

問題六:只選擇為單數序列的元素。

在文本或區塊中常常有不同列或行的元素需要有不同的設定,因此就需要使用CSS選擇器,而nth-child(n)就可以根據n的值選擇元素來應用樣式。

如下圖所示:

可以看到紅框中的兩個input框的寬度是不一樣的,這個時候就可以使用nth-child來設定不同的寬度,代碼如下:

.contact .textbox:nth-child(1) {
    width: 305px;
}
.contact .textbox:nth-child(2) {
    width: 385px;
}

詳細的解釋可以查看:http://www.w3school.com.cn/cssref/selector_nth-child.asp

  在練習中出現的問題大概就是這些,常常以為看過了書,就能一定能運用起來。實際上卻不是這樣的,在面對問題的時候,很大概率上是不能反應過來,常常是搜索了方法以后,才會意識到,啊,原來可以這樣子做,原來還有這種方法,原來因為某個知識點的原因等等,還是需要通過實踐才能知道自己的能力到了多少,才能積累更多解決問題的經驗。做到了第二個(實際上是第三個)項目,知道了自己還有很長的路要走,很多的知識要學習,很多的操作要練習。以前做項目的時候,常常添加一個樣式就要刷新一下,看看效果。現在已經可以先寫好想到的樣式,再來解決問題,效率提高了不少,大概都是因為練習多了,經驗豐富了,也就知道了不會出錯的常規操作,信心也增加了呢!

  但還是能夠在實踐中發現很多的不足,應該更有大局觀一些,通用的樣式應該提前想好、設定好,減少代碼的冗余。應該多使用代碼解決而不是靠圖片,提高用戶的下載效率。應該要開始使用JavaScript來做動態效果,可是因為沒信心、拖延症,腳步一直停滯不前。應該要解決拖延症,簡單的頁面一天就能完成,提高工作的效率……以前常看書不實踐,現在都在實踐卻不看書,不好不好。

  所以,近期目標是要開始練習JavaScript的小項目,開始認真學習jQuery,要快馬加鞭地加油了!

 

所有文件地址:https://github.com/omocc/PracticeItem/tree/master/7.5%E5%AE%9E%E6%88%98%E7%BB%83%E4%B9%A0-2

網頁觀看地址:http://htmlpreview.github.io/?https://github.com/omocc/PracticeItem/blob/master/7.5%E5%AE%9E%E6%88%98%E7%BB%83%E4%B9%A0-2/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM