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

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

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

          github最火,近5千star的前端必備知識(shí)點(diǎn)匯總(二),前端開(kāi)發(fā)必備

          文資料來(lái)源于

          https://github.com/qiu-deqing/FE-interview

          目前已在github獲得4700個(gè)star,在前端知識(shí)項(xiàng)目中名列第一。

          上一篇主要分享了該項(xiàng)目中的HTML, HTTP,web綜合問(wèn)題部分。

          本文主要分享該項(xiàng)目中的CSS部分的知識(shí)點(diǎn)及面試題部分,后續(xù)分享剩余5個(gè)章節(jié)。

          目錄

          • CSS選擇器有哪些
          • css sprite是什么,有什么優(yōu)缺點(diǎn)
          • display: none;與visibility: hidden;的區(qū)別
          • css hack原理及常用hack
          • specified value,computed value,used value計(jì)算方法
          • link與@import的區(qū)別
          • display: block;和display: inline;的區(qū)別
          • PNG,GIF,JPG的區(qū)別及如何選
          • CSS有哪些繼承屬性
          • IE6瀏覽器有哪些常見(jiàn)的bug,缺陷或者與標(biāo)準(zhǔn)不一致的地方,如何解決
          • 容器包含若干浮動(dòng)元素時(shí)如何清理(包含)浮動(dòng)
          • 什么是FOUC?如何避免
          • 如何創(chuàng)建塊級(jí)格式化上下文(block formatting context),BFC有什么用
          • display,float,position的關(guān)系
          • 外邊距折疊(collapsing margins)
          • 如何確定一個(gè)元素的包含塊(containing block)
          • stacking context,布局規(guī)則
          • 如何水平居中一個(gè)元素
          • 如何豎直居中一個(gè)元素

          歡迎關(guān)注筆者,優(yōu)質(zhì)文章都在這里等你。


          CSS選擇器有哪些

          1. *通用選擇器:選擇所有元素,不參與計(jì)算優(yōu)先級(jí),兼容性IE6+
          2. #X id選擇器:選擇id值為X的元素,兼容性:IE6+
          3. .X 類(lèi)選擇器: 選擇class包含X的元素,兼容性:IE6+
          4. X Y后代選擇器: 選擇滿足X選擇器的后代節(jié)點(diǎn)中滿足Y選擇器的元素,兼容性:IE6+
          5. X 元素選擇器: 選擇標(biāo)所有簽為X的元素,兼容性:IE6+
          6. :link,:visited,:focus,:hover,:active鏈接狀態(tài): 選擇特定狀態(tài)的鏈接元素,順序LoVe HAte,兼容性: IE4+
          7. X + Y直接兄弟選擇器:在X之后第一個(gè)兄弟節(jié)點(diǎn)中選擇滿足Y選擇器的元素,兼容性: IE7+
          8. X > Y子選擇器: 選擇X的子元素中滿足Y選擇器的元素,兼容性: IE7+
          9. X ~ Y兄弟: 選擇X之后所有兄弟節(jié)點(diǎn)中滿足Y選擇器的元素,兼容性: IE7+
          10. [attr]:選擇所有設(shè)置了attr屬性的元素,兼容性IE7+
          11. [attr=value]:選擇屬性值剛好為value的元素
          12. [attr~=value]:選擇屬性值為空白符分隔,其中一個(gè)的值剛好是value的元素
          13. [attr|=value]:選擇屬性值剛好為value或者value-開(kāi)頭的元素
          14. [attr^=value]:選擇屬性值以value開(kāi)頭的元素
          15. [attr$=value]:選擇屬性值以value結(jié)尾的元素
          16. [attr=value]*:選擇屬性值中包含value的元素
          17. [:checked]:選擇單選框,復(fù)選框,下拉框中選中狀態(tài)下的元素,兼容性:IE9+
          18. X:after, X::after:after偽元素,選擇元素虛擬子元素(元素的最后一個(gè)子元素),CSS3中::表示偽元素。兼容性:after為IE8+,::after為IE9+
          19. :hover:鼠標(biāo)移入狀態(tài)的元素,兼容性a標(biāo)簽IE4+, 所有元素IE7+
          20. :not(selector):選擇不符合selector的元素。不參與計(jì)算優(yōu)先級(jí),兼容性:IE9+
          21. ::first-letter:偽元素,選擇塊元素第一行的第一個(gè)字母,兼容性IE5.5+
          22. ::first-line:偽元素,選擇塊元素的第一行,兼容性IE5.5+
          23. :nth-child(an + b):偽類(lèi),選擇前面有an + b - 1個(gè)兄弟節(jié)點(diǎn)的元素,其中n >= 0, 兼容性IE9+
          24. :nth-last-child(an + b):偽類(lèi),選擇后面有an + b - 1個(gè)兄弟節(jié)點(diǎn)的元素 其中n >= 0,兼容性IE9+
          25. X:nth-of-type(an+b):偽類(lèi),X為選擇器,解析得到元素標(biāo)簽,選擇前面有an + b - 1個(gè)相同標(biāo)簽兄弟節(jié)點(diǎn)的元素。兼容性IE9+
          26. X:nth-last-of-type(an+b):偽類(lèi),X為選擇器,解析得到元素標(biāo)簽,選擇后面有an+b-1個(gè)相同標(biāo)簽兄弟節(jié)點(diǎn)的元素。兼容性IE9+
          27. X:first-child:偽類(lèi),選擇滿足X選擇器的元素,且這個(gè)元素是其父節(jié)點(diǎn)的第一個(gè)子元素。兼容性IE7+
          28. X:last-child:偽類(lèi),選擇滿足X選擇器的元素,且這個(gè)元素是其父節(jié)點(diǎn)的最后一個(gè)子元素。兼容性IE9+
          29. X:only-child:偽類(lèi),選擇滿足X選擇器的元素,且這個(gè)元素是其父元素的唯一子元素。兼容性IE9+
          30. X:only-of-type:偽類(lèi),選擇X選擇的元素,解析得到元素標(biāo)簽,如果該元素沒(méi)有相同類(lèi)型的兄弟節(jié)點(diǎn)時(shí)選中它。兼容性IE9+
          31. X:first-of-type:偽類(lèi),選擇X選擇的元素,解析得到元素標(biāo)簽,如果該元素 是此此類(lèi)型元素的第一個(gè)兄弟。選中它。兼容性IE9+

          css sprite是什么,有什么優(yōu)缺點(diǎn)

          概念:將多個(gè)小圖片拼接到一個(gè)圖片中。通過(guò)background-position和元素尺寸調(diào)節(jié)需要顯示的背景圖案。

          優(yōu)點(diǎn):

          1. 減少HTTP請(qǐng)求數(shù),極大地提高頁(yè)面加載速度
          2. 增加圖片信息重復(fù)度,提高壓縮比,減少圖片大小
          3. 更換風(fēng)格方便,只需在一張或幾張圖片上修改顏色或樣式即可實(shí)現(xiàn)

          缺點(diǎn):

          1. 圖片合并麻煩
          2. 維護(hù)麻煩,修改一個(gè)圖片可能需要從新布局整個(gè)圖片,樣式

          display: none;與visibility: hidden;的區(qū)別

          聯(lián)系:它們都能讓元素不可見(jiàn)

          區(qū)別:

          1. display:none;會(huì)讓元素完全從渲染樹(shù)中消失,渲染的時(shí)候不占據(jù)任何空間;visibility: hidden;不會(huì)讓元素從渲染樹(shù)消失,渲染師元素繼續(xù)占據(jù)空間,只是內(nèi)容不可見(jiàn)
          2. display: none;是非繼承屬性,子孫節(jié)點(diǎn)消失由于元素從渲染樹(shù)消失造成,通過(guò)修改子孫節(jié)點(diǎn)屬性無(wú)法顯示;visibility: hidden;是繼承屬性,子孫節(jié)點(diǎn)消失由于繼承了hidden,通過(guò)設(shè)置visibility: visible;可以讓子孫節(jié)點(diǎn)顯式
          3. 修改常規(guī)流中元素的display通常會(huì)造成文檔重排。修改visibility屬性只會(huì)造成本元素的重繪。
          4. 讀屏器不會(huì)讀取display: none;元素內(nèi)容;會(huì)讀取visibility: hidden;元素內(nèi)容

          css hack原理及常用hack

          原理:利用不同瀏覽器對(duì)CSS的支持和解析結(jié)果不一樣編寫(xiě)針對(duì)特定瀏覽器樣式。常見(jiàn)的hack有1)屬性hack。2)選擇器hack。3)IE條件注釋

          • IE條件注釋:適用于[IE5, IE9]常見(jiàn)格式如下
          <!--[if IE 6]>
          Special instructions for IE 6 here
          <![endif]-->
          
          • 選擇器hack:不同瀏覽器對(duì)選擇器的支持不一樣
          /***** Selector Hacks ******/
          /* IE6 and below */
          * html #uno { color: red }
          /* IE7 */
          *:first-child+html #dos { color: red }
          /* IE7, FF, Saf, Opera */
          html>body #tres { color: red }
          /* IE8, FF, Saf, Opera (Everything but IE 6,7) */
          html>/**/body #cuatro { color: red }
          /* Opera 9.27 and below, safari 2 */
          html:first-child #cinco { color: red }
          /* Safari 2-3 */
          html[xmlns*=""] body:last-child #seis { color: red }
          /* safari 3+, chrome 1+, opera9+, ff 3.5+ */
          body:nth-of-type(1) #siete { color: red }
          /* safari 3+, chrome 1+, opera9+, ff 3.5+ */
          body:first-of-type #ocho { color: red }
          /* saf3+, chrome1+ */
          @media screen and (-webkit-min-device-pixel-ratio:0) {
           #diez { color: red }
          }
          /* iPhone / mobile webkit */
          @media screen and (max-device-width: 480px) {
           #veintiseis { color: red }
          }
          /* Safari 2 - 3.1 */
          html[xmlns*=""]:root #trece { color: red }
          /* Safari 2 - 3.1, Opera 9.25 */
          *|html[xmlns*=""] #catorce { color: red }
          /* Everything but IE6-8 */
          :root *> #quince { color: red }
          /* IE7 */
          *+html #dieciocho { color: red }
          /* Firefox only. 1+ */
          #veinticuatro, x:-moz-any-link { color: red }
          /* Firefox 3.0+ */
          #veinticinco, x:-moz-any-link, x:default { color: red }
          
          • 屬性hack:不同瀏覽器解析bug或方法
          /* IE6 */
          #once { _color: blue }
          /* IE6, IE7 */
          #doce { *color: blue; /* or #color: blue */ }
          /* Everything but IE6 */
          #diecisiete { color/**/: blue }
          /* IE6, IE7, IE8 */
          #diecinueve { color: blue\9; }
          /* IE7, IE8 */
          #veinte { color/*\**/: blue\9; }
          /* IE6, IE7 -- acts as an !important */
          #veintesiete { color: blue !ie; } /* string after ! can be anything */
          

          specified value,computed value,used value計(jì)算方法

          • specified value: 計(jì)算方法如下:
          1. 如果樣式表設(shè)置了一個(gè)值,使用這個(gè)值
          2. 如果沒(méi)有設(shè)置值,這個(gè)屬性是繼承屬性,從父元素繼承
          3. 如果沒(méi)設(shè)置,并且不是繼承屬性,使用css規(guī)范指定的初始值
          • computed value: 以specified value根據(jù)規(guī)范定義的行為進(jìn)行計(jì)算,通常將相對(duì)值計(jì)算為絕對(duì)值,例如em根據(jù)font-size進(jìn)行計(jì)算。一些使用百分?jǐn)?shù)并且需要布局來(lái)決定最終值的屬性,如width,margin。百分?jǐn)?shù)就直接作為computed value。line-height的無(wú)單位值也直接作為computed value。這些值將在計(jì)算used value時(shí)得到絕對(duì)值。computed value的主要作用是用于繼承
          • used value:屬性計(jì)算后的最終值,對(duì)于大多數(shù)屬性可以通過(guò)window.getComputedStyle獲得,尺寸值單位為像素。以下屬性依賴于布局,
          • background-position
          • bottom, left, right, top
          • height, width
          • margin-bottom, margin-left, margin-right, margin-top
          • min-height, min-width
          • padding-bottom, padding-left, padding-right, padding-top
          • text-indent

          link與@import的區(qū)別

          1. link是HTML方式, @import是CSS方式
          2. link最大限度支持并行下載,@import過(guò)多嵌套導(dǎo)致串行下載,出現(xiàn)FOUC
          3. link可以通過(guò)rel="alternate stylesheet"指定候選樣式
          4. 瀏覽器對(duì)link支持早于@import,可以使用@import對(duì)老瀏覽器隱藏樣式
          5. @import必須在樣式規(guī)則之前,可以在css文件中引用其他文件
          6. 總體來(lái)說(shuō):link優(yōu)于@import

          display: block;和display: inline;的區(qū)別

          block元素特點(diǎn):

          • 處于常規(guī)流中時(shí),如果width沒(méi)有設(shè)置,會(huì)自動(dòng)填充滿父容器
          • 可以應(yīng)用margin/padding
          • 在沒(méi)有設(shè)置高度的情況下會(huì)擴(kuò)展高度以包含常規(guī)流中的子元素
          • 處于常規(guī)流中時(shí)布局時(shí)在前后元素位置之間(獨(dú)占一個(gè)水平空間)
          • 忽略vertical-align

          inline元素特點(diǎn)

          • 水平方向上根據(jù)direction依次布局
          • 不會(huì)在元素前后進(jìn)行換行
          • 受white-space控制
          • margin/padding在豎直方向上無(wú)效,水平方向上有效
          • width/height屬性對(duì)非替換行內(nèi)元素?zé)o效,寬度由元素內(nèi)容決定
          • 非替換行內(nèi)元素的行框高由line-height確定,替換行內(nèi)元素的行框高由height,margin,padding,border決定
          • 浮動(dòng)或絕對(duì)定位時(shí)會(huì)轉(zhuǎn)換為block
          • vertical-align屬性生效

          PNG,GIF,JPG的區(qū)別及如何選

          參考資料: 選擇正確的圖片格式 GIF:

          1. 8位像素,256色
          2. 無(wú)損壓縮
          3. 支持簡(jiǎn)單動(dòng)畫(huà)
          4. 支持boolean透明
          5. 適合簡(jiǎn)單動(dòng)畫(huà)

          JPEG:

          1. 顏色限于256
          2. 有損壓縮
          3. 可控制壓縮質(zhì)量
          4. 不支持透明
          5. 適合照片

          PNG:

          1. 有PNG8和truecolor PNG
          2. PNG8類(lèi)似GIF顏色上限為256,文件小,支持alpha透明度,無(wú)動(dòng)畫(huà)
          3. 適合圖標(biāo)、背景、按鈕

          CSS有哪些繼承屬性

          • 關(guān)于文字排版的屬性如:
          • font
          • word-break
          • letter-spacing
          • text-align
          • text-rendering
          • word-spacing
          • white-space
          • text-indent
          • text-transform
          • text-shadow
          • line-height
          • color
          • visibility
          • cursor

          IE6瀏覽器有哪些常見(jiàn)的bug,缺陷或者與標(biāo)準(zhǔn)不一致的地方,如何解決

          • IE6不支持min-height,解決辦法使用css hack:
          .target {
           min-height: 100px;
           height: auto !important;
           height: 100px; // IE6下內(nèi)容高度超過(guò)會(huì)自動(dòng)擴(kuò)展高度
          }
          
          • ol內(nèi)li的序號(hào)全為1,不遞增。解決方法:為li設(shè)置樣式display: list-item;
          • 未定位父元素overflow: auto;,包含position: relative;子元素,子元素高于父元素時(shí)會(huì)溢出。解決辦法:1)子元素去掉position: relative;; 2)不能為子元素去掉定位時(shí),父元素position: relative;
          <style type="text/css">
          .outer {
           width: 215px;
           height: 100px;
           border: 1px solid red;
           overflow: auto;
           position: relative; /* 修復(fù)bug */
          }
          .inner {
           width: 100px;
           height: 200px;
           background-color: purple;
           position: relative;
          }
          </style>
          <div class="outer">
           <div class="inner"></div>
          </div>
          
          • IE6只支持a標(biāo)簽的:hover偽類(lèi),解決方法:使用js為元素監(jiān)聽(tīng)mouseenter,mouseleave事件,添加類(lèi)實(shí)現(xiàn)效果:
          <style type="text/css">
          .p:hover,
          .hover {
           background: purple;
          }
          </style>
          <p class="p" id="target">aaaa bbbbb<span>DDDDDDDDDDDd</span> aaaa lkjlkjdf j</p>
          <script type="text/javascript">
          function addClass(elem, cls) {
           if (elem.className) {
           elem.className += ' ' + cls;
           } else {
           elem.className = cls;
           }
          }
          function removeClass(elem, cls) {
           var className = ' ' + elem.className + ' ';
           var reg = new RegExp(' +' + cls + ' +', 'g');
           elem.className = className.replace(reg, ' ').replace(/^ +| +$/, '');
          }
          var target = document.getElementById('target');
          if (target.attachEvent) {
           target.attachEvent('onmouseenter', function () {
           addClass(target, 'hover');
           });
           target.attachEvent('onmouseleave', function () {
           removeClass(target, 'hover');
           })
          }
          </script>
          
          • IE5-8不支持opacity,解決辦法:
          .opacity {
           opacity: 0.4
           filter: alpha(opacity=60); /* for IE5-7 */
           -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/
          }
          
          • IE6在設(shè)置height小于font-size時(shí)高度值為font-size,解決辦法:font-size: 0;
          • IE6不支持PNG透明背景,解決辦法: IE6下使用gif圖片
          • IE6-7不支持display: inline-block解決辦法:設(shè)置inline并觸發(fā)hasLayout
           display: inline-block;
           *display: inline;
           *zoom: 1;
          
          • IE6下浮動(dòng)元素在浮動(dòng)方向上與父元素邊界接觸元素的外邊距會(huì)加倍。解決辦法: 1)使用padding控制間距。 2)浮動(dòng)元素display: inline;這樣解決問(wèn)題且無(wú)任何副作用:css標(biāo)準(zhǔn)規(guī)定浮動(dòng)元素display:inline會(huì)自動(dòng)調(diào)整為block
          • 通過(guò)為塊級(jí)元素設(shè)置寬度和左右margin為auto時(shí),IE6不能實(shí)現(xiàn)水平居中,解決方法:為父元素設(shè)置text-align: center;

          容器包含若干浮動(dòng)元素時(shí)如何清理(包含)浮動(dòng)

          1. 容器元素閉合標(biāo)簽前添加額外元素并設(shè)置clear: both
          2. 父元素觸發(fā)塊級(jí)格式化上下文(見(jiàn)塊級(jí)可視化上下文部分)
          3. 設(shè)置容器元素偽元素進(jìn)行清理推薦的清理浮動(dòng)方法
          /**
          * 在標(biāo)準(zhǔn)瀏覽器下使用
          * 1 content內(nèi)容為空格用于修復(fù)opera下文檔中出現(xiàn)
          * contenteditable屬性時(shí)在清理浮動(dòng)元素上下的空白
          * 2 使用display使用table而不是block:可以防止容器和
          * 子元素top-margin折疊,這樣能使清理效果與BFC,IE6/7
          * zoom: 1;一致
          **/
          .clearfix:before,
          .clearfix:after {
           content: " "; /* 1 */
           display: table; /* 2 */
          }
          .clearfix:after {
           clear: both;
          }
          /**
          * IE 6/7下使用
          * 通過(guò)觸發(fā)hasLayout實(shí)現(xiàn)包含浮動(dòng)
          **/
          .clearfix {
           *zoom: 1;
          }
          

          什么是FOUC?如何避免

          Flash Of Unstyled Content:用戶定義樣式表加載之前瀏覽器使用默認(rèn)樣式顯示文檔,用戶樣式加載渲染之后再?gòu)男嘛@示文檔,造成頁(yè)面閃爍。解決方法:把樣式表放到文檔的head

          如何創(chuàng)建塊級(jí)格式化上下文(block formatting context),BFC有什么用

          創(chuàng)建規(guī)則:

          1. 根元素
          2. 浮動(dòng)元素(float不是none)
          3. 絕對(duì)定位元素(position取值為absolute或fixed)
          4. display取值為inline-block,table-cell, table-caption,flex, inline-flex之一的元素
          5. overflow不是visible的元素

          作用:

          1. 可以包含浮動(dòng)元素
          2. 不被浮動(dòng)元素覆蓋
          3. 阻止父子元素的margin折疊

          display,float,position的關(guān)系

          1. 如果display為none,那么position和float都不起作用,這種情況下元素不產(chǎn)生框
          2. 否則,如果position值為absolute或者fixed,框就是絕對(duì)定位的,float的計(jì)算值為none,display根據(jù)下面的表格進(jìn)行調(diào)整。
          3. 否則,如果float不是none,框是浮動(dòng)的,display根據(jù)下表進(jìn)行調(diào)整
          4. 否則,如果元素是根元素,display根據(jù)下表進(jìn)行調(diào)整
          5. 其他情況下display的值為指定值 總結(jié)起來(lái):絕對(duì)定位、浮動(dòng)、根元素都需要調(diào)整display

          外邊距折疊(collapsing margins)

          毗鄰的兩個(gè)或多個(gè)margin會(huì)合并成一個(gè)margin,叫做外邊距折疊。規(guī)則如下:

          1. 兩個(gè)或多個(gè)毗鄰的普通流中的塊元素垂直方向上的margin會(huì)折疊
          2. 浮動(dòng)元素/inline-block元素/絕對(duì)定位元素的margin不會(huì)和垂直方向上的其他元素的margin折疊
          3. 創(chuàng)建了塊級(jí)格式化上下文的元素,不會(huì)和它的子元素發(fā)生margin折疊
          4. 元素自身的margin-bottom和margin-top相鄰時(shí)也會(huì)折疊

          如何確定一個(gè)元素的包含塊(containing block)

          1. 根元素的包含塊叫做初始包含塊,在連續(xù)媒體中他的尺寸與viewport相同并且anchored at the canvas origin;對(duì)于paged media,它的尺寸等于page area。初始包含塊的direction屬性與根元素相同。
          2. position為relative或者static的元素,它的包含塊由最近的塊級(jí)(display為block,list-item, table)祖先元素的內(nèi)容框組成
          3. 如果元素position為fixed。對(duì)于連續(xù)媒體,它的包含塊為viewport;對(duì)于paged media,包含塊為page area
          4. 如果元素position為absolute,它的包含塊由祖先元素中最近一個(gè)position為relative,absolute或者fixed的元素產(chǎn)生,規(guī)則如下:
          • 如果祖先元素為行內(nèi)元素,the containing block is the bounding box around the padding boxes of the first and the last inline boxes generated for that element.
          • 其他情況下包含塊由祖先節(jié)點(diǎn)的padding edge組成
          1. 如果找不到定位的祖先元素,包含塊為初始包含塊

          stacking context,布局規(guī)則

          z軸上的默認(rèn)層疊順序如下(從下到上):

          1. 根元素的邊界和背景
          2. 常規(guī)流中的元素按照html中順序
          3. 浮動(dòng)塊
          4. positioned元素按照html中出現(xiàn)順序

          如何創(chuàng)建stacking context:

          1. 根元素
          2. z-index不為auto的定位元素
          3. a flex item with a z-index value other than 'auto'
          4. opacity小于1的元素
          5. 在移動(dòng)端webkit和chrome22+,z-index為auto,position: fixed也將創(chuàng)建新的stacking context

          如何水平居中一個(gè)元素

          • 如果需要居中的元素為常規(guī)流中inline元素,為父元素設(shè)置text-align: center;即可實(shí)現(xiàn)
          • 如果需要居中的元素為常規(guī)流中block元素,1)為元素設(shè)置寬度,2)設(shè)置左右margin為auto。3)IE6下需在父元素上設(shè)置text-align: center;,再給子元素恢復(fù)需要的值
          <body>
           <div class="content">
           aaaaaa aaaaaa a a a a a a a a
           </div>
          </body>
          <style>
           body {
           background: #DDD;
           text-align: center; /* 3 */
           }
           .content {
           width: 500px; /* 1 */
           text-align: left; /* 3 */
           margin: 0 auto; /* 2 */
           background: purple;
           }
          </style>
          
          • 如果需要居中的元素為浮動(dòng)元素,1)為元素設(shè)置寬度,2)position: relative;,3)浮動(dòng)方向偏移量(left或者right)設(shè)置為50%,4)浮動(dòng)方向上的margin設(shè)置為元素寬度一半乘以-1
          <body>
           <div class="content">
           aaaaaa aaaaaa a a a a a a a a
           </div>
          </body>
          <style>
           body {
           background: #DDD;
           }
           .content {
           width: 500px; /* 1 */
           float: left;
           position: relative; /* 2 */
           left: 50%; /* 3 */
           margin-left: -250px; /* 4 */
           background-color: purple;
           }
          </style>
          
          • 如果需要居中的元素為絕對(duì)定位元素,1)為元素設(shè)置寬度,2)偏移量設(shè)置為50%,3)偏移方向外邊距設(shè)置為元素寬度一半乘以-1
          <body>
           <div class="content">
           aaaaaa aaaaaa a a a a a a a a
           </div>
          </body>
          <style>
           body {
           background: #DDD;
           position: relative;
           }
           .content {
           width: 800px;
           position: absolute;
           left: 50%;
           margin-left: -400px;
           background-color: purple;
           }
          </style>
          
          • 如果需要居中的元素為絕對(duì)定位元素,1)為元素設(shè)置寬度,2)設(shè)置左右偏移量都為0,3)設(shè)置左右外邊距都為auto
          <body>
           <div class="content">
           aaaaaa aaaaaa a a a a a a a a
           </div>
          </body>
          <style>
           body {
           background: #DDD;
           position: relative;
           }
           .content {
           width: 800px;
           position: absolute;
           margin: 0 auto;
           left: 0;
           right: 0;
           background-color: purple;
           }
          </style>
          

          如何豎直居中一個(gè)元素

          參考資料:6 Methods For Vertical Centering With CSS。 盤(pán)點(diǎn)8種CSS實(shí)現(xiàn)垂直居中

          • 需要居中元素為單行文本,為包含文本的元素設(shè)置大于font-size的line-height:
          <p class="text">center text</p>
          <style>
          .text {
           line-height: 200px;
          }
          </style>
          

          您的轉(zhuǎn)發(fā)+關(guān)注就是對(duì)筆者最大的支持,歡迎關(guān)注。

          對(duì)大廠架構(gòu)設(shè)計(jì),BAT等廠家面試題解讀,編程語(yǔ)言理論或者互聯(lián)網(wǎng)圈逸聞趣事這些感興趣,歡迎關(guān)注筆者,沒(méi)有錯(cuò),干貨文章都在這里。

          接調(diào)用(異步調(diào)異步)

          function fn1() {
          	setTimeout(() => {
          		console.log('fn1執(zhí)行')
          		fn2('fn1傳遞過(guò)去的參數(shù)')
          	}, 1000)
          }
          
          function fn2(data) {
          	setTimeout(() => {
          		console.log('fn2執(zhí)行', data)
          		fn3('fn2傳遞過(guò)去的參數(shù)')
          	}, 1000)
          }
          
          function fn3(data) {
          	setTimeout(() => {
          		console.log('fn3執(zhí)行', data)
          	}, 1000)
          }
          fn1()

          執(zhí)行結(jié)果如下:


          我們發(fā)現(xiàn)這種方式雖然能實(shí)現(xiàn),但是代碼量一旦變多,可讀性就降低了。

          Promise的方式

          function fn1() {
          	return new Promise((resolve, reject) => {
          		console.log('fn1執(zhí)行')
          		setTimeout(() => {
          			console.log('fn1結(jié)束')
          			resolve('fn1傳遞過(guò)去的參數(shù)')
          		}, 1000)
          	})
          }
          
          function fn2(data) {
          	return new Promise((resolve, reject) => {
          		console.log('fn2執(zhí)行,接收的參數(shù)', data)
          		setTimeout(() => {
          			resolve('fn2傳遞過(guò)去的參數(shù)')
          		}, 1000)
          	})
          }
          
          function fn3(data) {
          	return new Promise((resolve, reject) => {
          		console.log('fn3執(zhí)行,接收的參數(shù)', data)
          		setTimeout(() => {
          			resolve('fn3傳遞過(guò)去的參數(shù)')
          		}, 1000)
          	})
          }
          
          fn1().then(fn2).then(fn3).then(res => {
          	console.log('最后一個(gè)', res)
          })

          生成器的方式

          生成器就是能返回一個(gè)迭代器的函數(shù),它也是一個(gè)函數(shù),對(duì)比普通的函數(shù),多了一個(gè)*,在它的函數(shù)體內(nèi)可以使用yield關(guān)鍵字,函數(shù)會(huì)在每個(gè)yield后暫停,等待,直到這個(gè)生成的對(duì)象,調(diào)用下一個(gè)next(),每調(diào)用一次next會(huì)往下執(zhí)行一次yieId,然后暫停。

          、下面關(guān)于WEB開(kāi)發(fā)中,常見(jiàn)的技術(shù)和問(wèn)題描述正確的是:(多選)

          A、CSS selector中,支持按照元素的id選擇,元素的名稱進(jìn)行選擇,元素的class屬性進(jìn)行選擇,比如 “#div .red”就是選擇CSS class屬性中包括red的所有的div元素
          B、JSON是一種以JavaScript語(yǔ)法表示的數(shù)據(jù)對(duì)象格式,比如描述一個(gè)學(xué)生,包括,其中,姓名,年齡就可以這樣表達(dá) {name: "John", age: 18}
          C、HTML頁(yè)面中的第一個(gè)指令: 表明這是一個(gè)符合HTML5標(biāo)準(zhǔn)的頁(yè)面
          D、不同的瀏覽器對(duì)HTML渲染的方式稍有差異,但是所有的主流瀏覽器都支持JavaScript語(yǔ)言,而且提供的JavaScript的編程環(huán)境都是一致的
          E、HTML頁(yè)面裝載時(shí),首先把整個(gè)HTML頁(yè)面下載下來(lái),再根據(jù)HTML中出現(xiàn)的順序依次下載它引用的外部的JavaScript代碼和圖片資源,最后才執(zhí)行頁(yè)面中的JavaScript代碼
          F、JavaScript中的函數(shù)就是一個(gè)對(duì)象,每個(gè)函數(shù)對(duì)象都繼承了JavaScript的Function類(lèi)

          正確答案: C

          解析:

          A.“#div .red”就是選擇CSS class屬性中包括red的所有Id為div元素

          B.{"name": "John", "age": 18},json數(shù)據(jù)中的鍵都需要添加""(雙引號(hào))

          D.不同瀏覽器提供的編程環(huán)境不一致(包括html、css、js編程的不一致),所以在編程時(shí)才要使用 -ms、-webkit、-moz來(lái)實(shí)現(xiàn)不同瀏覽器的兼容性(解決css編程不一致)

          E.JS文件按在HTML中引入的順序依次載入(不是最后載入),在載入后馬上執(zhí)行,執(zhí)行時(shí)會(huì)阻塞頁(yè)面后續(xù)的內(nèi)容(包括頁(yè)面的渲染、其它資源的下載)

          F.箭頭函數(shù)沒(méi)有super關(guān)鍵字,所以箭頭函數(shù)沒(méi)有繼承任何對(duì)象,也就不可能繼承Function類(lèi)。


          2、以下描述正確的是:(多選)

          A、`inline-block` 可以設(shè)置高度,`inline` 不可以設(shè)置高度
          B、`inline-block` 和 `inline` 都可以設(shè)置 `padding-left`
          C、`inline-block` 可以設(shè)置 `margin-left`,inline 不可以
          D、`block` 會(huì)獨(dú)占一行,`inline-block` 不會(huì)

          正確答案: A、B、D

          解析:

          行內(nèi)元素不可以設(shè)置元素寬高,但是可以設(shè)置 左右padding、左右margin

          img、input屬于行內(nèi)替換元素。height/width/padding/margin均可用。效果等于塊元素


          3、對(duì)于以下 HTML,下列選項(xiàng)中哪一個(gè) CSS 選擇器效果與其他的不同:

          ```html
          <p><span>A</span><span>B</span><span>C</span></p>
          ```

          A、`span:first-child`
          B、`span:nth-child(0)`
          C、`span:nth-child(-n+1)`
          D、`span:nth-last-child(3)`

          正確答案: B

          解析:

          :nth-child(-n+4)選取小于等于4標(biāo)簽, nth-child最小從1開(kāi)始


          4、input 元素中,下列哪個(gè)類(lèi)型屬性定義了輸入電話號(hào)碼的控件?

          A、mob
          B、tel
          C、mobile
          D、telephone

          正確答案: B


          5、以下選項(xiàng)中,哪些是html5 input的新屬性(多選)

          A、file
          B、search
          C、number
          D、reset
          E、tel

          正確答案: B、C、E

          解析:

          在HTML5中,為input元素新增了以下一些type屬性值:

          • color:用于指定顏色的控件。
          • date:用于輸入日期的控件(年,月,日,不包括時(shí)間)。
          • month:用于輸入年月的控件,不帶時(shí)區(qū)。
          • week:用于輸入一個(gè)由星期-年組成的日期,日期不包括時(shí)區(qū)
          • time:用于輸入不含時(shí)區(qū)的時(shí)間控件。
          • datetime:基于UTC時(shí)區(qū)的日期時(shí)間輸入控件(時(shí),分,秒及幾分之一秒)。
          • datetime-local:用于輸入日期時(shí)間控件,不包含時(shí)區(qū)。
          • email:用于應(yīng)該包含 e-mail 地址的輸入域。在提交表單時(shí),會(huì)自動(dòng)驗(yàn)證 email 域的值。
          • number: 用于應(yīng)該包含數(shù)值的輸入域。只能輸入數(shù)字
          • range:用于應(yīng)該包含一定范圍內(nèi)數(shù)字值的輸入域。range 類(lèi)型顯示為滑動(dòng)條。
          • search:用于輸入搜索字符串的單行文本字段。換行會(huì)被從輸入的值中自動(dòng)移除。
          • tel:用于輸入電話號(hào)碼的控件。在移動(dòng)端輸入會(huì)顯示數(shù)字鍵盤(pán),PC端無(wú)效果
          • url:用于編輯URL的字段。

          主站蜘蛛池模板: 美女视频一区二区| 一区二区在线视频| 国产精品亚洲产品一区二区三区 | 久久一区二区精品| 亚洲AV成人一区二区三区观看| 国产一区二区三区福利| 精品无码日韩一区二区三区不卡| 国产伦精品一区二区三区免费下载 | 国产福利日本一区二区三区| 国产成人精品一区二区三区无码| 成人区人妻精品一区二区三区 | 无码乱码av天堂一区二区| 国产成人久久精品一区二区三区 | 日韩精品一区二区亚洲AV观看| 精品久久综合一区二区| 中文字幕一区二区三区精彩视频| 99久久精品国产免看国产一区 | 国产A∨国片精品一区二区| 日本精品一区二区三区视频 | 好吊视频一区二区三区| 国产在线一区观看| 色欲AV无码一区二区三区| 影院成人区精品一区二区婷婷丽春院影视 | 亚洲国产欧美国产综合一区 | 中文字幕人妻AV一区二区| 久久无码人妻一区二区三区| 亚洲AV美女一区二区三区| 久久se精品一区二区| 亚洲av无码一区二区三区网站 | jizz免费一区二区三区| 一本色道久久综合一区| 久久无码人妻精品一区二区三区| 精品3d动漫视频一区在线观看| 国产伦精品一区二区三区无广告| 国产日韩精品一区二区三区 | 亚洲一区二区三区高清不卡| 亚洲.国产.欧美一区二区三区 | 亚洲电影唐人社一区二区| 色窝窝无码一区二区三区| 97se色综合一区二区二区| 中文字幕无线码一区2020青青|