整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端大神總結(jié)的HTML標(biāo)簽,真的是太全了-連載1

          TML

          本文,有很多很棘手的問(wèn)題,例如使用sublime 編輯器可能安裝插件的時(shí)候會(huì)使用不了view in browser我公司的電腦可以安裝、結(jié)果家里的電腦就報(bào)編碼錯(cuò)誤、需要改sublime插件源代碼解碼成utf8就可以了、還有一直連不上packagecontrol的網(wǎng)頁(yè),可以群(526929231)使勁砸我得到解決~ sublime編輯器對(duì)于前端來(lái)說(shuō)確實(shí)很好用!很好用!很好用! SublimeText、Webstorm推薦這兩個(gè)編輯器

          HTML起源

          剛開(kāi)始設(shè)計(jì)HTML語(yǔ)言是為了將文字圖像關(guān)聯(lián)在一起,用另一臺(tái)發(fā)送或接收

          HTML(HyperTextMark-up Language)超文本標(biāo)記語(yǔ)言

          HTML 不是一種編程語(yǔ)言,而是一中標(biāo)記語(yǔ)言(mark-up language),標(biāo)記語(yǔ)言是一套標(biāo)記標(biāo)簽(mark-up tag)

          HTML標(biāo)簽

          標(biāo)簽是由尖括號(hào) < > 把關(guān)鍵詞括起來(lái),標(biāo)簽通常是成對(duì)出現(xiàn)的

          Web瀏覽器

          讀取 HTML 文檔,使用標(biāo)簽來(lái)解析頁(yè)面的內(nèi)容,以網(wǎng)頁(yè)的形式現(xiàn)實(shí),瀏覽器不會(huì)現(xiàn)實(shí)HTML標(biāo)簽

          現(xiàn)在市場(chǎng)上主流五大瀏覽器

          每種瀏覽器都有自己的內(nèi)核(引擎)(解析網(wǎng)頁(yè)的一個(gè)程序,io以什么方式去渲染它都要通過(guò)引擎去執(zhí)行)

          目前主流的瀏覽器分為五種

          • Chrome谷歌瀏覽器 (Webkit內(nèi)核,V8 js引擎)

          • Firefox火狐瀏覽器 (Gecko內(nèi)核)

          • Internet Explorer IE瀏覽器( Trident內(nèi)核)

          • Opera 歐朋瀏覽器 (Presto內(nèi)核) 主要市場(chǎng):移動(dòng)端

          • Safari 蘋果瀏覽器 (Webkit內(nèi)核,但JS引擎為Nitro)

            不需要去記,簡(jiǎn)單了解下

          標(biāo)簽使用規(guī)范

          1. 標(biāo)簽必須閉合

          2. 所有標(biāo)簽名一律小寫

          3. 代碼縮進(jìn),使閱讀代碼更加易懂

          4. 特殊符號(hào)規(guī)范使用

          5. 命名規(guī)范,見(jiàn)名之意

          PS: 所有的標(biāo)記符號(hào)都是半角英文

          編輯器

          眾說(shuō)紛紜編輯器太多,最終只是一個(gè)工具,希望同學(xué)們能從萬(wàn)千世界中找到適合自己的編輯器伙伴

          編輯器描述
          EditPlus手寫模式,適合初學(xué)手寫,無(wú)代碼提示(有IE調(diào)試視圖)
          Sublime 插件特別多,占用內(nèi)存小,啟動(dòng)速度快,打開(kāi)大項(xiàng)目較慢,管理文件方式有些缺陷
          webstorm集成插件特別多,啟動(dòng)較慢,占用內(nèi)存大,開(kāi)發(fā)和管理視圖都很方便
          Dreamweaver 適合初學(xué),主要代碼提示和代碼插入功能強(qiáng)大,主要偏向于設(shè)計(jì)(有設(shè)計(jì)視圖)

          Sublime插件列表

          插件名描述詳情請(qǐng)戳
          emmet前端自動(dòng)補(bǔ)全,提供快捷補(bǔ)全方式
          ColorPicker調(diào)色板,顏色選擇器
          SublimeTmplsublime模板,可以快速創(chuàng)建一個(gè)HTML模板
          view in browser用快捷方式打開(kāi)瀏覽器進(jìn)行調(diào)試HTML(需要配置參考后面網(wǎng)頁(yè))
          LiveReload實(shí)時(shí)刷新HTML(編輯器里按下保存ctrl+s的時(shí)候,已經(jīng)打開(kāi)的HTMl會(huì)自動(dòng)刷新)谷歌插件文件安裝方法需要配合谷歌LiveReload插件插件文件下載
          Color HighlighterCSS顏色代碼高亮及顏色預(yù)覽提示
          CSS3CSS3的代碼高亮提示還針對(duì)了CSS3的選擇器及錨類選擇器:hover :first-child :first-child ...的高亮
          JavaScript Completions原生js 代碼提示
          Sublime-Better-Completion可自選開(kāi)啟代碼提示,支持jQ、js、bootstrap、php、sql ...倉(cāng)庫(kù)地址此插件只能通過(guò)Github克隆下載安裝安裝方法

          注:Github 網(wǎng)頁(yè)中 下面是有詳細(xì)的使用方法 packagecontrol.io官網(wǎng) 里面search 可以進(jìn)行搜索插件名字來(lái)找到具體使用方法,還有什么不懂或者安裝出現(xiàn)編碼錯(cuò)誤以及安裝不上的可以拍打我~

          模板的配置

          配置描述
          !DOCTYPE html不是標(biāo)簽,主要用于文檔類型的聲明
          charset="utf-8"聲明字符編碼集
          http-equiv="Content-Type"把Content屬性關(guān)聯(lián)到HTTP頭部(協(xié)議頭)

          HTML模板

          簡(jiǎn)單了解,并不需要熟練掌握

          HTML樹(shù)狀結(jié)構(gòu)

          Dom節(jié)點(diǎn)樹(shù)

          HTML網(wǎng)頁(yè)擴(kuò)展名

          .html .htm這兩種是比較常見(jiàn)的

          在早期系統(tǒng)中文件名是有8+3組成 三個(gè)擴(kuò)展名所以不支持四個(gè)字母的擴(kuò)展采用.htm

          現(xiàn)在通常使用.html作為擴(kuò)展名


          標(biāo)簽的學(xué)習(xí)

          接下來(lái)所有的標(biāo)簽元素學(xué)習(xí)都在body標(biāo)簽里面去敲打?qū)崿F(xiàn)、

          H標(biāo)簽

          為了突出標(biāo)題,字體大小和加粗發(fā)生相應(yīng)的改變

          <h1>我是大主題</h1>
          <h2>我是大主題</h2>
          <h3>我是大主題</h3>
          <h4>我是大主題</h4>
          <h5>我是大主題</h5>
          <h6>我是大主題</h6>
          <!doctype html><!-- 讓瀏覽器使用html5的標(biāo)準(zhǔn)解析 -->
          <html>
           <head>
           <!-- 設(shè)置字符編碼集讓瀏覽器使用utf8解析當(dāng)前網(wǎng)頁(yè) -->
           <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
           <meta name="keywords" content="SEO搜索引擎,關(guān)鍵詞,多個(gè)請(qǐng)用逗號(hào)分開(kāi)" />
           <meta name="description" content="網(wǎng)頁(yè)描述,八十字內(nèi)" />
           <title>瀏覽器標(biāo)簽頁(yè)上的網(wǎng)頁(yè)標(biāo)題</title>
           </head>
           <body> <!-- 所有的標(biāo)簽學(xué)習(xí)都在這body里面去敲,上面head元素里面的內(nèi)容做個(gè)了解就可以了 -->
           
           <h1>我是大標(biāo)題</h1>
           <h2>我是主題2</h2>
           <h3>我是主題3</h3>
           <h4>我是主題4</h4>
           <h5>我是主題5</h5>
           <h6>我是主題6</h6>
           
           </body>
          </html>

          可以發(fā)現(xiàn)h標(biāo)簽從h1到h6會(huì)隨著數(shù)值越小字越小,并且都是會(huì)加粗和各占一行的狀態(tài)(前后的元素都會(huì)被換行)

          h1標(biāo)簽一般一個(gè)頁(yè)面里面只會(huì)寫一次,為了讓搜索引擎爬取到 (寫一次利于SEO搜索引擎優(yōu)化)

          p段落標(biāo)簽

          <p>
           冬著一身素衣,緩緩而來(lái),季節(jié)沒(méi)有了往日的姹紫嫣紅,卻用簡(jiǎn)單的線條,勾勒出一幅潔白的畫,純潔通透,輕盈自然。
          </p>

          特殊符號(hào)

          剛我們了解到了瀏覽器是識(shí)別尖括號(hào)的,如果要在頁(yè)面中顯示html標(biāo)記那要怎么做呢?這時(shí)候就需要特殊符號(hào)的表示來(lái)顯示

          符號(hào)描述
          空格&nbsp;
          小于&lt;
          大于&gt;
          引號(hào)&quot;
          版權(quán)&copy;
          ×叉&times;
          &&amp;

          加粗標(biāo)簽

          符號(hào)描述
          B標(biāo)簽物理加粗,頁(yè)面呈現(xiàn)加粗狀態(tài).
          Strong標(biāo)簽不僅能加粗,還利于搜索引擎優(yōu)化
          <b>物理加粗,頁(yè)面呈現(xiàn)加粗狀態(tài).</b>
          
          <strong>不僅能加粗,還利于搜索引擎優(yōu)化,就是類似于百度、谷歌這種搜索引擎爬取你的網(wǎng)頁(yè)的時(shí)候會(huì)查找這個(gè)標(biāo)簽里面的內(nèi)容來(lái)優(yōu)化顯示網(wǎng)頁(yè)的排名</strong>

          可以根據(jù)word文檔上面發(fā)現(xiàn) b是加粗 u是下劃線 i是傾斜 同樣適用于標(biāo)簽

          <i>我是傾斜</i> <u>我加了下劃線</u>

          A標(biāo)簽

          • 鏈接一個(gè)頁(yè)面,點(diǎn)擊則會(huì)跳轉(zhuǎn)這個(gè)鏈接頁(yè)面

          • 使用錨點(diǎn)滾動(dòng)到設(shè)定的位置

          <a href=""></a> a標(biāo)簽中的href控制點(diǎn)擊的時(shí)候跳轉(zhuǎn)到哪里如果沒(méi)寫表示刷新當(dāng)前頁(yè)面
          
          
          <a href="#"></a> 跳轉(zhuǎn)到當(dāng)前頁(yè)面(回歸到頁(yè)面頂部)
          
          
          <a href="javascript: void(0);"></a> 死鏈接,不會(huì)跳轉(zhuǎn),一般用于js特效
          
          
          <a href="#name">錨點(diǎn)到一個(gè)標(biāo)簽上所對(duì)應(yīng)的ID名字,點(diǎn)擊則跳到那個(gè)標(biāo)簽位置</a>
          
          
          <a >跳轉(zhuǎn)到百度</a> 跳轉(zhuǎn)到百度 需要注意的是 http 協(xié)議不能少

          點(diǎn)擊#flag的a標(biāo)簽的時(shí)候會(huì)跳到到上面h2標(biāo)簽

          只有擁有name屬性的

          a標(biāo)簽

          才能錨點(diǎn),還有一種方式是通過(guò)ID標(biāo)識(shí)唯一元素,也可以跳轉(zhuǎn)(不僅僅是a標(biāo)簽)

          補(bǔ)充標(biāo)簽

          描述標(biāo)簽
          滾動(dòng)標(biāo)簽marquee
          字體標(biāo)簽font
          定義水平線hr

          滾動(dòng)標(biāo)簽

          marquee

          屬性描述
          direction滾動(dòng)方向
          behivior行為

          behivior

          描述
          alternate交替滾動(dòng)
          scroll滾動(dòng)
          slide滑落

          Font標(biāo)簽

          屬性描述
          color顏色
          size0-7
          face字體

          hr水平線

          與font相似,擁有color和size屬性

          hr標(biāo)簽沒(méi)有結(jié)束標(biāo)簽 按照早期的習(xí)慣也H5也遵循XHTML的解析 所以統(tǒng)一會(huì)加一個(gè)反斜杠表示結(jié)束這個(gè)標(biāo)簽,不加也能夠正確顯示,但是養(yǎng)成一個(gè)良好的習(xí)慣確實(shí)重要,比如微信小程序就是沒(méi)有結(jié)束標(biāo)簽必須要使用一個(gè)反斜杠結(jié)尾否則直接報(bào)錯(cuò)、


          練習(xí)一、

          結(jié)合今天所學(xué),寫一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)

          內(nèi)容如下:

          • 寫一篇收獲或感受 / 寫一篇文章 ————> 為什么要自己寫,網(wǎng)上一大把哈哈,可以自己寫下,鍛煉下思維

          • 需要包括h、p、a、加粗

          • 題材不限,至少200字

          練習(xí)二、

          在習(xí)題一的文章底部,使用滾動(dòng)標(biāo)簽進(jìn)行滾動(dòng)方向?yàn)?5°

          可以在頭部找到我,如有勘誤、錯(cuò)別字、盡情見(jiàn)諒很用心的檢查了 碼了這么久

          家好,很高興又見(jiàn)面了,我是"高級(jí)前端?進(jìn)階?",由我?guī)е蠹乙黄痍P(guān)注前端前沿、深入前端底層技術(shù),大家一起進(jìn)步,也歡迎大家關(guān)注、點(diǎn)贊、收藏、轉(zhuǎn)發(fā),您的支持是我不斷創(chuàng)作的動(dòng)力。

          CSS-in-JS 技術(shù)用于在同一文件中編寫組件和樣式,同時(shí)保持簡(jiǎn)單性和清晰度。

          根據(jù) styled-components 創(chuàng)建者 Max Stoiber 的說(shuō)法,超過(guò) 60% 的 React 安裝者還安裝了 CSS-in-JS 庫(kù)。 在 JavaScript 中編寫 CSS 非常流行,尤其是在使用 React 或 Angular 等 JS 框架時(shí)。 但是許多庫(kù)可用于簡(jiǎn)化編寫 CSS-in-JS 的過(guò)程,本文將向大家介紹6款零運(yùn)行時(shí) CSS-in-JS 庫(kù)。

          什么是 CSS-in-JS

          CSS-in-JS 是一種樣式技術(shù),使用 JavaScript 直接對(duì)組件進(jìn)行樣式設(shè)置,其使用變量來(lái)定義組件的 CSS。 該變量將包含所有 CSS 屬性,確保組件與其指定的樣式無(wú)縫銜接。

          隨著基于組件的樣式變得越來(lái)越流行,CSS-in-JS 近年來(lái)也有所增加。 由于大多數(shù)現(xiàn)代 JavaScript 框架都是組件化,從而進(jìn)一步推動(dòng) CSS-in-JS 的流行。 CSS 現(xiàn)已嫣然成為 JavaScript 的一個(gè)模塊,可以在需要時(shí)自由定義和使用。

          在類似 React 的現(xiàn)代框架中,開(kāi)發(fā)者可以通過(guò)編寫 CSS-in-JS 使用內(nèi)聯(lián)技術(shù)在 JavaScript 文件的 JSX 部分中編寫 CSS。 但這種技術(shù)可能會(huì)令人困惑、可讀性較差,并且可能會(huì)破壞代碼流程。 通過(guò)庫(kù)編寫 CSS-in-JS 并不能取代 CSS 的模塊化。

          使用 CSS-in-JS

          在 CSS-in-JS 中,開(kāi)發(fā)者可以在變量中定義樣式,然后通過(guò)用變量標(biāo)簽包裝組件來(lái)設(shè)置組件樣式。

          styled 標(biāo)簽是從庫(kù)中導(dǎo)入,創(chuàng)建一個(gè)具有預(yù)定義樣式的 React 組件,然后在 HTML 標(biāo)簽中使用。 下面的示例使用 h1,根據(jù)定義的 CSS 屬性進(jìn)行自定義。 編碼完成后,定義屬性,如下所示:

          const Title = styled.h1`
            font-family: sans-serif;
            font-size: 48px;
            color: #f15f79;
          `;

          接下來(lái),將內(nèi)容包裝在變量標(biāo)簽中:

          const App = () => <Title>Hello world!</Title>;

          這就是在大多數(shù) CSS-in-JS 庫(kù)中定義樣式的方式。

          使用 CSS-in-JS 的優(yōu)點(diǎn)

          使用 CSS-in-JS 具有以下優(yōu)點(diǎn):

          • 輕松實(shí)現(xiàn)代碼共享:使用 CSS-in-JS 共享代碼更容易、更高效,因?yàn)槠渌丝梢暂p松理解代碼,而無(wú)需嘗試在項(xiàng)目中查找組件和樣式
          • 減少 DOM 負(fù)載:因?yàn)閷?CSS 和組件定義在同一個(gè)文件中,所以組件的 CSS 僅在組件加載時(shí)才會(huì)加載,減少了虛擬 DOM 上不必要的負(fù)載
          • 在 CSS 中使用 JavaScript:由于 CSS 是在 JavaScript 文件中定義的,因此可以使用復(fù)雜的 JavaScript 邏輯來(lái)定義 CSS 屬性的值
          • CSS 中更好的錯(cuò)誤處理:由于 CSS 也會(huì)經(jīng)歷編譯過(guò)程,因此會(huì)在編譯過(guò)程中收到錯(cuò)誤消息,從而可以輕松查找和解決 CSS 中潛在的錯(cuò)誤
          • 可移植性:將樣式和組件放在同一個(gè)文件中可以輕松在其他項(xiàng)目中使用該組件

          使用 CSS-in-JS 的缺點(diǎn)

          使用 CSS-in-JS 有一些缺點(diǎn),包括:

          • 由于樣式是在 JavaScript 文件中定義的,因此如果禁用 JavaScript,將會(huì)影響組件的樣式
          • 樣式被雙重解析,一次由庫(kù)解析,然后在插入樣式時(shí)由瀏覽器解析
          • 傳統(tǒng)上,當(dāng)加載網(wǎng)頁(yè)時(shí),瀏覽器只是讀取 CSS 并渲染。 當(dāng)使用 CSS-in-JS 時(shí),瀏覽器動(dòng)態(tài)生成 CSS 樣式標(biāo)簽,然后讀取它并將其應(yīng)用到網(wǎng)頁(yè),而讀取和生成此內(nèi)容會(huì)消耗性能時(shí)間

          編譯時(shí)和運(yùn)行時(shí) CSS-in-JS

          編譯時(shí)是指用高級(jí)、人類可讀語(yǔ)言編寫的代碼被編譯器轉(zhuǎn)換為低級(jí)、機(jī)器可讀代碼,而運(yùn)行時(shí)是指程序轉(zhuǎn)換后的代碼在最終用戶的計(jì)算機(jī)上運(yùn)行。

          改善 CSS-in-JS 由于雙重解析而導(dǎo)致的性能時(shí)間損失的解決方案之一是,庫(kù)可以首先將 CSS-in-JS 塊轉(zhuǎn)換為單獨(dú)的 CSS 文件。 然后,瀏覽器將讀取這些樣式并將其應(yīng)用到網(wǎng)頁(yè),最終節(jié)省生成 style 標(biāo)簽時(shí)浪費(fèi)的時(shí)間。 這稱為零運(yùn)行時(shí) CSS-in-JS。 它對(duì)于性能至關(guān)重要的規(guī)模化或復(fù)雜的項(xiàng)目特別有用。

          零運(yùn)行時(shí) CSS-in-JS 的方案

          Linaria

          Linaria 的編譯時(shí) CSS-in-JS 工具提供了介于純 CSS 解決方案和運(yùn)行時(shí) CSS-in-JS 方法之間的中間解決方案,即編譯時(shí)方案。

          Linaria 具有以下特征:

          • 在 JS 中編寫 CSS,但運(yùn)行時(shí)為零,CSS 在構(gòu)建期間被提取到 CSS 文件
          • 熟悉的 CSS 語(yǔ)法與 Sass 類似嵌套
          • 將基于動(dòng)態(tài) prop 的樣式與 React 綁定一起使用,在幕后使用 CSS 變量。即動(dòng)態(tài)樣式使用 CSS 變量,從而不需要任何運(yùn)行時(shí)
          • 使用 CSS 源映射輕松找到定義樣式的位置便于調(diào)試
          • 使用 stylelint 在 JS 中檢查 CSS
          • 使用 JavaScript 進(jìn)行邏輯,無(wú)需 CSS 預(yù)處理器
          • 可以選擇使用任何 CSS 預(yù)處理器,例如 Sass 或 PostCSS
          • 使用 @linaria/atomic 支持原子樣式

          總之,Linaria 在編譯時(shí)生成 CSS 類并將其提取到單獨(dú)的 CSS 文件中,而不是在運(yùn)行時(shí)生成。 這使得可以避免運(yùn)行時(shí) CSS-in-JS 解決方案的性能損失,同時(shí)保留組件隔離和動(dòng)態(tài)樣式匹配的優(yōu)勢(shì)。

          import { css } from '@linaria/core';
          import { modularScale, hiDPI } from 'polished';
          import fonts from './fonts';
          // Write your styles in `css` tag
          const header = css`
            text-transform: uppercase;
            font-family: ${fonts.heading};
            font-size: ${modularScale(2)};
            ${hiDPI(1.5)} {
              font-size: ${modularScale(2.5)};
            }
          `;
          // Then use it as a class name
          <h1 className={header}>Hello world</h1>;

          使用 Linaria 的缺點(diǎn)主要包括以下兩點(diǎn):

          • 難以實(shí)施:正確實(shí)施 Linaria 可能很困難,因?yàn)樗枰O(shè)置 Babel
          • 設(shè)置打包器:從 JS 文件中提取 CSS 需要使用打包器,例如 Rollup 或 webpack、Vite,有一定的技術(shù)門檻

          下面是 Linaria 的完整的 Webpack 示例配置:

          const webpack = require('webpack');
          const path = require('path');
          const MiniCssExtractPlugin = require('mini-css-extract-plugin');
          const dev = process.env.NODE_ENV !== 'production';
          module.exports = {
            mode: dev ? 'development' : 'production',
            devtool: 'source-map',
            entry: {
              app: './src/index',
            },
            output: {
              path: path.resolve(__dirname, 'dist'),
              publicPath: '/dist/',
              filename: '[name].bundle.js',
            },
            optimization: {
              noEmitOnErrors: true,
            },
            plugins: [
              new webpack.DefinePlugin({
                'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) },
              }),
              new MiniCssExtractPlugin({ filename: 'styles.css' }),
              // 將所有文件中的 CSS 提取到單個(gè) styles.css 中
            ],
            module: {
              rules: [
                {
                  test: /\.js$/,
                  exclude: /node_modules/,
                  use: [
                    { loader: 'babel-loader' },
                    //   最終通過(guò)Babel處理
                    {
                      loader: '@linaria/webpack-loader',
                      options: { sourceMap: dev },
                    },
                    // 添加js文件的linaria的自定義loader
                  ],
                },
                {
                  test: /\.css$/,
                  use: [
                    {
                      loader: MiniCssExtractPlugin.loader,
                    },
                    {
                      loader: 'css-loader',
                      options: { sourceMap: dev },
                    },
                  ],
                },
                {
                  test: /\.(jpg|png|gif|woff|woff2|eot|ttf|svg)$/,
                  use: [{ loader: 'file-loader' }],
                },
              ],
            },
            devServer: {
              contentBase: [path.join(__dirname, 'public')],
              historyApiFallback: true,
            },
          };

          Astroturf

          Astroturf 允許開(kāi)發(fā)者在 JavaScript 文件中編寫 CSS,而無(wú)需添加任何運(yùn)行時(shí)層,并使用現(xiàn)有的 CSS 處理管道。

          Astroturf 具有以下特征:

          • 零運(yùn)行時(shí) CSS-in-JS: 獲得與 CSS-in-JS 相同的許多好處,但不會(huì)失去需要特定于框架的 CSS 處理的靈活性,同時(shí)保持 CSS 完全靜態(tài),無(wú)需運(yùn)行時(shí)樣式解析。
          • 使用現(xiàn)有工具 :Sass、PostCSS、Less 等工具依然可用 , 但仍將樣式定義寫入 JavaScript 文件中
          • 整個(gè)組件位于單個(gè)文件中: 在模板文字中編寫 CSS,然后像在單獨(dú)的文件中一樣使用
          import React from 'react';
          import { css } from 'astroturf';
          
          const btn = css`
            color: black;
            border: 1px solid black;
            background-color: white;
          `;
          
          export default function Button({ children }) {
            return <button className={btn}>{children}</button>;
          }

          Astroturf 的缺點(diǎn)主要包括:

          • 糟糕的文檔:Astroturf 在 GitHub 上缺乏合適的自述文件。 它還缺乏貢獻(xiàn)指南,并且文檔很短,經(jīng)常遺漏重要細(xì)節(jié)
          • 實(shí)現(xiàn):為了提取樣式,Astroturf 需要 Rollup 或 webpack 等捆綁器,這可能很難實(shí)現(xiàn)

          Reshadow

          Reshadow 用 JavaScript 編寫。 該庫(kù)提供了許多功能,最值得注意的是為 React 等虛擬 DOM 框架提供了 Shadow DOM 開(kāi)發(fā)人員體驗(yàn),同時(shí)還支持 CSS-in-JS 語(yǔ)法。

          Reshadow 的典型特征包括:

          • 擺脫額外的抽象
          • 以類似本機(jī)的方式為虛擬 DOM 編寫?yīng)毩⒌恼Z(yǔ)義樣式
          • 匹配元素、組件和 prop 的樣式
          • 編譯時(shí)樣式處理和高效運(yùn)行時(shí)
          • 靜態(tài)樣式提取選項(xiàng)
          • 靜態(tài)分析
          • 結(jié)合 css-in-js 和 css-modules 方法或選擇更適合您的方法
          • PostCSS 生態(tài)系統(tǒng)的所有優(yōu)勢(shì)
          • 可互操作,支持將其與 React、Preact、Vue、htm 中的組件一起使用。
          import styled, { css } from 'reshadow';
          
          const styles = css`
            button {
              font-size: 16px;
              cursor: pointer;
              padding: 10px 15px;
              border-radius: 20px;
              border: 2px solid;
              background-color: white;
              color: darkorange;
            }
          `;
          
          const Button = ({ children, ...props }) =>
            styled(styles)(<button {...props}>{children}</button>);

          Reshadow 的缺點(diǎn)包括:

          • 文檔和內(nèi)容較差:網(wǎng)絡(luò)上關(guān)于 Reshadow 的內(nèi)容很少,而且文檔也不是很全面。 因此,學(xué)習(xí)需要時(shí)間并且可能很困難
          • 貢獻(xiàn)者較少:Reshadow 的貢獻(xiàn)者很少,這減慢了解決附加到其 GitHub 存儲(chǔ)庫(kù)的問(wèn)題的過(guò)程

          vanilla-extract

          vanilla-extract 是 TypeScript 中的零運(yùn)行時(shí)樣式表。使用本地范圍(locally scoped)的類名和 CSS 變量在 TypeScript(或 JavaScript)中編寫樣式,然后在構(gòu)建時(shí)生成靜態(tài) CSS 文件。

          基本上,它是“TypeScript 中的 CSS Modules”,但具有作用域 CSS 變量 等更多特性。

          • 所有在構(gòu)建時(shí)生成的樣式 : 就像 Sass、Less 等。
          • ? 對(duì)標(biāo)準(zhǔn) CSS 的最小抽象。
          • 可與任何前端框架配合使用,甚至無(wú)需任何前端框架。
          • 本地范圍的類名,就像 CSS module 一樣。
          • 本地范圍的 CSS 變量、@keyframes 和 @font-face 規(guī)則。
          • 高級(jí)主題系統(tǒng),支持同步主題,而且沒(méi)有全局變量
          • 用于生成基于變量的計(jì)算表達(dá)式的實(shí)用程序。
          • 通過(guò) CSSType 實(shí)現(xiàn)類型安全樣式。
          • ?♂? 用于開(kāi)發(fā)和測(cè)試的可選運(yùn)行時(shí)版本。
          • 用于動(dòng)態(tài)運(yùn)行時(shí)主題的可選 API。
          // styles.css.ts
          
          import { createTheme, style } from '@vanilla-extract/css';
          
          export const [themeClass, vars] = createTheme({
            color: {
              brand: 'blue',
            },
            font: {
              body: 'arial',
            },
          });
          
          export const exampleStyle = style({
            backgroundColor: vars.color.brand,
            fontFamily: vars.font.body,
            color: 'white',
            padding: 10,
          });

          vanilla-extract 的缺點(diǎn)包括:

          • 未積極維護(hù):存在大量未解決的問(wèn)題和 pull 請(qǐng)求,其中一些已經(jīng)存在一年多了。

          Treat

          Treat 是可主題化、靜態(tài)提取的 CSS-in-JS,運(yùn)行時(shí)間接近于零。使用 Treat 時(shí),樣式在 .treat.js 或 .treat.ts 文件中聲明。 Treat 執(zhí)行 .treat.js 文件并在構(gòu)建時(shí)生成所有 CSS 規(guī)則,僅打包生成的 CSS 樣式。

          如果使用主題功能,Treat 會(huì)在構(gòu)建時(shí)生成所有 CSS 樣式。 然后,當(dāng)切換主題時(shí),它會(huì)在運(yùn)行時(shí)交換預(yù)先生成的類。

          Treat 的特征可以總結(jié)為以下幾點(diǎn):

          • Treat 在構(gòu)建時(shí)執(zhí)行的處理文件(例如 Button.treat.js)中用 JavaScript/TypeScript 編寫樣式。
          • 所有 CSS 規(guī)則都是提前創(chuàng)建的,因此運(yùn)行時(shí)非常輕量,只需要交換預(yù)先存在的類。 事實(shí)上,如果應(yīng)用程序不使用主題,甚至根本不需要運(yùn)行時(shí)。
          • 所有 CSS 邏輯(包括其依賴項(xiàng))都不會(huì)包含在最終 Bundle 中。
          • 由于主題是通過(guò)生成多個(gè)類來(lái)實(shí)現(xiàn)的,因此支持舊版瀏覽器。
          import { style } from 'treat';
          
          export const buttonStyle = style({
            backgroundColor: '#1e4db6',
            color: '#fff',
            padding: '10px 20px',
            borderRadius: '5px',
            border: 'none',
          });
          

          然后,可以將聲明的樣式導(dǎo)入到組件中,如下例所示。

          import React from 'react';
          import { buttonStyle } from './Button.treat';
          
          export const Button = () => {
            return <button className={buttonStyle}>Click me</button>;
          };

          Treat 的缺點(diǎn)包括:

          • Treat 需要 webpack,這可能很難設(shè)置
          • 缺少對(duì)前端框架的有限開(kāi)箱即用支持

          Goober

          Goober 是一個(gè)流行的、輕量級(jí)的、零依賴包。 雖然它不是嚴(yán)格意義上的零運(yùn)行時(shí) CSS-in-JS 解決方案,但其內(nèi)置的 extractCss 函數(shù)允許開(kāi)發(fā)者提取靜態(tài) CSS 文件并將它們注入到 <head> 標(biāo)記中,就像在零運(yùn)行時(shí) CSS-in- 中一樣。

          使用 Goober 的優(yōu)點(diǎn)包括:

          • 捆綁包大小:Goober 是輕量級(jí)的(約 1kb)
          • 框架支持:Goober 與框架無(wú)關(guān)

          該 API 的靈感來(lái)自于 emotion 的 styled 函數(shù)。意思是,您使用 tagName 調(diào)用它,它會(huì)返回該標(biāo)簽的 vDOM 組件。請(qǐng)注意,需要在使用樣式函數(shù)之前運(yùn)行安裝程序。

          import { h } from 'preact';
          import { styled, setup } from 'goober';
          
          // Should be called here, and just once
          setup(h);
          
          const Icon = styled('span')`
            display: flex;
            flex: 1;
            color: red;
          `;
          
          const Button = styled('button')`
            background: dodgerblue;
            color: white;
            border: ${Math.random()}px solid white;
          
            &:focus,
            &:hover {
              padding: 1em;
            }
          
            .otherClass {
              margin: 0;
            }
          
            ${Icon} {
              color: black;
            }
          `;

          Goober 的缺點(diǎn)包括:

          • 從技術(shù)上講不是零運(yùn)行時(shí) CSS-in-JS 設(shè)置:它需要 Babel 或 webpack,這可能很難設(shè)置
          • 對(duì)其他捆綁器的支持:Goober 沒(méi)有對(duì)某些捆綁器進(jìn)行開(kāi)箱即用的集成

          參考資料

          https://github.com/callstack/linaria

          https://blog.logrocket.com/comparing-top-zero-runtime-css-js-libraries/

          https://github.com/astroturfcss/astroturf

          https://github.com/yandex/reshadow

          https://github.com/vanilla-extract-css/vanilla-extract

          https://github.com/seek-oss/treat

          https://github.com/cristianbote/goober

          https://medium.com/@arnabroyy/21-best-javascript-and-css-library-in-2023-for-web-development-e6e6af939a1e

          TML 的 input 標(biāo)簽是構(gòu)建網(wǎng)頁(yè)表單的基石。它提供了多種多樣的輸入字段類型,使網(wǎng)頁(yè)開(kāi)發(fā)人員能夠創(chuàng)建功能強(qiáng)大且用戶友好的表單。從簡(jiǎn)單的文本輸入到復(fù)雜的日期選擇器,input 標(biāo)簽為表單交互提供了無(wú)限的可能性。在本文中,我們將全面探索 input 標(biāo)簽的各種應(yīng)用,并揭秘一些提高用戶體驗(yàn)的技巧。

          input 標(biāo)簽的類型揭秘

          input 標(biāo)簽提供了豐富的類型屬性,使我們能夠創(chuàng)建不同的輸入字段。一些常見(jiàn)的類型包括:

          • 文本輸入:type="text" 創(chuàng)建一個(gè)單行文本輸入字段。
          • 密碼輸入:type="password" 創(chuàng)建一個(gè)隱藏用戶輸入的密碼字段。
          • 復(fù)選框:type="checkbox" 創(chuàng)建一個(gè)可以選擇多個(gè)選項(xiàng)的復(fù)選框。
          • 單選按鈕:type="radio" 創(chuàng)建一個(gè)只能選擇一個(gè)選項(xiàng)的單選按鈕。
          • 下拉列表:type="dropdown" 或 type="select" 創(chuàng)建一個(gè)下拉列表供用戶選擇。

          自定義輸入字段

          input 標(biāo)簽的真正強(qiáng)大之處在于它的自定義能力。你可以利用各種屬性來(lái)定制輸入字段,滿足特定的需求。例如:

          • placeholder 屬性為輸入字段提供占位符文本,指導(dǎo)用戶輸入。
          • required 屬性確保輸入字段在提交表單前必須填寫。
          • pattern 屬性使用正則表達(dá)式來(lái)驗(yàn)證輸入是否符合特定模式。
          • min 和 max 屬性可以指定輸入字段的數(shù)值范圍。

          增強(qiáng)用戶體驗(yàn)

          除了基本的輸入字段類型,input 標(biāo)簽還提供了多種功能來(lái)增強(qiáng)用戶體驗(yàn):

          • 自動(dòng)完成:autocomplete 屬性可以啟用瀏覽器自動(dòng)完成功能,幫助用戶快速填寫表單。
          • 輸入提示:list 屬性可以將輸入字段與 datalist 元素關(guān)聯(lián),為用戶提供輸入提示。
          • 日期和時(shí)間選擇器:type="date" 和 type="time" 允許用戶方便地選擇日期和時(shí)間。
          • 文件上傳:type="file" 讓用戶可以上傳文件。

          樣式化輸入字段

          使用 CSS,你可以完全控制輸入字段的外觀和感覺(jué),使其與網(wǎng)頁(yè)設(shè)計(jì)完美融合。你可以改變輸入字段的背景顏色、邊框、字體大小和圓角等。來(lái)看一個(gè)例子:

          <style>
            input[type="text"] {
              padding: 10px;
              border: 1px solid #ccc;
              border-radius: 5px;
            }
          </style>
          
          <input type="text" placeholder="輸入你的名字">
          

          在這個(gè)例子中,我們使用 CSS 為文本輸入字段添加了內(nèi)邊距、邊框和圓角。

          結(jié)論:打造動(dòng)態(tài)表單

          HTML input 標(biāo)簽為網(wǎng)頁(yè)開(kāi)發(fā)人員提供了構(gòu)建動(dòng)態(tài)表單的強(qiáng)大工具。通過(guò)結(jié)合不同的輸入類型、自定義屬性和樣式化技術(shù),你可以創(chuàng)建出引人入勝且易于使用的表單。不斷探索 input 標(biāo)簽的無(wú)限可能,讓你的網(wǎng)頁(yè)表單更加高效、直觀和視覺(jué)吸引力!釋放你的創(chuàng)造力,打造令人難忘的用戶體驗(yàn)!


          主站蜘蛛池模板: 免费一区二区无码东京热| 一本大道在线无码一区| 另类一区二区三区| 亚洲日韩精品无码一区二区三区| 日韩十八禁一区二区久久| 久久国产精品免费一区| 亚洲av无码不卡一区二区三区| 久久无码人妻一区二区三区| 国产精品福利一区二区| 视频精品一区二区三区| 亚洲国产综合无码一区| 日韩免费一区二区三区在线播放| 精品免费国产一区二区三区| 久久影院亚洲一区| 中文精品一区二区三区四区| 人妻无码一区二区三区四区| 中文国产成人精品久久一区| AV无码精品一区二区三区| 国产一区二区三区免费在线观看| 亚洲AⅤ视频一区二区三区| 无码精品视频一区二区三区| 亚洲国产一区二区三区在线观看| 日韩精品一区二区三区不卡| 亚洲视频免费一区| 人妻无码一区二区三区| 在线中文字幕一区| 中文无码AV一区二区三区| 日韩一区二区视频在线观看| 国产一区二区视频在线观看| 亚洲欧洲日韩国产一区二区三区| 日本高清无卡码一区二区久久| 中文字幕一区视频| 91国在线啪精品一区| 精品无码国产AV一区二区三区| 中文字幕精品无码一区二区三区 | 国产精品女同一区二区久久| 亚洲一区在线视频| 国偷自产一区二区免费视频| 国产一区二区三区免费看| 亚洲中文字幕久久久一区| 国产精品日本一区二区不卡视频|