<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          分享 1 個(gè) CSS 面試題,如何在CSS中實(shí)現(xiàn) if-else

          共 3114字,需瀏覽 7分鐘

           ·

          2022-06-17 17:11

          英文 | https://medium.com/frontend-canteen/an-advanced-css-interview-question-implement-if-else-in-css-bb681d786d76
          翻譯 | 楊小愛

          我的一個(gè)朋友在最近的一次面試中遇到了一個(gè)有趣的 CSS 面試問題。當(dāng)我第一次看到這個(gè)問題時(shí),我認(rèn)為這是一個(gè)常見的CSS問題。然而,經(jīng)過仔細(xì)研究,我發(fā)現(xiàn)了這個(gè)問題的有趣部分。
          面試題:請用CSS實(shí)現(xiàn)如下效果:


          頁面上有一些數(shù)字顯示文章閱讀的數(shù)量。如果數(shù)字小于 100,則數(shù)字的顏色為灰色。如果數(shù)字大于或等于 100,則數(shù)字為棕色,而且這種顏色可以動態(tài)調(diào)整,而不是提前預(yù)設(shè)。

          最后面試官要求用純CSS來解決這個(gè)問題,你知道如何達(dá)到這個(gè)效果嗎?
          題目分析
          這個(gè)問題的本質(zhì)是什么?
          這個(gè)問題的本質(zhì)很簡單,也就是說,這實(shí)際上是一個(gè) if-else 問題。
          如果我們用偽代碼描述這個(gè)問題,它應(yīng)該是這樣的:
          let color;if (reads < 100){  color = 'gray'} else {  color = 'brown'}

          所以現(xiàn)在問題變成了:我們?nèi)绾卧?CSS 中實(shí)現(xiàn)這個(gè) if-else 邏輯?請記住,CSS 中沒有 if-else 關(guān)鍵字之類的東西。

          在 CSS 中實(shí)現(xiàn) if-else

          在 CSS 中實(shí)現(xiàn) if-else 的邏輯是本題考查的核心技能。讓我們在下面完成這個(gè)邏輯。如果你學(xué)會了這個(gè)技巧,你可以用它來實(shí)現(xiàn)許多強(qiáng)大的 CSS 效果。

          首先,讓我們了解一個(gè)叫做clamp的函數(shù)。

          clamp() CSS 函數(shù)將一個(gè)值限制在上限和下限之間。clamp() 允許在定義的最小值和最大值之間的值范圍內(nèi)選擇中間值。

          基本語法格式:

          clamp(min, var, max)

          我們可以將clamp函數(shù)理解為這樣的偽代碼:

          funciton clamp(min, var, max){  if(var <= min){    return min  }
          if(var >= max){ return max }
          if(var > min && var < max){ return var }}

          所以:

          clamp(10, 13, 20) → 13

          clamp(10, 2, 20) → 10

          clamp(10, 30, 20) → 20

          用法示例:

          font-size 的值不會超過 20px,也不會低于 10px。

          這是clamp的基本用法。

          如果您對clamp仍有疑問,可以參考 MDN 文檔。

          接下來,我們在 CSS 中實(shí)現(xiàn)這個(gè)功能。

          result的值根據(jù) var 的值而變化:

          當(dāng) var 的值小于 100 時(shí),結(jié)果的值為 10;

          當(dāng) var 的值大于等于 100 時(shí),結(jié)果變?yōu)?20。

          如果我們用偽代碼描述這個(gè)問題,它應(yīng)該是這樣的:

          let result;if(var < 100){  result = 10} else {  result = 20}

          這個(gè)要求和clamp函數(shù)類似,但又不一樣。clamp可以將 var 的值限制在一個(gè)范圍內(nèi),但我們現(xiàn)在希望結(jié)果的值是 10 或 20。

          那我們怎么做?

          有一個(gè)特殊的技巧:我們可以放大 var 的變化,使其值要么達(dá)到區(qū)間的上限,要么達(dá)到區(qū)間的下限。

          于是:

          let result = clamp(10, (var-99) * 20, 20)

          這會產(chǎn)生一個(gè)效果:

          • 如果 var 的值為 99,則表達(dá)式變?yōu)椋篶lamp(10, 0, 20), takes 10.

          • 如果 var 的值為 100,則變?yōu)椋篶lamp(10, 20, 20), takes 20.

          用一張圖解釋:

          同樣,如果我們希望:

          當(dāng) var 的值小于 50 時(shí),result的值為 5。

          當(dāng) var 的值大于等于 50 時(shí),result的值為 15。

          我們只需要這樣寫:

          let result = clamp(5, (var-49) * 15, 15)

          你有沒有注意到:這實(shí)際上是 if-else 的效果,我們做到了。

          在 CSS 中切換顏色

          回到最初的面試問題。

          為了讓我們后面可以使用 CSS 進(jìn)行變量計(jì)算,我們需要將值放在一個(gè) CSS 變量中,所以 HTML 可以這樣寫:

          <num style="--num:1">1<span>reads</span></num><num style="--num:99">99<span>reads</span></num><num style="--num:102">102<span>reads</span></num>

          如果我們不需要考慮 HTML 語義或 SEO 因素,這里的“數(shù)字”和“讀取”都可以由偽元素生成:

          <head>  <style>    num::before {      counter-reset: num var(--num);      content: counter(num);    }
          num::after { content: 'reads'; }</style></head>
          <body> <div> <num style="--num:1"></num> <num style="--num:99"></num> <num style="--num:102"></num> </div></body>

          如果對 content 和 counter-reset 不熟悉,可以查看 MDN 文檔。

          • content :https://developer.mozilla.org/en-US/docs/Web/CSS/content

          • counter-reset:https://developer.mozilla.org/en-US/docs/Web/CSS/counter-reset

          具體的演示效果,可以通過以下地址查看:https://codepen.io/bytefishmedium/pen/VwQrGEb

          棕色為#aa540e,用HSL顏色表示為hsl(27, 50%, 36%),如下:

          它的飽和度控制顏色的鮮艷程度。飽和度越高,顏色越鮮艷,飽和度越低,顏色越暗。當(dāng)飽和度降低到0時(shí),就變成了完全的灰色,如下:

          在灰色和棕色之間切換顏色,即在 hsl(27, 0%, 36%) 和 hsl(27, 85%, 36%) 之間切換。

          于是就有如下代碼:

          num{  --s: clamp(0%,(var(--num) - 99) * 99%,85%);/* >100 */  color: hsl(27 var(--s) 36%);}

          最終的演示:https://codepen.io/bytefishmedium/pen/WNMXabm

          總結(jié)

          我們通過clamp函數(shù)在CSS中實(shí)現(xiàn)if-else效果,最后讓顏色根據(jù)變量的值進(jìn)行切換。

          其實(shí)原面試題還有另外一部分,簡單來說就是:讓顏色在多個(gè)值之間切換。僅使用 if-else 不足以滿足此要求,有興趣的話,可以留言交流學(xué)習(xí)。


          學(xué)習(xí)更多技能

          請點(diǎn)擊下方公眾號

          瀏覽 61
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人欧美视频 | 天津人妻第三次3p视频 | 精品视频一区二区三区女人 | 色婷婷国产精品高潮呻吟AV久久 | 国产精品a久久久久久 |