亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

CSS編程中一些值得注意的地方小結

2024-07-11 09:00:29
字體:
來源:轉載
供稿:網友

   CSS即層疊樣式表,所以一層一層覆蓋其實是其本質特征。真正的問題在于維護,許多人認為CSS僅是樣式,不是代碼,無需維護,所以任意書寫,只要將自己需要的樣式的優先級設為最高即可,才導致了深層級CSS的出現,因為每次添加一個樣式就必須比以前的優先級高才能在頁面看到。深層級不僅造成維護性降低,可讀性也是一個問題,人不是機器,無法很優雅的按優先級閱讀,所以很難確認一個樣式用于哪里,其實還存在許多的冗余樣式,在任何地方都被覆蓋的樣式。這樣的代碼在擴展性上,一開始反而是有優勢的,因為添加一個新class,無需擔心影響其他地方,但慢慢隨著項目規模的增大,頁面增多,需要復制樣式的地方也越來越多,它們之間又存在微小的差異,設計的更改,需求的變化,這一切都會將這種快餐式的CSS推進柏油坑。因為難以維護,所以無法響應需求,所以無法復用,只能復制,惡性循環。

  正如上面所說的,問題在于可讀性、維護性、擴展性、復用性這幾個方面。所以只要提高它們就能解決問題, 雖然這么說,也不是如此簡單的。先來談談在CSS中,這些概念都有著怎樣的意義。

  可讀性

  有人認為CSS不是程序,不需要可讀性,有人認為CSS只要寫出來就有可讀性,因為很簡單。拋開各種預處理器不說,原生CSS結構確實簡單,沒有需要編程的部分,但仍然可能導致混亂。原因有二,一是CSS可以層疊,其中涉及到了優先級和作用范圍,如果寫的不好,人很難讀出其中的意義,二是CSS屬性眾多,加上CSS3引入了很多用法獨特的屬性,一個選擇器可能包含幾十個屬性。比如下面這段我隨便寫的CSS代碼:

  CSS Code復制內容到剪貼板

  span {

  -webkit-box-shadow: 6px 4px 4px red;

  -moz-box-shadow: 6px 4px 4px red;

  box-shadow: 6px 4px 4px red;

  }

  div span {

  border-width: 4px;

  border-style: dotted;

  border-color: blue;

  }

  #box {

  border-left: 2px solid red;

  border-bottom: 2px solid red;

  }

  乍一看也沒什么,都是border,大致能看出來這段CSS只是為了添加一個紅色的陰影讓box看起來比較立體。但中間的部分似乎是搗亂的,你可能會說這太傻了,看不到嗎。是的,當這3部分散落在上萬行的CSS中時,肯定看不到。于是有人很自然的想起了我們可愛的瀏覽器,沒錯,在瀏覽器中可以快速找到作用于目標的CSS樣式,但這也是萬惡之源。首先我假設你不知道中間那部分東西是為了什么而寫的,因為你是靠瀏覽器找到它的。然后剩下兩種可能,不管三七二十一改了再說和看看它為什么存在。前者悲劇的可能性是100%,后者悲劇的可能性是90%,因為你已經掉坑里了,很快我們會發現要修改它還牽扯到了另外的地方,接著在瀏覽器中探索到另一個莫名其妙的樣式,當你弄懂全部的時候,你應該已經把上萬行的代碼弄了個一清二楚了,也許最幸運的是,浪費了幾個小時的時間發現只需要修改一行就能達到目的。

  當然,我們可以天真的認為,只要把他們寫在一起就可以了,這樣找起來很簡單。而我將繼續順著這樣的思路來嘗試曝露問題。

  維護性

  所謂物以類聚是很有道理的,人們習慣將事物歸類,但問題是分類標準,樣式并不關心業務,無論是什么文字內容,還是功能有何不同,它在乎的只是樣式,比如文字的尺寸,間距和寬高,顏色等等。如果簡單的將一個組件的樣式放在一起,勢必帶來的就是小段代碼的重復書寫。不覺得有多嚴重?我來舉個栗子。

  CSS Code復制內容到剪貼板

  aside {

  box-shadow: 6px 4px 4px #AA3343;

  }

  nav {

  box-shadow: 6px 4px 4px #AB3633;

  }

  .item {

  box-shadow: 6px 4px 4px #AA3732;

  }

  .item.otherStatus {

  box-shadow: 6px 4px 4px #AA3132;

  }

  繼續說上面的例子,box需要陰影,但如果這個項目的UI統一風格,包括sidebar,navigator以及item都需要這樣的陰影呢?再如果,明天客戶或者UX一拍腦袋,這個陰影應該是灰色的不該是紅色的呢?不要繼續天真的認為全局替換是救命稻草。首先,沒有幾個網站會用red,blur做色調的,你用的應該是#AA3333,這樣的代碼,然后你發現sidebar用了#A43433,而navigator是#AB3633,等等,item有兩個狀態,而兩個狀態對應的顏色是不一樣的。這怎么可能?但當你打開瀏覽器的時候你會發現本來就相差無幾的顏色,在陰影中變得一模一樣了,誰看的出來呢,當初使用的時候可能也不過是隨意的在mockup中取的一個顏色。

  大量的重復帶來的不僅僅是代碼的冗余,我們必須靠人力去同步它們,而人很難保證它們的修改是完全一致的,尤其是當它們中引入了一些不一致的獨特的東西時。不要小看CSS,其后果就是進度和人力的壓力,后面就是PM有沒有讀過《人月神話》的事了。

  肯定有人在想,誰讓你當初要寫成這樣呢。我們在讀代碼的時候最喜歡問,當初為什么要這么寫?但慢慢的你會讀出它的歷史,有時候它是身不由己的。這就涉及到了下一個要討論的內容。

  擴展性

  擴展性是一個具有欺騙性的東西,所謂的擴展性其實就是在現有基礎上再次開發新東西的性能,但我認為它還必須有前提條件,那就是保持可讀性與維護性。

  簡單的追求可維護性是自取滅亡,原因很簡單,將新舊代碼完全分離的時候擴展性最高,因為不必擔心對以前的部分有影響,新的樣式可以隨意發揮。是不是很神奇,這樣想的我們寫下的代碼,肯定就是前面我們追問的代碼。所以自己回答自己吧,當初沒考慮可讀性和維護性,只想著快點增加新的樣式,就這么寫了。

  那什么才是一個好的擴展性呢,簡單來說,就是多功能產品。比如一個box,也許它的樣式就時

  復用性

  似乎我一直在說的就是重復,那我們就來說說復用性,如何才能復用CSS代碼是一個很大的問題,比如粒度,是一兩個屬性進行復用還是一大組選擇器進行復用呢,再比如對象,是為了class復用屬性,還是為了html復用class呢。這些選擇不算太重要,但是帶來的影響卻很重大,可以說是整個CSS結構的改變。下面繼續用box的陰影來討論復用。

  CSS Code復制內容到剪貼板

  .shadow {

  -webkit-box-shadow: 6px 4px 4px #A93334;

  -moz-box-shadow: 6px 4px 4px #A93334;

  box-shadow: 6px 4px 4px #A93334;

  border-left: 2px solid #A933349;

  border-bottom: 2px solid #A933349;

  }

  這樣看起來我有了一個shadow的class可以給任意的目標加上這個陰影了,但這導致了一個復用的問題,和上面那段搗亂的CSS樣式一樣,如果item已有另外2個border了,那這個class是無法去除的。所以復用時不僅要考慮需要什么,還要考慮不需要什么。另外一些必須的屬性比如display還有overflow等也是要考慮的,因為user agent的原因,很多屬性是隱藏在element中的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩一区在线| 亚洲乱码一区av黑人高潮| 91精品国产高清久久久久久| 日韩中文字幕在线视频播放| 久久99视频免费| 国产精品综合久久久| 国产91精品久| 国产午夜一区二区| 国产精品久久中文| 国产日韩欧美夫妻视频在线观看| 国产日韩在线精品av| 中文一区二区视频| 午夜免费在线观看精品视频| 国产精品视频99| 欧美一级淫片播放口| 亚洲天堂视频在线观看| 色综合久久天天综线观看| 亚洲午夜性刺激影院| 国产午夜精品免费一区二区三区| 亚洲最大的免费| 日韩av在线免播放器| 欧美国产极速在线| 综合网中文字幕| 国产亚洲欧洲高清| 清纯唯美亚洲激情| 亚洲激情在线观看视频免费| 热re91久久精品国99热蜜臀| 亚洲一品av免费观看| 国产成人自拍视频在线观看| 欧美国产视频一区二区| 久久久999国产精品| 成人妇女淫片aaaa视频| 性色av一区二区三区免费| 国产精品最新在线观看| 伊人av综合网| 92福利视频午夜1000合集在线观看| 欧美激情国产日韩精品一区18| 2025国产精品视频| 欧美第一页在线| 日本成人精品在线| 欧美激情在线播放| 亚洲精品永久免费精品| 亚洲3p在线观看| 成人a在线视频| 成人有码在线播放| 色中色综合影院手机版在线观看| 777国产偷窥盗摄精品视频| 精品福利在线观看| 中文字幕精品久久久久| 亚洲男女性事视频| 亚洲色图欧美制服丝袜另类第一页| 精品精品国产国产自在线| 亚洲视频视频在线| 日韩精品中文字幕在线播放| 国产免费一区二区三区在线观看| 成人网欧美在线视频| 精品国产精品自拍| 欧美精品久久久久久久免费观看| 久久亚洲一区二区三区四区五区高| 亚洲影视九九影院在线观看| 欧美精品久久久久久久免费观看| 日韩av在线免费看| 亚洲男人天堂2023| 国模精品系列视频| 成人免费视频网址| 国产成人精品av| 国产精品久久久久久久久久免费| 2018国产精品视频| 欧洲成人免费aa| 国产成人精品国内自产拍免费看| 最新亚洲国产精品| 2018日韩中文字幕| 午夜精品福利视频| 麻豆成人在线看| 欧美日韩国产成人在线| 亚洲免费伊人电影在线观看av| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲日本中文字幕免费在线不卡| 91精品在线国产| 国产日韩欧美影视| 丝袜美腿精品国产二区| 91福利视频在线观看| 日本一区二区三区在线播放| 亚洲免费一级电影| 91成人在线视频| 亚洲最大中文字幕| 91精品久久久久久久久久入口| 欧美一级片一区| 精品国产一区二区三区久久狼5月| 日韩av123| 精品magnet| 色777狠狠综合秋免鲁丝| 欧美激情欧美激情| 欧美日韩亚洲一区二区三区| 日韩av一区二区在线观看| 欧美激情第三页| 在线午夜精品自拍| 美女扒开尿口让男人操亚洲视频网站| 欧美精品一二区| 97精品在线观看| 欧美精品videossex88| 国产日韩欧美在线看| 日韩av最新在线| 日韩av免费在线播放| 久久国产精品电影| 久久久精品视频成人| 一本久久综合亚洲鲁鲁| 中文字幕亚洲激情| 国产精品色婷婷视频| 亚洲视频在线视频| 亚洲精品乱码久久久久久金桔影视| 日韩精品视频免费专区在线播放| 亚洲欧美在线x视频| 国产视频精品久久久| 日本一欧美一欧美一亚洲视频| 中文字幕在线看视频国产欧美在线看完整| 欧美一区二区三区……| 懂色av一区二区三区| 精品调教chinesegay| 国产午夜精品久久久| 亚洲四色影视在线观看| 欧美成人中文字幕在线| 亚州欧美日韩中文视频| 久久精品国产2020观看福利| 国产第一区电影| 在线观看欧美日韩国产| 欧美日韩亚洲精品一区二区三区| 国产成人激情视频| 精品国产乱码久久久久久婷婷| 黑人与娇小精品av专区| www.欧美精品一二三区| 国产91在线高潮白浆在线观看| 国产亚洲a∨片在线观看| 亚洲午夜性刺激影院| 欧美电影免费在线观看| 久久久黄色av| 久久久久久国产精品久久| 国产精品v片在线观看不卡| 在线精品国产成人综合| 色777狠狠综合秋免鲁丝| 欧美极品美女电影一区| 欧美亚洲一级片| 亚洲精品国产综合区久久久久久久| 欧美自拍视频在线观看| 欧美黑人视频一区| 欧美日韩国产成人| 日韩美女写真福利在线观看| 国产精品色午夜在线观看| 精品视频—区二区三区免费| 欧美成人精品一区| 91网站在线看| 欧美视频在线视频| 91精品国产777在线观看| 久99九色视频在线观看| 欧美一级黄色网| www.亚洲天堂| 欧美精品九九久久| 亚洲国产毛片完整版| 美女福利视频一区| 日本高清不卡的在线| 97国产精品视频人人做人人爱| 国产精品久久久久久久久久三级| 欧美性极品xxxx娇小| 欧美一区视频在线|