閱讀231 返回首頁    go 阿裏雲 go 技術社區[雲棲]


前端開發:微吧裏的各種margin負值

一直在做各種項目接各種需求,但你的代碼能力得到提高了嗎?不停的項目經曆雖然能夠增加你的代碼行數,但不一定能提升你的代碼質量,所以除了構建階段的代碼細扣,項目之後的代碼總結是至關重要的。

  微吧中除了模塊化、公用和皮膚元素處理外,還有很多可總結的東西,例如:

  1、字符圖標:整站大部分純色的功能性的圖標都是用字符實現的,節省了圖片字節,利於修改和換膚。

  2、feed的改造和擴展:基礎feed、圖片帶打開收起功能、擴展了視頻音樂富文本功能、又擴展成帶時間軸和PK模式的feed,代碼清晰可擴展性強。

  3、各種margin負值:減少了很多用postion定位的樣式,盡量的減少了PHP輸出的判斷工作。

  4、圖片的拚合和優化:按頁麵拚合圖片,每張圖片都通過Smush.it進行優化,給IE6用的圖片采用png8格式替換gif格式。

  下麵僅選“各種margin負值”這一點描述一下我在項目構建和總結過程中的一點心得。margin負值大家肯定不陌生,百度一搜出來N多資料,都是大同小異的幾點。margin負值在微吧的應用中也逃離不了這幾點,不過我想從一個新的角度來描述。

  1、去除多餘的margin值

  示例截圖:

  結構:

  關鍵樣式:

  說明:bar_pictecxt的寬度是“新吧推薦”的寬度,piclist的寬度是淺藍色塊的寬度,內層的寬度大於外層,所以外層使用margin負。這裏循環dl的外麵有兩層div,如果隻用一個div,則IE6需要設置此div的寬度才能兼容,不靈活。

  此示例僅僅是margin-right的負值效果,經測試margin-top、margin-left、 margin-bottom均有效,隻是IE6針對周圍環境會有數值的較小差別而已。

  2、去除多餘的border

  示例截圖:

  結構:

  關鍵樣式:

  說明:list_bar_d2_pos是隱藏外層,ul設置margin負,li是循環元素,這是做border隱藏的黃金三層結構,屢試不爽。ul和li隻有兩層結構,沒有示例1那樣的三層機構,所以IE6中需要對ul設定寬度,如“_width:742px”。

  此示例可以理解為示例1的衍生,隻是多出來的margin值是看不見的不需要被隱藏,而border是可見的,需要一個外層來隱藏。

  此示例僅僅是margin-right的負值效果,經測試margin-bottom也有效,隻是IE6下需要去除循環元素的浮動,overflow:hidden的外層加上zoom:1。

  3、衝破padding的局限

  示例截圖:

  結構:

  關鍵樣式:

  說明:微吧右側有很多模塊,為了避免每個模塊都寫padding值,或者給每個模塊都套一個有padding值樣式的外層,我們選擇給右側外層寫一次padding值即可,所以像分割線這種沒有padding值的模塊需要使用margin負來實現。

  有了示例1、2的描述,這個就很簡單了,一層結構,直接margin負即可解決。

  但是IE6的事兒比較多,如果W8_linebox這個層有padding-left和padding-right的取值時,或者W8_linebox內部還包含有浮動的內容,則IE6就會出問題,解決辦法依然是給IE6寫寬度。

  4、合並border

  示例截圖:

  結構:

  關鍵樣式:

  說明:當左右容器高度都可變,又要滿足共享邊框線的UI設計時,除了給大容器一個縱向平鋪的背景圖之外,margin負值又能發揮作用了。

  以上說的都是父元素和子元素之間使用margin負值,而此示例是兩個兄弟元素之間某一個使用margin複製,IE6又來找事了,多出來的部分直接消失了,解決辦法是給IE6寫position:relative;zoom:1;

  這種方法也經常用在標簽切換的tabs中,用來隱藏兩個元素之間的邊線。初學者容易把此示例跟示例2的處理方式混淆,仔細推敲會發現相差勝遠吧。

  5、調皮的箭頭

  示例截圖:

  結構:

  關鍵樣式:

  說明:兩個i標簽是實現尖角的,字符圖標,可換膚。comment是評論展開框,arrow是尖角,comment_inner是評論框主要內容。margin負值的基本原理類似示例1,但對像素和兼容瀏覽器稍微費點勁。arrow的三層結構是通過實踐的黃金三層,能避免各種錯位和對不齊。

  實踐出真知,一個看似簡單的屬性研究起來也得花費大半天的功夫,你覺得值嗎?反正我覺得值。最後祝大家寫代碼的時候少一點糾結,多一點清澈

最後更新:2017-04-02 15:14:47

  上一篇:go 微軟證實瀏覽器IE9將不支持Flash
  下一篇:go 讓網站鏈接樣式千奇百怪