摘要 最后修改:2020年5月27日閱讀時間:觀點CSS或級聯樣式表-定義網頁外觀的語言,有時會表現Web開發人員經常將它忽略為不需要太多關注的“簡單”語言。記住一些最常見的屬性,一般的流程和谷歌搜索更晦澀的屬性是必經之路。但,正如更有經驗的開發人員所知道沒有一種語言應該被忽視
最后修改: 2020年5月27日
閱讀時間:
觀點
CSS或級聯樣式表-定義網頁外觀的語言, 有時會表現 Web開發人員經常將它忽略為不需要太多關注的“簡單”語言。 記住一些最常見的屬性, 一般的流程和谷歌搜索更晦澀的屬性是必經之路。 但, 正如更有經驗的開發人員所知道 沒有一種語言應該被忽視,因為總有做事的好方法和壞方法。
有了CSS, 用錯誤的方式做事非常容易,因為沒有編譯器會拋出錯誤, 沒有關于不良實施的警告或通知。 JavaScript之類的編程語言擁有大量跟蹤良好代碼質量的工具, 有些甚至向開發人員拋出消息,指出某些功能沒有以正確的方式實現。
在這篇相對簡短的文章中,我們將介紹開發人員面臨的一些常見問題以及如何解決這些問題。 這與特定視覺組件的特定實現細節無關。 反而, 該清單著重于思考過程, 體系結構和方法。
CSS難嗎? 不! 當然不, 它具有一些非?;镜慕Y構規則。 您有選擇器(類, ID, 元素), 你有屬性,你有范圍。 比C語言還少, Java或PHP。 開發人員可以在幾分鐘的閱讀和開始樣式中獲得整個想法。 當然, 要知道邊距和填充之間的區別, 您可以看看w3scho醇s, 但何時使用需要一些經驗。 但這不是火箭科學。
現在, 使事情變得更復雜的是選擇器競爭的所有方法,這些方法會覆蓋下一個, 以及一個屬性如何影響另一個屬性(例如display:block vs display:inline)。 然后我們有一些更小的細節,例如邊距塌陷, Z索引堆疊 GPU與CPU的性能屬性, 盒子模型和版式屬性。
最重要的是 新的CSS功能在瀏覽器中并非總是以相同的方式實現的, 有些甚至根本沒有實現,而另一些要求不同的屬性。
如果我們看一下以上兩段, 我們將看到前端開發人員在使用CSS時遇到的兩個主要階段–一個是“哦, 這就是全部? ”,第二個是“哦 ****, 那還不是全部 ”。 這就是“ CSS復雜性”的意思
有很多細微的東西交織在一起,很難擴展。 如果您只構建一個組件, 這很容易–您可以隨心所欲地設置樣式,并且可以正常工作。 但是將單個組件放在更大的應用程序中,將應用其他樣式。 您可能最終會與其他班級進入同一班級(例如)。按鈕),您的樣式將應用于整個應用程序, 打破一切。 壓力很大!
WordPress CSS:初學者基本指南
有一些聰明人提出的解決方案, 概述將是:
CSS命名約定,例如BEM, SMACSS等 定義了類名規則,這些規則將減少發生沖突的可能性。
JS中的CSS是一種較新的方法,實際上可以讓您在JS文件中編寫CSS組件(聽起來很糟糕, 看起來不好 但至少有一定道理)。 通常對React有效, Vue和其他人。
對于那些在一個文件中使用所有樣式的人來說,CSS模塊是JS中CSS的一種更為健全的方法。 CSS模塊封裝了每個組件的樣式,以使它們不會泄漏到其他組件, 使可重用性的方法更容易。 它也大大減輕了壓力!
首先 - 命名約定 它可能最難實現,因為它沒有任何工具可以幫助您。 這一切都留給了您作為開發人員 了解和應用 慣例。 您仍然必須考慮類名, 他們仍然不應該沖突,然后您必須讓整個團隊跟隨它。 相當困難!
JS中的CSS 和 CSS模塊 是實施修復。 他們整體上改變了代碼輸出, 這實際上使得不可能泄漏樣式。 但是他們需要完全不同的思維方式并建立設置, 并非總是可行或不需要的東西。
最好的建議是: 研究最常見和最成功的命名約定, 使用適合您公司或生態系統編碼標準的編碼。 了解組件分離,并開始考慮構建大型應用程序的范圍和單個單元。 從一開始就不是大型應用, 那將是不可能的。
如果您正在處理包含像React這樣的庫或像Vue這樣的框架的堆棧, 然后研究其他工具,使您可以使用它們管理樣式。 對于任何初學者到中級CSS開發人員, 他們將是一個很大的幫助! 除非您有更好的選擇,否則您可能永遠不想拋棄它們。
隨時注意新工具! 他們阻止我們解決開發者社區已經發現的問題, 修復并提供了處理這些問題的方法。
現在,我們概述了CSS復雜性的含義以及一些與之抗衡的入門技巧, 讓我們深入了解更詳細的概述并提供直接的示例。
網站設計技巧:如何在網頁設計中提升您的游戲水平
此列表絕對不完整, 不在很遠的地方。 可悲的是 您將面臨無數其他問題,并希望在Stackoverflow之類的網站中找到針對特定問題的直接解決方案。 然而, 如果您想加強自己的游戲, 當您用幾行CSS解決問題時, 您必須了解他們的工作。 為什么您必須更改標記, 以及為什么要更改一些選擇器, 特性?
開發人員面臨的一個常見問題是,兩個元素的總和(上下)不相加。 例如, 我們有兩個 p> 邊距為20px 0;的元素。 它們之間的總空間為20px, 不是40。 這是由于保證金崩潰。 除非元素浮動或絕對定位。 對于幾乎每個定義,幾乎都無處不在此“例外”。
首先, 幾乎不需要編寫如此高的z索引。 我什至看到過像99999999999999之類的值或更高。 第一的, z-index的最大值是2147483647, 所以上面的任何事情都是沒有用的。 第二, 它不是那樣工作的。 哪些元素位于頂部由堆棧上下文定義, 不僅是z-index值。 請參見下圖:
這是一個非常簡單的問題, 但是一些開發人員在動畫和采用方法方面遇到了困難。 第一的, 可以制作動畫嗎? 任何可以具有起始值的東西, 最終值以及介于兩者之間的任何值。 不透明度就是這樣的屬性, 您可以從0開始, 在1結束 并在0之間添加無限步長。3。 0。6758, 0。9875等 您不能為“顯示”設置動畫,因為在嵌入式和網格之間沒有中間步驟。
動畫上的FPS較差的最常見原因是由于錯誤地設置了動畫屬性。 如果您更改絕對元素的“左”屬性, 您將利用CPU進行計算。 然而, 如果您使用轉換, 那將是GPU。 眾所周知,GPU更好地進行圖形處理。
但是你怎么給陰影加動畫, 什么時候沒有像左/變換這樣的選擇? 出色地, 動畫不透明! 有兩個要素, 一開始 狀態, 一個以結束狀態。 然后淡入淡出開始和結束。 這會使它看起來像陰影在擴大, 實際上,它只會消失。
如果可能的話,請勿為會影響布局的元素設置動畫。 布局計算非常昂貴,CPU只能進行有限的計算。 經常, 每16ms少于1個 這會使FPS低于60。
什么是修飾符? 一類, 您可以將其添加到另一個類并替換其某些屬性。 例子:。按鈕有顏色:紅色。 。按鈕主要 有顏色:藍色。 所以, 當您添加時。以按鈕為主。按鈕, 您想要以藍色結尾。 十分簡單。 雖然, 并非每次都那么容易。 并非每次都是這樣的組件。
有時, 我們要覆蓋一個組件, 特定頁面上另一個組件的子級。 因此,我們最終得到了這樣的內容:。頁面名。section-name。組件1。component-2 { … } Already four levels deep. 但是事實證明,我們可以做到。頁面名。componen-2 { … }. 越短越好! 因為如果由于某種原因發生這種情況,您必須覆蓋該新樣式, 您不必深入5個層次, 然后6 然后更多。
深度選擇器令人恐懼,人們最終使用!重要的。 !當您要覆蓋無法控制的內聯樣式時,應使用“重要”字樣。 否則, 這是一個危險信號,表明您做的事情不正確。
現在, 當然, 對于大型應用程序,會有很多樣式, 這是完全可以理解的。 但是它總是那么大嗎? 在SASS中擴展類的錯誤方式(通過mixin)會生成較大的選擇器鏈, 滾動查看所有內容都需要花費幾秒鐘的時間。 適當的擴展名將大大減少該文件。 甚至可以將大小減小一倍。
包含的框架 其中只有少數幾個屬性正在使用也是大文件的常見原因。 將引導程序/基礎捆綁在一起, 字體很棒 動畫。css和其他一些類似的框架/庫,最終您會得到一個巨大的文件,您將在其中使用約2%的文件。 清理, 保持整潔,只使用真正需要的東西。 很多時候甚至不需要框架。
引導程序 基礎, UIKit和所有其他框架都很棒! 它們解決了一個實際問題,對Web開發社區非常有價值。 無需了解非常適合制作儀表板和站點的HTML或CSS。 但是不要這樣 開始編寫一些CSS,您會遇到一些問題。
您必須正確了解如何構建它們以及如何包含它們
您必須閱讀他們的文檔才能找到他們提供的自定義設置和mixin。
您必須遵循他們的標記,并教您的團隊這樣做。
您必須真正了解如何擴展和樣式化以創建獨特的視圖。
正確包含它們意味著您僅使用所需的內容。 為了擁有這樣一個框架,而不是禁止您構建任何自定義項, 您必須知道它的內部運作要好于平均水平。 并實現任何自定義設計, 您將必須修改設置和屬性。 然后編寫一些自定義CSS。 該自定義CSS可以覆蓋框架提供的所有內容。
因此,如果真的不需要這樣的CSS框架, 但是仍然有一個沒有被正確地利用, 這是一個危險信號,表明出現了問題。 當您開始使用它時, 您很可能會在項目生命周期結束之前使用它。 因此,這是一個重要的決定。
這更多是初學者的問題, 但這是很常見的一種 您應該給內容應有的自由。
例子, 您不想設置網站的 寬度 屬性設置為1200px。 您要設置 最大寬度 到1200像素。 那樣, 視口將使您的網站保持響應狀態。
然后, 輸入字段的高度不應為40px, 它應該有1em填充。 現在, 字體大小, 內容是定義大小的要素。 如果里面的內容增加了, 元素不會中斷。
在定義大小時,這種思維方式在整個應用程序中仍然很重要。 每個屬性都必須考慮它。 理想情況下, 不要為內容區域的寬度設置%, 因為那樣的話,您還必須編寫媒體查詢。
如果您有最大寬度, 當您的瀏覽器縮小到最大寬度以下時, 內容將填滿瀏覽器寬度,然后正??s小。 別的, 您將不得不編寫該尺寸的媒體查詢。 然后針對網站上寫的其他任何自定義尺寸。 由于方法錯誤,這增加了復雜性。 與我們已經討論過的所有其他方面幾乎相同。
JavaScript可以創造奇跡! 但這并不總是需要的。 您可以使用受良好支持的CSS來完成很多工作, 不需要功能(最好在以后自動測試),也不需要您的其他FE成員也了解JS。
當然, 有標準的切換功能, :checked時,您可以在其中使用復選框輸入來更改樣式, 有可以輕松觸發的背景疊加層,還有諸如counter之類的屬性可以創建比簡單更多的屬性 ol> 列表。
這里的建議是首先尋找CSS解決方案。 假設您要建立一個彈出窗口。 它顯示在中間(位置:固定)。 Then you want to close it from the [X] icon or when you click around it. 在JS中,您需要編寫事件,該事件將在彈出窗口內容之外的任何內容上觸發。 But still trigger on the [X] which is in the popup content.
反而, 從CSS中,您可以編寫另一個 股利> 有100vw, 彈出窗口下方為100vh大小和z-index。 然后,您只需在JS中定位該div, 這是單線的。
另一個例子-您想要一個可以放置在內容中的按鈕, 這將“擴展”其后的所有內容。 簡單的CSS, JS有點復雜。 使用CSS,您可以執行以下操作:
標簽。button-直觀地設置按鈕樣式。
Input:not(:checked) ~ * { display: none} - hide everything after it in the same container.
那個“在同一個容器中” 您需要在JS中使用自定義邏輯。 您還需要選擇所有元素, 這需要遍歷DOM樹。 然后將CSS樣式應用于它們, 最終以style =””標簽結尾, 反過來又需要!很重要,如果由于某種原因您必須解決這些問題。 在CSS中, 謝天謝地, 這非常簡單。
成為優秀網頁設計師的道路
如你看到的, 這些是很少見的常見問題。 為了涵蓋所有內容, 需要一本書。 但是希望 它們將為您提供一個良好的起點,并提醒您考慮由于錯誤的方法而可能引起的任何潛在問題。 查找此類問題需要大量的經驗和大量的閱讀經驗。 如果您在這里得出結論, 那么您在閱讀的正確道路上, 現在該練習了!
長期發展, 支持, 和您的WordPress平臺的創新。 DevriX為中小型企業和快節奏的初創企業提供技術合作伙伴關系。 我們構建WordPress解決方案并擴展平臺,最多可生成20個,000,每月000次網頁瀏覽。
瀏覽更多:發展
DevriX的創意主管和前端開發人員 亞歷克斯(Alex)的熱情在于學習新的網絡技術, 探索創新的方法來優化網站性能并改善用戶體驗。 亞歷克斯(Alex)喜歡騎自行車和數字藝術,最近開始在ELSYS技術學校教授設計。