<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>

          前端面試官問『你會造火箭嗎』,我答『會的』,結果…

          共 6307字,需瀏覽 13分鐘

           ·

          2021-07-29 11:55

          面試造火箭


          離職了找新工作,前端面試好不容易過了幾輪,終于輪到終面了,內(nèi)心緊張。面試官略微有距離感坐在對面,嚴肅的看著我。


          面試官:據(jù)說你前面的幾輪反饋都不錯哦。


          :沒有沒有。要感謝前面的面試官的客氣。


          面試官:那開始了哦。你知道 Promise 怎么實現(xiàn)的嗎?


          (內(nèi)心想,你太小瞧我了):balabala,侃侃而談,此處略去500字。


          面試官:童鞋,那你知道 Webpack 的原理嗎?


          (內(nèi)心:還好有所準備,不然就掛了):balabala,此處省去吹牛逼800字。


          面試官:那你知道從輸入 url 地址到頁面渲染出來,瀏覽器發(fā)生了什么嗎?


          (內(nèi)心:媽嘞,還好昨天晚上突擊背誦了):balabala,此處略去經(jīng)典答案1000字。


          中間再經(jīng)過六七個來回的問答,『模塊化知道不』、『了解過事件循環(huán)機制嗎』『曉得 Babel 否』,不一一列舉,還好自己不打無準備之仗。


          但不知道為什么面試官隨著我的對答如流,臉色已經(jīng)由云淡風輕而變得越來越凝重。


          最終面試官沉思了幾十秒,拋出了一個意外的問題,『小伙子,你前面的問題都回答的還可以,但你會造火箭嗎?』


          我目瞪口呆,弱弱的問了句,『用 css 畫的算嗎』。


          面試官看著我略微慌張的表情,嘴角揚起了不容易被人發(fā)現(xiàn)的笑。


          我搜索找出了這樣一張圖。



          『可以是這樣的火箭嗎』,面試官不置可否,那我就只好用筆記本繼續(xù)下去。


          我是如何造火箭的


          1. 搭建 ?? 初始結構


          HTML 主體結構分為左中右三欄,??整體在屏幕居中

          <div class="wrapper">    <div class="rocket">        <div class="body side left"></div>        <div class="body main"></div>        <div class="body side right"></div>      </div></div>


          CSS 樣式如下:

          /* 全局樣式 */:root {  --rocket-size: 10vw;  --sky-color: #1C1740;  --rocket-color: #F9E2FE;}
          /* 背景樣式 */body { display: flex; overflow: hidden; background-color: var(--sky-color);}
          /* 容器居中 */.wrapper { position: absolute; top: 50%; left: 50%; will-change: transform; transition: transform 0.4s ease; transform: translate(-50%, -50%);}
          /* 火箭三列水平布局 */.rocket { display: flex;}
          /* 火箭三列通用樣式 */.rocket .body { position: relative; background-color: var(--rocket-color);}
          /* 火箭中列寬高 */.rocket .main { width: var(--rocket-size); height: calc(var(--rocket-size) * 1.5);}
          /* 火箭邊列寬高 */.rocket .side { width: calc(var(--rocket-size) / 3); height: var(--rocket-size);}
          /* 火箭左列位置 */.rocket .left { margin-right: 10px;}
          /* 火箭右列位置 */.rocket .right { margin-left: 10px;}

          預覽效果大致如下:



          2. 潤色 ??主體


          開始潤色主體,新增以下樣式:

          :root {  ...  --rocket-cap-color: crimson;}
          .rocket .body { ... border-radius: 0 0 50% 50% / 76% 76% 15% 15%; /* 為左中右三列的尾部都添加好圓角 */}
          /* 為左中右三列的突出部都添加好圓角 */.rocket .body:before { content: ''; position: absolute; border-radius: 50% 50% 50% 50% / 76% 76% 25% 25%;}
          /* 火箭主體突出部的大小、位置 */.rocket .main:before { bottom: 80%; width: 100%; height: 75%; background-color: inherit;}
          /* 火箭左右列突出部的大小、位置及顏色 */.rocket .side:before { bottom: 90%; width: 100%; height: 35%; background-color: var(--rocket-cap-color);}


          預覽效果大致如下:



          3. 添加 ?? Logo


          /*   新增定義火箭 logo 顏色 */:root {  ...  --rocket-logo-color: #4C3198;}
          /* logo 的具體位置及樣式 */.rocket .main:after { content: ''; position: absolute; bottom: 75%; left: 0; right: 0; margin: auto; border: calc(var(--rocket-size) / 15) solid var(--rocket-logo-color); width: calc(var(--rocket-size) / 1.8); height: calc(var(--rocket-size) / 1.8); box-shadow: inset rgba(0, 0, 0, 0.075) -2vw -2vw 0 0, inset rgba(0, 0, 0, 0.1) -1vw -1.5vw 0 0; border-radius: 100%;}

          預覽效果如下:



          4. 添加 ?? 翅膀


          dom .body.main 下面新增兩個 domleftWing rightWing 分別對應左右翅膀。

          <div class="wrapper">    <div class="rocket">        <div class="body side left"></div>        <div class="body main">          <div class="wing leftWing"></div>          <div class="wing rightWing"></div>        </div>        <div class="body side right"></div>      </div></div>


          /*  添加火箭翅膀顏色  */:root { ...  --rocket-wing-color: #4C3198;}
          /* 火箭左右兩欄回到正確位置 */.rocket .left {/* margin-right: 10px; */ left: 1px;}
          .rocket .right {/* margin-left: 10px; */ right: 1px;}
          /* 火箭翅膀的樣式 */.rocket .wing { position: absolute; bottom: 2vmin; background-color: var(--rocket-wing-color); width: calc(var(--rocket-size) / 2); height: calc(var(--rocket-size) / 1.5); z-index: 1; box-shadow: inset rgba(0, 0, 0, 0.1) -0.5vmin 1vmin 1vmin 0, inset rgba(255, 255, 255, 0.1) 0.5vmin 1vmin 1vmin 0;}
          /* 火箭左翅膀位置 */.rocket .wing.leftWing { right: 100%; border-radius: 100% 0 10% 10%;}
          /* 火箭右翅膀位置 */.rocket .wing.rightWing { left: 100%; border-radius: 0 100% 10% 10%;}


          效果如下:



          5. 添加 ?? 助推器


          .rightWing 后面添加 <div class="booster"></div> 助推器

          <div class="wrapper">    <div class="rocket">        <div class="body side left"></div>        <div class="body main">          <div class="wing leftWing"></div>          <div class="wing rightWing"></div>          <div class="booster"></div>        </div>        <div class="body side right"></div>      </div></div>


          :root {  /* 助推器顏色 */  --rocket-booster-color: #C38382;}
          /* 助推器樣式及位置 */.rocket .booster { position: absolute; top: 80%; left: 0; right: 0; margin: auto; width: calc(var(--rocket-size) / 1.2); height: calc(var(--rocket-size) / 2.5); background-color: var(--rocket-booster-color); border-radius: 0 0 50% 50% / 76% 76% 35% 35%; z-index: -1; box-shadow: inset rgba(0, 0, 0, 0.3) -0.5vmin 1vmin 1vmin 0, inset rgba(255, 255, 255, 0.3) 0.5vmin 1vmin 1vmin 0, black 0 0 2vmin;}


          預覽效果如下:



          6. 添加 ?? 尾巴 ??


          .booster 后面添加 <div class="fire"></div> 火焰

          <div class="wrapper">  <div class="rocket">    <div class="body side left"></div>    <div class="body main">      <div class="wing leftWing"></div>      <div class="wing rightWing"></div>      <div class="booster"></div>      <div class="fire"></div>    </div>    <div class="body side right"></div>  </div></div>


          添加火焰相關的 CSS

          /* 火焰樣式及動畫 */.rocket .fire {  position: absolute;  top: 100%;  left: 0;  right: 0;  margin: auto;  width: calc(var(--rocket-size) / 1.4);  height: 80%;  border-radius: 0 0 100% 100%;  background-image: linear-gradient(to bottom, yellow, transparent 70%);  z-index: -2;  transform-origin: 50% 0;  animation: fire 0.1s linear alternate infinite;}
          @keyframes fire { to { transform: scaleX(0.98) translateY(-1vmin); }}


          大功告成,最終的效果如下:



          整體效果可以通過 code pen demo: css only rocket (https://codepen.io/SunLn/pen/xxqaLRa) 預覽。


          面試結果


          輪到我神氣的看著面試官了,心想,『都這樣了,等下Offer談薪資的時候就輪到我霸道了』。


          面試官這個時候也露出了迷之微笑,『小伙子造火箭有一手,但我司這廟小,只招擰螺絲的,你還是另謀高就吧


          我震驚了,時光仿佛停滯一般,沉默之后更是可怕的沉默。


          再之后的事情唯一想說的是,健身房練就的一身力氣真好使。


          ps: 本文純屬虛構,希望面試官求職者和諧相處,共創(chuàng)美好社會。


          如果有開心一下,希望點個贊。感恩。


          作者:對馬彈琴


          推薦閱讀:

          前端自動化測試:TDD 和 BDD 哪個好?

          低代碼真的是“行業(yè)毒瘤”嗎?

          京東技術三面:React 加入 Hooks 的意義是什么?

          微前端框架 single-spa:創(chuàng)建微前端容器應用。


          恭喜你又在前端道路上進步了一點點。

          點個“在看”和“”吧!

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧美特黄A片 | 天天操三级 | 免费A片国产毛无码A片牛牛 | 国产青青 | 欧美女人操逼视频 |