Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
eb中使用一些圖案做為背景圖案是一種時常可見的,早期一般都是通過圖片來完成。直至CSS一些新特性更趨成熟和穩定的時候,會通過CSS的相關技術,比如CSS的漸變屬性配合background-size之類的來做一些復雜而又美觀的Web圖案,運用于background-image之中。
而其中最為出名的是@Lea寫的CSS3 Patterns,并且@Lea在其《CSS Secrets》一書中特別介紹了CSS如何實現復雜背景圖案。雖然CSS Patterns實現的圖案是令人感到驚艷與好奇,但其擴展性以及適配性還是有一定的限制。因此有同學將CSS Patterns換成了SVG Patterns(也就是使用SVG相關的特性實現了CSS Patterns相同的效果)。當然,除此之外,還有很多工具能幫助我們來實現CSS圖案的效果,其中有的工具可以生成代碼,而有的工具會生成圖片。
隨著前端技術不斷的革新,不久前看到一個生成Web圖片的組件:<css-doodle /> —— 使用CSS繪制圖案的Web組件!
這是一個非常強大的Web組件,初次看到,你會覺得她非常的神奇和強大。至于為什么?你要是花日間閱讀完后面的內容,你就知道其中的原委了。為了讓大家對其有初次的感覺,先上一個使用<css-doodle />組件創作的圖案效果,如下:
是不是有點蠢蠢欲動的感覺。如果是的話,跟著下面的節奏繼續往下閱讀。
什么是<css-doodle />
<css-doodle />是一個Web組件。其基于Shadow DOM V1和Custom Elements V1來構建的。該組件可以幫助輕松的使用Custom Elements、Shadow DOM和CSS Grid創建任何你想要的圖案(CSS 圖案)。創建出來的圖案你可以運用于Web頁面中。
當你看到Custom Elements、Shadow DOM和CSS Grid的時候,你一定會心卻,這些東西瀏覽器能支持。事實上你的擔憂是正常的,因為該組件到目前為止只在最新的Chrome和Safari瀏覽器上可以正常的運行。如果你想運用于其他的瀏覽器上,你需要相關的Polyfilling。
簡單點說:
該組件通過其內部的規則(純CSS)會生成一系列的div構建的CSS Grid。你可以使用CSS輕松地操作這些div(單元格,每個div就是一個單元格)來生成圖案。生成的圖案既可以是靜態的,也可以是動態的。而其限制僅限于CSS本身的限制。
開始使用<css-doodle />
使用<css-doodle />組件創建圖案很簡單,當然有一個前提是你對其相關的API和使用方法有所了解。這里先來看怎么在你的項目中使用該組件。
使用<css-doodle />組件有兩種方法,第一種是比較原始的方法,就是在你的HTML文件中引入該組件所需要的JS和CSS文件。最簡單的方法就是直接引用cdnjs:
[xml] view plain copy
<script src="https://cdnjs.cloudflare.com/ajax/libs/css-doodle/0.3.0/css-doodle.min.js"></script>
這個script你可以在</head>或</body>結束標簽前調用。然后在任何你想要的地方調用:
[xml] view plain copy
<css-doodle> /* 繪制圖案的代碼放在這里 */
</css-doodle>
如果你不想使用cdnjs提供的在線資源,你也可以將css-doodle-0.3.0.min.js文件下載到你本地的項目中,通過相對路徑來引用下載的文件。
除此之外,也可以通過npm的方式將<css-doodle />安裝到你的項目中,然后通過import的方式將其引入到你的項目中。比如說在Vue項目中,你可以先執行:
npm install css-doodle
或者使用yarn來安裝:
yarn add css-doodle
然后在你想要使用<css-doodle />的地方先import,比如在App.vue文件中:
[python] view plain copy
import CSSDoodle from 'css-doodle'
然后你就可以在<template>中引用,比如:
這時在你的頁面中看到的效果如下:
這個時候,你和我可以一樣,對<css-doodle></css-doodle>中代碼一無所知,但正是這里面的一些代碼生成了上圖這樣的效果。這個時候你通過瀏覽器開發者工具查看代碼的時候,你會看到生成的代碼如下圖所示:
基本語法
<css-doodle />的語法是基于CSS的,這一點需要特別記住 —— 一切能用于Web的CSS,都可以用于此處!。除此之外,他還提供了一些額外的實用函數和簡寫的屬性。這些函數和屬性可以在其官網中查閱。
有關于<css-doodle />提供的函數和屬性,在本文章中不做一一介紹,如果你想使用該組件來創作一些有意思的Web圖案,那非常有必要花一定的時間去閱讀官方文檔。并嘗試自己寫寫Demo。你會很快就能掌握這些規則和使用姿勢!
先看一個簡單示例
使用<css-doodle />其后臺運行機制是使用CSS Grid布局創建一個網格系統。其實創建一個簡單的網格是<css-doodle />最為簡單的一個示例。比如說,我們創建一個5 x 8(五行八列)的網格,并且這個網格的width和其父容器的寬度相同(即100%),高度為瀏覽器屏幕高度的五分之一。那么我們就可以這樣寫代碼:
你將看到的效果如下:
特別注意:如果你的瀏覽器看不到任何的效果,請確認你使用的是最新版本的Chrome或Safari瀏覽器!后續的示例不再做相關的提示!
為了幫助沒時間閱讀官方文檔的同學能看懂上面的代碼,這里簡單的做一下說明:
再來看一個復雜的示例
上面看到的效果是一個簡單的示例效果,使用了一些最基本的樣式規則寫了一個五行八列的網格。其實我們還可以利用<css-doodle />提供的一些函數和一些其他的CSS樣式規則,制作一些復雜的效果,而且還可以是帶有動效的。比如下面這個示例:
對應的效果如下:
效果是不是很炫,很酷!
正如你所見,在上面這個示例中,還使用了@keyframe來聲明動畫,并且還使用了CSS自定義屬性。再次驗證,只要是瀏覽器支持的CSS屬性都可能用于<css-doodle />。
帶有交互效果的案例
上面的示例,使用@keyframes可以做一個帶有動畫的效果。除此之外,還有更神奇的效果,那就是使用<css-doodle />的JavaScript API還可以實現現有交互效果的圖案。比如下面這個示例:
當我們鼠標懸浮在上面的時,圖標會旋轉,這依舊采用的是@keyframes做的一個簡單動畫。除此之外,你點擊屏幕時,整個圖案會更新。
實現這樣的效果很簡單,就只是簡單的加了下面這么幾行JavaScript代碼:
[php] view plain copy
const myDoodle=document.querySelector('.my-doodle'); myDoodle.addEventListener('click', ()=> { myDoodle.update(); });
使用了一個.update()函數,當你在屏幕單擊時,整個組件會使用給定的樣式重新刷新。
上面看到的是不同方式實現的一些圖案效果。除些之外,你可以發動你的大腦和創意,制作一些其他更有意思的圖案效果。如果你感興趣的話,可以看看@yuanchuan在Codepen整理的有關于<css-doodle />組件制作的一些圖案效果。
總結
這篇文章主要科普了一下<css-doodle />組件。簡單的回顧一下,該組件是一個Web組件,主要是基于Shadow DOM V1 和 Custom Elements V1 來構建的。而其背后運行的原理是使用CSS Grid和純CSS規則制作的一些圖案。除了CSS自帶的規則之外,該組件還封裝了一些函數和屬性,能讓你快速制作一些圖案。另外還你還可以使用Unicode字符創建一些字符圖案。
當你閱讀到這里的時候,我想你對<css-doodle />組件有所了解,如果你動手了,或許你創作出一些與眾不同的圖案效果。希望你能在下面的評論中分享您的作品。如果你有其他的想法,也歡迎在下面的評論中分享。最后,該文章要是對您有所幫助的話,歡迎各位爺打個賞,鼓勵我繼續創作一些優質的教程。(^_^)
Web領域的一些基本概念。
Web(World Wide Web)叫全球廣域網,俗稱萬維網(www)。
W3C(World Wide Web Consortium)叫萬維網聯盟,是國際最著名的標準化組織,制定了web標準。
一個網頁包含了html元素 Css JavaScript,Html元素決定了網頁結構,Css進行了修飾美化,JavaScript控制了交互行為和動態效果。
web標準包含了下面三個方面:
Html不是一種編程語言,而是描述性的標記語言,主要作用是定義內容的結構。
2014年10月萬維網聯盟(W3C)完成了HTML5標準制定,是目前最新的HTM版本。
HTML5的出世,標志著web進入一個富客戶端(具有很強的交互性和體驗的客戶端程序)時代,像APP網頁,小程序都是HTML5的應用場景。
Html5新特性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"> <!--字符集-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="Author" content="">
<meta name="Keywords" content="關鍵詞" />
<meta name="Description" content="頁面描述" />
<title>頁面標題</title>
</head>
<body>
</body>
</html>
viewport用戶網頁的可視區域,一個針對移動網頁優化的頁面 viewport meta 標簽如下:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
head區域元素:
meta title style link script base。
body區域元素:
塊級元素:每個元素都是獨占一行
行內元素:元素在同一行水平排列
inline-block:元素可以排列在同一行顯示,并且可以設置一些塊元素屬性
通過Css:display:inline-block 改變元素。
很多元素都自帶了默認樣式,不同瀏覽器下默認樣式表現不一致,為了統一或者滿足一些需求我們需求將所有默認樣式清空,這種處理方式又稱為 Css Reset,比如:
*{
margin: 0;
padding: 0;
}
另外一種方案使用normalize.css,它將不同瀏覽器下的默認樣式進行了統一,
https://github.com/necolas/normalize.css
html中的單位是像素px
絕對單位
相對單位
屬性:字體、行高、顏色、大小、背景、邊框、滾動、換行、修飾屬性(粗體、斜體、下劃線)
p{
font-size: 20px; /*字體大小*/
line-height: 30px; /*行高*/
font-family: PingFang SC; /*字體類型:顯示PingFang SC,沒有就顯示默認*/
font-style: italic ; /*italic表示斜體,normal表示不傾斜*/
font-weight: bold; /*粗體或寫(400|500|600)*/
font-variant: small-caps; /*小寫變大寫*/
}
行高(line-height)
一般約定行高、字號都是偶數,這樣保證它們的差一定偶數除2得到整數,如下圖所示:
line-height
文本垂直居中
對于單行文本可以設置行高=盒子高度。
對于多行元素的垂直對齊,我們可以使用vertical-align: middle屬性,不過vertical-align 僅適用inline、inline-block 和 table-cell 元素。
vertical-align
vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
/* 指定長度值 */
vertical-align: 10em;
vertical-align: 4px;
/* 使用百分比 */
vertical-align: 20%;
/* 全局值 */
vertical-align: inherit;
vertical-align: initial;
vertical-align: revert;
vertical-align: unset;
內容溢出處理
filter:gray()
理解優先級很重要,有助于我們排查一些問題。瀏覽器將優先級分為兩部分:HTML的行內樣式和選擇器的樣式。
行內樣式
行內樣式是直接作用在元素,它的優先級高于選擇器樣式,使用!important可以提高樣式表的優先級。
<div style="font-size:16px">
</div>
選擇器樣式
<style type="text/css">
p{
font-size: 16px;
}
</style>
<link rel="stylesheet" href="style/app.css">
優先級規則如下:
優先級
我們通過下圖這種標記方式,就可以判斷出選擇器的優先級。
優先級
兩條經驗法則
由多個基礎選擇器組合成的復雜選擇器。
多個基礎選擇器連起來(中間沒有空格)組成一個復合選擇器(如:ul.nav)。復合選擇器選中的元素將匹配其全部基礎選擇器,.box.nav 可以選中 class="box nav" ,但是不能選中 class="box"。
用于選中某種特定狀態的元素,優先級(0,1,0)。
:nth-child(an+b)
更多參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS
偽元素選擇器可以向HTML標記中未定義的地方插入內容,優先級(0,0,1)。
屬性選擇器用于根據HTML屬性進行匹配元素,優先級(0,1,0)。
本文要點回顧,歡迎留言交流。
些一行代碼大多數會是CSS規則中的一個聲明。在某些情況下,選擇器可能不只是一個簡單的元素;在其他情況下,我會添加額外的聲明作為建議以獲得更好的體驗,因此使它們不再嚴格意義上是一行代碼——對于這些情況我提前道歉。
這些一行代碼中的一些更多是個人選擇,并不適用于所有網站(并非每個人都使用表格或表單)。我會簡要描述每一個,它們的作用(附帶示例圖片),以及為什么我喜歡使用它們。請注意,示例圖片可能會在前面例子的基礎上進行構建。
以下是這些一行代碼的作用概述:
限制視口內的內容寬度
body {
max-width: clamp(320px, 90%, 1000px);
/* 額外建議 */
margin: auto;
}
添加這個一行代碼將使內容大小占據視口的90%,將其寬度限制在320到1000像素之間(可以隨意更新最小和最大值)。
這個改變將自動使您的內容看起來更好看。它將不再是一個龐大的文本塊,而是看起來更有結構和組織。如果你還給body添加margin: auto;,內容將在頁面上居中。兩行代碼讓內容看起來好多了。
并排比較變化。左側(之前):一大塊文本。右側(之后):兩側有內邊距的文本。仍然很大但有更多空間。
對齊和包含的文本比一大堆文本看起來更好
增加文本大小
body {
font-size: 1.25rem;
}
讓我們面對現實:瀏覽器默認的16px字體大小是小的。雖然這可能是基于我變老的個人觀點
一個快速的解決方案是增加body中的字體大小。由于級聯和瀏覽器使用的em單位,網頁上的所有文本將自動增大。
并排比較。左側(之前):帶有文本的列。右側(之后):帶有更大字體的文本列。
更大的文本大小使閱讀更容易。
增加行間距
body {
line-height: 1.5;
}
另一個提高可讀性和打破可怕的文本墻的偏好是增加段落和內容中行與行之間的間距。我們可以輕松地用line-height屬性做到這一點。
并排比較。左側(之前):帶有文本的列。右側(之后):帶有文本的列(間距更大)。
行間的空間打破了文本墻和白色的河流。
這個選擇(與前兩個一起)將顯著增加我們頁面的垂直大小,但我向你保證文本將更易讀,對所有用戶更友好。
限制圖片大小
img {
max-width: 100%;
}
圖片的大小應該大致與它們將占據的空間相當,但有時我們會遇到真正長的圖片,導致內容移位并創建水平滾動。
避免這種情況的一種方法是設置最大寬度為100%。雖然這不是一個萬無一失的解決方案(邊距和內邊距可能影響寬度),但在大多數情況下它都能工作。
并排比較。左側(之前):圖片溢出內容大小導致出現滾動條。右側(之后):圖片調整到內容大小。
防止水平滾動并使圖片與文本更好地流動
限制內容中文本的寬度
p {
max-width: 65ch;
}
避免可怕的文本墻和空白河流的另一種策略是應用這種樣式,即使與body中的最大寬度結合使用。這可能看起來不必要,有時甚至很奇怪,因為段落會比其他元素更窄。但我喜歡這種對比和較短的行。
60ch或65ch的值在過去對我很有效,但你可以使用不同的值并調整最大寬度以滿足你的需求。在你的網頁上玩耍和探索它的外觀。
并排比較。左側(之前):文本占據整個寬度。右側(之后):文本占據大部分寬度。
將較大的文本塊分成較小的塊以提高可讀性
以更平衡的方式包裹標題
h1, h2, h3, h4, h5, h6 {
text-wrap: balance;
}
標題是網頁結構的重要部分,但由于它們的大小較大和內容較短,可能看起來很奇怪。特別是當它們占據多于一行時。一個有幫助的解決方案是使用text-wrap來平衡標題。
雖然balance似乎是text-wrap最流行的值,但它不是唯一的。我們也可以使用pretty,如果需要的話,它會將額外的一個詞移到最后一行,而不是平衡所有內容。不幸的是,pretty目前還沒有廣泛的支持。
并排比較。左側(之前):一個標題占據兩行,第二行只有1個詞。右側(之后):標題占據寬度相似的兩行。
平衡的換行可以改善可見性和可讀性
表單控件顏色與頁面樣式匹配
body {
accent-color: #080; /* 使用你喜歡的顏色 */
}
另一個小變化,雖然沒有顯著影響,但能讓東西看起來更好。直到最近,我們還不能用CSS樣式化原生表單控件,只能使用瀏覽器顯示。但情況已經改變。
開發一個完整的組件可能很麻煩,但使用這個一行代碼可以設置一個更接近網站其他部分和設計系統的顏色,這是可能的,而且很簡單。
并排比較。左側(之前):表單控件是默認的藍色。右側(之后):表單控件顏色與標題和鏈接顏色匹配(綠色)。
正是這些小細節(和顏色)讓頁面融為一體
易于跟隨的表格行
:is(tbody, table) > tr:nth-child(odd) {
background: #0001; /* 或者對于深色主題使用 #fff1 */
}
我們必須使用表格來顯示數據,而不是用于布局。但默認情況下表格很丑,我們不希望數據看起來很丑。特別是,有一件事有助于組織數據并使其更易讀,那就是有一個帶有交替深淺行的斑馬表格。
上面顯示的一行代碼使得實現這種樣式變得容易。它可以簡化為只有tr而不考慮tbody或table父元素,但這也會應用到表格頭部,這可能不是我們想要的。這是一個品味問題。
并排比較。左側(之前):所有表格行都是白色的。右側(之后):偶數表格行略微深色。
更容易水平跟隨數據(按行)
表格單元格和標題的間距
td, th {
padding: 0.5em; /* 或 0.5em 1em... 或任何不為0的值 */
}
讓表格更易訪問和更易讀的最后一個變化是通過給表格單元格和標題添加內邊距來稍微間隔內容。默認情況下,大多數瀏覽器沒有任何內邊距,不同單元格的文本相互接觸,使得區分一個單元格開始和另一個結束變得混亂。
我們可以更改內邊距值以調整到我們喜歡的大小。然而,避免過度以防止不必要的滾動或太多空白空間。
并排比較。左側(之前):表格單元格文本內容完全在一起。右側(之后):表格單元格內容明顯與其他表格單元格分開。
更容易水平和垂直跟蹤數據
減少動畫和移動
@media (prefers-reduced-motion) {
*, *::before, *::after {
animation-duration: 0s !important;
/* 額外建議 */
transition: none !important;
scroll-behavior: auto !important;
}
}
好吧,好吧。這段代碼遠不止一行。它有一個一行版本(通過將動畫持續時間設置為零秒來移除動畫),但網頁上還有其他使元素移動的東西。
通過在prefers-reduced-motion媒體查詢中設置這些聲明,我們將尊重用戶選擇減少移動的意愿。這種方法有些激進,因為它移除了所有移動,這可能不一定是用戶的意圖 - 它是"減少移動"而不是"無移動"。如果適當的話,我們仍然可以根據具體情況保留移動。
并排比較。左側(之前):一個圖像在網頁上移動。右側(之后):圖像是靜態的。
沒有動畫?沒問題!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。