整合營銷服務(wù)商

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

          免費咨詢熱線:

          2024 高頻前端面試題匯總之CSS篇(二)

          2024 高頻前端面試題匯總之CSS篇(二)

          **2024 高頻前端面試題匯總之CSS篇(二)**

          **引言:**

          在Web前端領(lǐng)域,CSS作為視覺呈現(xiàn)的靈魂,一直是各大公司面試考核的重點之一。為了幫助廣大前端開發(fā)者充分準(zhǔn)備即將到來的面試,本文將繼續(xù)盤點2024年高頻CSS面試題目,并通過詳盡的解析與實例代碼,帶您鞏固和拓展CSS知識體系,提升面試成功率。

          ## **一、CSS布局進(jìn)階**

          **題目1:Flexbox布局的基本原理與應(yīng)用場景**

          **解答:**

          Flexbox布局(彈性盒布局)是一種現(xiàn)代化的CSS布局方式,通過`display: flex`聲明父元素為彈性容器,然后通過一系列相關(guān)的屬性(如`flex-direction`、`justify-content`、`align-items`等)對子元素進(jìn)行靈活的定位與尺寸分配。

          ```html

          <!DOCTYPE html>

          <html lang="en">

          <head>

          <style>

          .container {

          display: flex;

          flex-direction: row; /* 主軸方向,默認(rèn)為水平 */

          justify-content: space-around; /* 主軸上的對齊方式 */

          align-items: center; /* 交叉軸上的對齊方式 */

          }

          .box {

          flex: 1; /* 子元素按比例分配空間 */

          border: 1px solid black;

          padding: 1em;

          margin: 0.5em;

          }

          </style>

          </head>

          <body>

          <div class="container">

          <div class="box">Box 1</div>

          <div class="box">Box 2</div>

          <div class="box">Box 3</div>

          </div>

          </body>

          </html>

          ```

          **題目2:Grid布局的特點與難點**

          **解答:**

          CSS Grid布局提供了一個二維網(wǎng)格系統(tǒng),用于定義行與列,并精確放置和對齊項目。相較于Flexbox,Grid布局更適合處理復(fù)雜的二維布局問題。

          ```html

          <!DOCTYPE html>

          <html lang="en">

          <head>

          <style>

          .grid-container {

          display: grid;

          grid-template-columns: repeat(3, 1fr); /* 創(chuàng)建3等寬的列 */

          grid-gap: 10px; /* 設(shè)置行與列之間的間距 */

          }

          .grid-item {

          border: 1px solid black;

          padding: 1em;

          }

          </style>

          </head>

          <body>

          <div class="grid-container">

          <div class="grid-item">Item 1</div>

          <div class="grid-item">Item 2</div>

          <div class="grid-item">Item 3</div>

          <!-- ... 更多網(wǎng)格項 -->

          </div>

          </body>

          </html>

          ```

          ## **二、CSS選擇器與優(yōu)先級**

          **題目3:CSS選擇器的層級關(guān)系與權(quán)重計算**

          **解答:**

          CSS選擇器的優(yōu)先級由內(nèi)聯(lián)樣式(1000)、ID選擇器(100)、類選擇器(10)、屬性選擇器(10)、偽類(10)、元素選擇器(1)和通用選擇器(0)依次遞減。當(dāng)多個選擇器應(yīng)用于同一元素時,優(yōu)先級高的規(guī)則生效。

          ```css

          /* 例子:優(yōu)先級比較 */

          #id .class[attr] p:hover {

          color: red; /* 優(yōu)先級:1013 */

          }

          .class p {

          color: blue; /* 優(yōu)先級:11 */

          }

          ```

          ## **三、CSS單位與響應(yīng)式設(shè)計**

          **題目4:rem、em與vw/vh單位在響應(yīng)式設(shè)計中的應(yīng)用**

          **解答:**

          - `rem`是相對于根元素(通常是`html`)的字體大小的單位,便于實現(xiàn)整體布局的響應(yīng)式調(diào)整。

          - `em`是相對于父元素字體大小的單位,常用于局部相對單位的設(shè)定。

          - `vw/vh`分別代表視窗寬度和高度的百分比,適合創(chuàng)建完全依賴視口大小的響應(yīng)式設(shè)計。

          ```css

          /* 示例 */

          html {

          font-size: 16px; /* 根元素字體大小 */

          }

          .container {

          width: 80%; /* 百分比單位 */

          }

          .title {

          font-size: 2rem; /* 相對于根元素字體大小 */

          }

          .subtitle {

          font-size: 1.2em; /* 相對于父元素字體大小 */

          }

          .hero-image {

          width: 100vw; /* 占滿整個視口寬度 */

          height: 50vh; /* 占視口高度的一半 */

          }

          ```

          ## **四、CSS性能優(yōu)化**

          **題目5:如何優(yōu)化CSS以提高渲染性能?**

          **解答:**

          - 減少CSS文件體積,通過合并、壓縮和精簡CSS代碼。

          - 采用現(xiàn)代CSS特性替代舊有的布局和定位方式,如Flexbox和Grid布局。

          - 避免過于復(fù)雜的選擇器,減少CSS解析時間和渲染性能損耗。

          - 使用媒體查詢優(yōu)化不同設(shè)備的加載與渲染,實現(xiàn)按需加載CSS。

          - 利用CSS3硬件加速屬性(如`transform`和`will-change`)提高動畫性能。

          以上只是部分CSS高頻面試題的解析與示例,希望能幫助您在面試前全方位地復(fù)習(xí)和掌握CSS的核心知識點。持續(xù)關(guān)注本系列教程,我們將持續(xù)提供更多有價值的前端面試攻略,助您在職業(yè)生涯中乘風(fēng)破浪,披荊斬棘!

          然任何文本編輯器都可以在創(chuàng)建超文本標(biāo)記語言文檔時起作用,但一些HTML編輯器針對HTML的語法進(jìn)行了優(yōu)化。根據(jù)可定制性、特性和功能,我們確定了九個最佳的Windows免費編輯器。

          最適合Web設(shè)計師和前端開發(fā)人員:Notepad ++

          Notepad++是最受歡迎的免費筆記應(yīng)用程序和代碼編輯器。默認(rèn)情況下,這是Windows中提供的Notepad軟件的一個更強大的版本。

          Notepad++包括行號、顏色編碼、提示和其他標(biāo)準(zhǔn)Notepad應(yīng)用程序所沒有的有用工具等功能。這些新增功能使其成為web設(shè)計師和前端開發(fā)人員的理想選擇。

          最佳開源,免費編輯器:Komodo Edit

          Komodo有兩個版本:Komodo Edit和Komodo IDE。Edit是開源的,可以免費下載。這是IDE的精簡版。

          Komodo Edit包含許多用于HTML和CSS開發(fā)的強大功能。此外,它還允許你添加擴(kuò)展以獲得更多的語言支持或其他有用的功能,如特殊字符。

          Komodo并不是最好的HTML編輯器。盡管如此,它的價格還是不錯的,尤其是如果你使用XML構(gòu)建,它確實非常出色。

          最適合Web應(yīng)用程序開發(fā):Aptana Studio 3

          Aptana Studio 3為網(wǎng)頁開發(fā)提供了一個有趣的視角。它不關(guān)注HTML,而是關(guān)注JavaScript和其他允許你創(chuàng)建豐富的互聯(lián)網(wǎng)應(yīng)用程序的元素。

          Aptana Studio 3可能不是最適合簡單網(wǎng)頁設(shè)計需求的。但是,如果你更傾向于web應(yīng)用程序開發(fā),它的工具集可能非常適合。

          最好的Java和Web頁面:Apache NetBeans

          Apache NetBeans提供了一個Java IDE,可以幫助你構(gòu)建健壯的web應(yīng)用程序。

          像大多數(shù)IDE一樣,Apache NetBeans有一個陡峭的學(xué)習(xí)曲線,因為它的工作方式與其他網(wǎng)絡(luò)編輯器不同。然而,一旦你習(xí)慣了它,你就會發(fā)現(xiàn)它非常有用。

          IDE的版本控制和開發(fā)人員協(xié)作功能對于在大型開發(fā)環(huán)境中工作的人員來說非常方便。如果你編寫Java和網(wǎng)頁,這是一個很好的工具。

          最適合開始創(chuàng)建應(yīng)用程序:Microsoft Visual Studio Community

          Microsoft Visual Studio Community是一個可視化IDE,可幫助web開發(fā)人員和其他程序員為web、移動設(shè)備和桌面創(chuàng)建應(yīng)用程序。你以前可能使用過它,但Visual Studio Community是該軟件的最新版本。

          微軟為專業(yè)和企業(yè)用戶提供免費下載和付費版本(包括免費試用版)。

          Microsoft Visual Studio Code是一款免費的僅限編碼的應(yīng)用程序,是Visual Studio套件的一部分,但它是獨立的。它是一個優(yōu)秀的獨立代碼編輯器,適用于數(shù)十種編碼和腳本語言。

          最佳所見即所得編輯器:BlueGriffon

          BlueGriffon是一系列網(wǎng)頁編輯器中的最新一個,從Nvu開始,發(fā)展到Kompozer,現(xiàn)在在BlueGriffn達(dá)到頂峰。Gecko是Firefox的渲染引擎,它為它提供了強大的功能,因此它很好地展示了如何在符合標(biāo)準(zhǔn)的瀏覽器中渲染工作。

          它可用于Windows、macOS和Linux以及各種語言。

          這是唯一一個真正的所見即所得編輯器列入這個列表。因此,它對初學(xué)者和小企業(yè)主更具吸引力,他們希望以可視化的方式工作,而不是以代碼為中心的界面。

          最佳全功能HTML編輯器:Bluefish

          Bluefish是一個功能齊全的HTML編輯器,適用于各種平臺,包括Windows、macOS和Linux。

          值得注意的功能包括代碼敏感的拼寫檢查、多種語言(HTML、PHP、CSS等)的自動完成、代碼片段、項目管理和自動保存。

          Bluefish主要是一個代碼編輯器,而不是專門的網(wǎng)絡(luò)編輯器。這意味著它對使用HTML以外的語言編寫的web開發(fā)人員具有靈活性。然而,如果你是一名設(shè)計師,想要更多以網(wǎng)絡(luò)為中心或所見即所得的界面,Bluefish可能不適合你。

          最適合創(chuàng)建復(fù)雜的Web應(yīng)用程序:Eclipse

          Eclipse是一個復(fù)雜的開發(fā)環(huán)境,非常適合在各種平臺和語言上進(jìn)行大量編碼的人。它是在插件設(shè)計中構(gòu)建的,所以如果你需要編輯某些內(nèi)容,請找到合適的插件并開始工作。

          如果你創(chuàng)建復(fù)雜的web應(yīng)用程序,Eclipse有許多功能可以使你的項目更容易構(gòu)建。它提供Java、JavaScript和PHP插件以及一個面向移動開發(fā)人員的插件。

          最適合網(wǎng)絡(luò)設(shè)計初學(xué)者:CoffeeCup Free HTML Editor

          CoffeeCup HTML編輯器有一個免費版本和一個付費完整版本。免費產(chǎn)品是一款不錯的產(chǎn)品,但該平臺的許多最佳功能都需要你購買完整版本。

          CoffeeCup還提供了一個名為“響應(yīng)式網(wǎng)站設(shè)計2”的升級,支持響應(yīng)式網(wǎng)頁設(shè)計。此版本可以與編輯器的完整版本一起添加到捆綁包中。

          許多網(wǎng)站將其列為免費的所見即所得編輯器。然而,當(dāng)我們測試它時,它需要購買CoffeeCup Visual Editor才能支持所見即所得。免費版本只是一個非常好的文本編輯器。

          這個編輯器在網(wǎng)絡(luò)設(shè)計師中的得分與Eclipse和Komodo Edit一樣高,但在網(wǎng)絡(luò)開發(fā)人員中的得分沒有那么高。然而,如果你是網(wǎng)絡(luò)設(shè)計和開發(fā)的初學(xué)者,或者你是一個小企業(yè)主,那么這個工具比Komodo Edit或Eclipse有更多適合你的功能。

          過一個階段測試,終于找到兩個 markdown 轉(zhuǎn) html 并實現(xiàn)代碼高亮的工具,并以最簡代碼(幾十行)實現(xiàn)了炫酷的展示效果。步驟很少,也很簡單,零基礎(chǔ)也應(yīng)該一看就會。往下看吧......,需要安裝有Node環(huán)境哦!

          1 緣起

          因為markdown 文檔編輯器具有語法簡單、文件簡潔、標(biāo)準(zhǔn)化、使用廣泛等特點,所以一直習(xí)慣采用 markdown 編輯器寫文章,但仍有一些網(wǎng)站不支持 markdown 編輯器,想嘗試將 markdown 轉(zhuǎn)成 html 再發(fā)布,采用 Javascript 來實現(xiàn),尤其想達(dá)到 CSDN 博客、簡書這樣的展示效果。

          圖1 CSDN 博客 markdown 文章及代碼塊高亮效果

          圖2 簡書 markdown 文章及代碼高亮效果

          2 插件選擇及應(yīng)用模式

          2.1 插件選擇

          2.1.1 markdown 轉(zhuǎn) html 插件

          比較常用的 M2H 插件有:

          • Markdown-it 中文:https://markdown-it.docschina.org/ github:https://github.com/markdown-it/markdown-it
          • Marked 官網(wǎng):https://marked.js.org/ github:https://github.com/markedjs/marked

          從網(wǎng)上獲得的 markdown-it 和 marked 的比較,主要表現(xiàn)在:在性能、使用簡單程度、正則解析(中文支持)方面,marked 比較好;在擴(kuò)展性上,markdown-it 表現(xiàn)則更好一些。 由于 markdown 應(yīng)用比較成熟,而且一般使用也不會太復(fù)雜,所以選擇性能好、中文支持好的 marked,至于 marked 的擴(kuò)展性,也嘗試了一下,滿足常見的應(yīng)用是沒問題的。

          2.1.2 代碼塊高亮模塊

          代碼塊高亮插件有:

          • heiglightjs 官網(wǎng):https://highlightjs.org/ github:https://github.com/highlightjs/highlight.js
          • prismjs 官網(wǎng):https://prismjs.com/ github:https://github.com/PrismJS/prism

          對 heiglightjs 和 prismjs 分別做了簡單測試,發(fā)現(xiàn) prismjs 使用非常簡單,易于上手,且代碼精簡,效率高,而 heiglightjs 相對比較復(fù)雜,使用起來不習(xí)慣,也許是各人喜好不同吧。所以選擇使用 prismjs 插件。

          2.2 插件應(yīng)用模式

          M2H 一般有兩種應(yīng)用模式:一種是前端渲染,如在 vue 中使用;另一種是在后端生成 html 文件,在瀏覽器展示,如在 node 中使用。 此處我選擇在 node 中生產(chǎn)靜態(tài) html 文件的應(yīng)用模式,用戶可以在電腦端當(dāng)作 markdown 轉(zhuǎn) node 的工具使用; 至于前端渲染,vue 頁面打包時總會包含一個 chunk-vendors.js 文件,會引起頁面加載變慢,有很多辦法壓縮該文件,但這已經(jīng)超出了 M2H 的范疇了,在此不再贅述。

          3 計劃實現(xiàn)的功能

          • 讀取指定 mardown 文件(test.md),生成目標(biāo) html 文件(test.html)——測試 marked 插件解析及渲染功能
          • html 文件根據(jù)代碼塊對應(yīng)的語言進(jìn)行高亮顯示——測試 prismjs 插件的 language 語言包功能
          • html 文件實現(xiàn)顯示語言名稱、“復(fù)制”按鈕、行號——測試 prismjs 插件的 Plugins 功能
          • 自定義代碼塊的顯示樣式修改——測試拓展功能
          • 最終實現(xiàn)的界面如下圖:

          圖3 最終實現(xiàn)的markdown 轉(zhuǎn)化及代碼塊渲染效果

          4 編碼實現(xiàn)

          4.1 準(zhǔn)備工作

          4.1.1 創(chuàng)建項目

          創(chuàng)建目錄:marked-prismjs,使用 vsCode 打開該目錄。

          4.1.2 安裝插件

          在 vsCode 里的終端輸入相關(guān)命令進(jìn)行插件安裝 1)安裝 marked 插件

          npm install marked --save

          2)安裝 prismjs

          npm install prismjs --save

          4.1.3 下載 prismjs 的 css 和 js 文件

          訪問官網(wǎng)下載頁:https://prismjs.com/download.html

          • 按下圖選擇 themes,我比較喜歡“Tomorrow Night” 這個主題,您可以根據(jù)自己的喜好選擇

          圖4 themes 選項

          • Languages 選項,默認(rèn)即可,如下圖,其中包含 CSS、Javascript 語言

          圖5 編程語言包選項

          • Plugins 選項,可以根據(jù)功能需要選擇,此處選擇4個選項,依次為:行號、顯示語言名稱、工具條、復(fù)制到剪貼板的按鈕,如下圖:

          圖6 插件選項

          • 分別點擊下圖的“DOWNLOAD JS”和“DOWNLOAD CSS”按鈕下載 prism.js 和 prism.css 到項目根目錄下。

          4.1.4 編寫 markdown 測試文件

          • 編寫 markdown 測試文件:test.md,內(nèi)容如下:

          # 這是H1標(biāo)簽

          ## 下面是 javascript 代碼:

          ```javascript let a=1; console.log(a); ```

          4.2 編寫實現(xiàn)轉(zhuǎn)換功能的 js 文件

          創(chuàng)建 m2h.js 文件,內(nèi)容為:

          const { marked }=require('marked') // 引入 marked 模塊
          const prism=require('prismjs') // 引入 prism 模塊
          const fs=require('fs') // 引入文件處理模塊
          const mdContent=fs.readFileSync('test.md', 'utf-8') // 讀取 markdown 文件內(nèi)容
          // 下面是 marked 擴(kuò)展功能,當(dāng)節(jié)點(token)類型是代碼(code)時,自定義渲染節(jié)點功能,及使用自定義的 renderer 函數(shù)來代替默認(rèn) renderer 函數(shù),達(dá)到改寫當(dāng)前節(jié)點生成的 html 代碼的樣式
          marked.use({
              extensions: [{
                  name: 'code',   
                  renderer(token) {
                      if (token.type==='code') {
                          let codeHtml=`<pre class="language- round"><code class="language-`+token.lang+` line-numbers">`
                          codeHtml+=Prism.highlight(token.text, Prism.languages.javascript, 'javascript')
                          codeHtml+=`</code></pre>`
                          return codeHtml
                      }
                  }
              }]
          })
          // 定義 html 文件頭部代碼
          var htmlContent=`
          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <title>Document</title>
              <link rel="stylesheet" href="prism.css">
              <script src="prism.js"></script>
          </head>
          <style>
            .round {
              box-shadow: 10px 10px 5px #888888;
              border-radius: 10px;
            }
          </style>
          <body>
          `
          htmlContent +=marked.parse(mdContent) // 疊加上 marked 生成的 html 代碼
          htmlContent+=`</body> // 疊加底部代碼(補齊)
          </html>`
          fs.writeFileSync('test.html', htmlContent) // 將最終的 html 內(nèi)容寫入到文件 test.html

          測試運行:

          node m2h.js

          每運行一次,就會重新生成新的 test.html 文件。

          在 vsCode 里鼠標(biāo)右鍵點擊 test.html 文件,選擇“Open with Live Server”,

          圖7 Open with LiveServer

          會在瀏覽器里打開 test.html 頁面,test.md 已經(jīng)成功生成了 test.html,實現(xiàn)了代碼塊高亮、語言顯示及拷貝按鈕及行號。得到的最終結(jié)果如下圖:

          圖8 效果展示

          達(dá)到了當(dāng)初計劃實現(xiàn)的功能需求。

          5 總結(jié)

          以上通過簡單的幾十行代碼就實現(xiàn)了如此炫酷的功能展示,體現(xiàn)了插件的強大功能,同時通過自定義擴(kuò)展節(jié)點渲染函數(shù),也展現(xiàn)了插件的靈活性和可擴(kuò)展性。此次測試僅僅是個引子,后續(xù)會繼續(xù)進(jìn)行研究和測試,感興趣請收藏、關(guān)注,方便共同學(xué)習(xí)、進(jìn)步。


          主站蜘蛛池模板: 国精产品999一区二区三区有限 | 国产成人高清亚洲一区久久| 国产精品无码不卡一区二区三区 | 伊人色综合网一区二区三区| 中文乱码精品一区二区三区| 美日韩一区二区三区| 国产精品高清一区二区三区不卡| 国产成人无码一区二区在线播放| 精品日韩在线视频一区二区三区| 一区二区三区四区视频在线| 无码精品人妻一区二区三区影院| 三级韩国一区久久二区综合| 精品一区精品二区| 一区二区三区免费视频观看 | 天堂Av无码Av一区二区三区| 国产吧一区在线视频| 精品人妻系列无码一区二区三区| 国产日本亚洲一区二区三区| 曰韩人妻无码一区二区三区综合部 | 国产精品分类视频分类一区| 99久久无码一区人妻a黑| 亚洲国产激情在线一区| 精品一区二区三人妻视频 | 丝袜美腿一区二区三区| 在线精品日韩一区二区三区| 午夜无码一区二区三区在线观看| 老湿机一区午夜精品免费福利| 无码日韩人妻AV一区二区三区 | 亚洲国产成人久久一区二区三区 | 成人精品视频一区二区三区不卡 | 国内自拍视频一区二区三区 | 日韩高清国产一区在线| 亚洲大尺度无码无码专线一区| 国产萌白酱在线一区二区| 亚洲av高清在线观看一区二区 | 日本不卡一区二区视频a| 亚洲一区二区三区亚瑟 | 国产福利视频一区二区| 国产免费一区二区视频| 久久久国产精品无码一区二区三区 | 久久精品一区二区三区四区 |