整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          github最火,近5千star的前端必備知識點匯總

          github最火,近5千star的前端必備知識點匯總(二),前端開發必備

          文資料來源于

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

          目前已在github獲得4700個star,在前端知識項目中名列第一。

          上一篇主要分享了該項目中的HTML, HTTP,web綜合問題部分。

          本文主要分享該項目中的CSS部分的知識點及面試題部分,后續分享剩余5個章節。

          目錄

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

          歡迎關注筆者,優質文章都在這里等你。


          CSS選擇器有哪些

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

          css sprite是什么,有什么優缺點

          概念:將多個小圖片拼接到一個圖片中。通過background-position和元素尺寸調節需要顯示的背景圖案。

          優點:

          1. 減少HTTP請求數,極大地提高頁面加載速度
          2. 增加圖片信息重復度,提高壓縮比,減少圖片大小
          3. 更換風格方便,只需在一張或幾張圖片上修改顏色或樣式即可實現

          缺點:

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

          display: none;與visibility: hidden;的區別

          聯系:它們都能讓元素不可見

          區別:

          1. display:none;會讓元素完全從渲染樹中消失,渲染的時候不占據任何空間;visibility: hidden;不會讓元素從渲染樹消失,渲染師元素繼續占據空間,只是內容不可見
          2. display: none;是非繼承屬性,子孫節點消失由于元素從渲染樹消失造成,通過修改子孫節點屬性無法顯示;visibility: hidden;是繼承屬性,子孫節點消失由于繼承了hidden,通過設置visibility: visible;可以讓子孫節點顯式
          3. 修改常規流中元素的display通常會造成文檔重排。修改visibility屬性只會造成本元素的重繪。
          4. 讀屏器不會讀取display: none;元素內容;會讀取visibility: hidden;元素內容

          css hack原理及常用hack

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

          • IE條件注釋:適用于[IE5, IE9]常見格式如下
          <!--[if IE 6]>
          Special instructions for IE 6 here
          <![endif]-->
          
          • 選擇器hack:不同瀏覽器對選擇器的支持不一樣
          /***** 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計算方法

          • specified value: 計算方法如下:
          1. 如果樣式表設置了一個值,使用這個值
          2. 如果沒有設置值,這個屬性是繼承屬性,從父元素繼承
          3. 如果沒設置,并且不是繼承屬性,使用css規范指定的初始值
          • computed value: 以specified value根據規范定義的行為進行計算,通常將相對值計算為絕對值,例如em根據font-size進行計算。一些使用百分數并且需要布局來決定最終值的屬性,如width,margin。百分數就直接作為computed value。line-height的無單位值也直接作為computed value。這些值將在計算used value時得到絕對值。computed value的主要作用是用于繼承
          • used value:屬性計算后的最終值,對于大多數屬性可以通過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的區別

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

          display: block;和display: inline;的區別

          block元素特點:

          • 處于常規流中時,如果width沒有設置,會自動填充滿父容器
          • 可以應用margin/padding
          • 在沒有設置高度的情況下會擴展高度以包含常規流中的子元素
          • 處于常規流中時布局時在前后元素位置之間(獨占一個水平空間)
          • 忽略vertical-align

          inline元素特點

          • 水平方向上根據direction依次布局
          • 不會在元素前后進行換行
          • 受white-space控制
          • margin/padding在豎直方向上無效,水平方向上有效
          • width/height屬性對非替換行內元素無效,寬度由元素內容決定
          • 非替換行內元素的行框高由line-height確定,替換行內元素的行框高由height,margin,padding,border決定
          • 浮動或絕對定位時會轉換為block
          • vertical-align屬性生效

          PNG,GIF,JPG的區別及如何選

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

          1. 8位像素,256色
          2. 無損壓縮
          3. 支持簡單動畫
          4. 支持boolean透明
          5. 適合簡單動畫

          JPEG:

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

          PNG:

          1. 有PNG8和truecolor PNG
          2. PNG8類似GIF顏色上限為256,文件小,支持alpha透明度,無動畫
          3. 適合圖標、背景、按鈕

          CSS有哪些繼承屬性

          • 關于文字排版的屬性如:
          • 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瀏覽器有哪些常見的bug,缺陷或者與標準不一致的地方,如何解決

          • IE6不支持min-height,解決辦法使用css hack:
          .target {
           min-height: 100px;
           height: auto !important;
           height: 100px; // IE6下內容高度超過會自動擴展高度
          }
          
          • ol內li的序號全為1,不遞增。解決方法:為li設置樣式display: list-item;
          • 未定位父元素overflow: auto;,包含position: relative;子元素,子元素高于父元素時會溢出。解決辦法:1)子元素去掉position: relative;; 2)不能為子元素去掉定位時,父元素position: relative;
          <style type="text/css">
          .outer {
           width: 215px;
           height: 100px;
           border: 1px solid red;
           overflow: auto;
           position: relative; /* 修復bug */
          }
          .inner {
           width: 100px;
           height: 200px;
           background-color: purple;
           position: relative;
          }
          </style>
          <div class="outer">
           <div class="inner"></div>
          </div>
          
          • IE6只支持a標簽的:hover偽類,解決方法:使用js為元素監聽mouseenter,mouseleave事件,添加類實現效果:
          <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在設置height小于font-size時高度值為font-size,解決辦法:font-size: 0;
          • IE6不支持PNG透明背景,解決辦法: IE6下使用gif圖片
          • IE6-7不支持display: inline-block解決辦法:設置inline并觸發hasLayout
           display: inline-block;
           *display: inline;
           *zoom: 1;
          
          • IE6下浮動元素在浮動方向上與父元素邊界接觸元素的外邊距會加倍。解決辦法: 1)使用padding控制間距。 2)浮動元素display: inline;這樣解決問題且無任何副作用:css標準規定浮動元素display:inline會自動調整為block
          • 通過為塊級元素設置寬度和左右margin為auto時,IE6不能實現水平居中,解決方法:為父元素設置text-align: center;

          容器包含若干浮動元素時如何清理(包含)浮動

          1. 容器元素閉合標簽前添加額外元素并設置clear: both
          2. 父元素觸發塊級格式化上下文(見塊級可視化上下文部分)
          3. 設置容器元素偽元素進行清理推薦的清理浮動方法
          /**
          * 在標準瀏覽器下使用
          * 1 content內容為空格用于修復opera下文檔中出現
          * contenteditable屬性時在清理浮動元素上下的空白
          * 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下使用
          * 通過觸發hasLayout實現包含浮動
          **/
          .clearfix {
           *zoom: 1;
          }
          

          什么是FOUC?如何避免

          Flash Of Unstyled Content:用戶定義樣式表加載之前瀏覽器使用默認樣式顯示文檔,用戶樣式加載渲染之后再從新顯示文檔,造成頁面閃爍。解決方法:把樣式表放到文檔的head

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

          創建規則:

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

          作用:

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

          display,float,position的關系

          1. 如果display為none,那么position和float都不起作用,這種情況下元素不產生框
          2. 否則,如果position值為absolute或者fixed,框就是絕對定位的,float的計算值為none,display根據下面的表格進行調整。
          3. 否則,如果float不是none,框是浮動的,display根據下表進行調整
          4. 否則,如果元素是根元素,display根據下表進行調整
          5. 其他情況下display的值為指定值 總結起來:絕對定位、浮動、根元素都需要調整display

          外邊距折疊(collapsing margins)

          毗鄰的兩個或多個margin會合并成一個margin,叫做外邊距折疊。規則如下:

          1. 兩個或多個毗鄰的普通流中的塊元素垂直方向上的margin會折疊
          2. 浮動元素/inline-block元素/絕對定位元素的margin不會和垂直方向上的其他元素的margin折疊
          3. 創建了塊級格式化上下文的元素,不會和它的子元素發生margin折疊
          4. 元素自身的margin-bottom和margin-top相鄰時也會折疊

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

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

          stacking context,布局規則

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

          1. 根元素的邊界和背景
          2. 常規流中的元素按照html中順序
          3. 浮動塊
          4. positioned元素按照html中出現順序

          如何創建stacking context:

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

          如何水平居中一個元素

          • 如果需要居中的元素為常規流中inline元素,為父元素設置text-align: center;即可實現
          • 如果需要居中的元素為常規流中block元素,1)為元素設置寬度,2)設置左右margin為auto。3)IE6下需在父元素上設置text-align: center;,再給子元素恢復需要的值
          <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>
          
          • 如果需要居中的元素為浮動元素,1)為元素設置寬度,2)position: relative;,3)浮動方向偏移量(left或者right)設置為50%,4)浮動方向上的margin設置為元素寬度一半乘以-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>
          
          • 如果需要居中的元素為絕對定位元素,1)為元素設置寬度,2)偏移量設置為50%,3)偏移方向外邊距設置為元素寬度一半乘以-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>
          
          • 如果需要居中的元素為絕對定位元素,1)為元素設置寬度,2)設置左右偏移量都為0,3)設置左右外邊距都為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>
          

          如何豎直居中一個元素

          參考資料:6 Methods For Vertical Centering With CSS。 盤點8種CSS實現垂直居中

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

          您的轉發+關注就是對筆者最大的支持,歡迎關注。

          對大廠架構設計,BAT等廠家面試題解讀,編程語言理論或者互聯網圈逸聞趣事這些感興趣,歡迎關注筆者,沒有錯,干貨文章都在這里。

          篇文章主要給大家介紹一下如何使用html+css實現元素的水平與垂直居中效果,這也是我們網頁在編碼制作中會經常用到的問題。

          1)單行文本的居中

          主要實現css代碼:

          水平居中:text-align:center;

          垂直居中:line-height:XXpx; /*line-height與元素的height的值一致*/

          我們先來看這樣一個例子,加入我們這里有一個div,寬度和高度為300px,背景顏色為黑色,然后在div中有一行簡短文字,我們只需要使用line-height:200px;就可以實現文字的居中效果,具體的代碼如下所示:

          由上圖可以看出我們實現了單行文字的垂直居中效果,但是很多時候我們的文字并不知道具體有多少,可能有一行,也可能有很多行,那么遇到多行文字的這種問題我們要如何處理呢。

          2)多行文本的垂直居中

          對于多行文本的垂直居中我們有很多種實現方式,我們這里逐個的來看一下;

          1、使用display:table來實現

          主要實現代碼:

          display: table使塊狀元素成為一個塊級表格;

          display: table-cell;子元素設置成表格單元格;

          vertical-align: middle;使表格內容居中顯示,即可實現垂直居中的效果;

          具體的html與css的代碼就如下所示:

          2、使用absolute與transform配合實現

          主要實現代碼:

          position:absolute; 首先給文本絕對定位;

          left:50%;top:50%;transform:translate(-50%,-50%); 讓文本距離盒子左邊和上邊分別為50%,再用transform向左(上)平移它自己寬度(高度)的50%,也就達到居中效果了。

          具體的html與css的代碼就如下所示:

          3、使用flex實現

          主要實現代碼:

          display: flex;設置 display 屬性的值為 flex 將其定義為彈性容器

          align-items: center;定義項目在交叉軸(縱軸)上如何對齊,垂直對齊居中

          justify-content: center; 定義了項目在主軸上的對齊方式,水平對齊居中

          具體的html與css的代碼就如下所示:

          好了,本篇文章就給大家說到這里,大家自己動手寫一下看能不能寫出一樣的頁面效果出來,也可以找一些類似的頁面自己練習一下,有需要源碼的可以直接私信【網站源碼】即可。

          每日金句:了解別人心里想什么,你才能得到自己想要的。喜歡我的文章的小伙伴記得關注一下哦,每天將為你更新最新知識。

          目前大多數人對于CSS的使用只是停留在基本層面,設置位置,寬高,背景色等等。但是CSS還有很多的高級使用技巧,在開發時省去很多時間。

          今天我們就一起來看看CSS中的一些高級使用技巧,讓你的頁面更加的炫酷吧。

          CSS

          黑白圖片

          如何將一張彩色的圖片在頁面上展示成黑白圖片呢?

          我們需要用到一個filter屬性,在webkit中,-webkit-filter專門為元素的渲染提供一些效果,比如灰度,亮度,模糊等。

          使用灰度控制grayscale屬性,就可以很容易的將圖片置為黑白色。

          我們看到下面一張圖片。

          原始圖片

          當我們加上以下一段代碼后。

          CSS代碼

          可以看到圖片如下所示。

          處理過的圖片

          整個頁面添加頂部陰影

          有的時候我們將網頁的頂部設置為陰影效果,這個是怎么做到的呢?

          • 利用body的偽元素:before,可以減少額外的元素。

          • 在頂部增加一個div,設置一個高度,寬度為100%

          • 將其position設置為fixed,然后設置偏移量為設定的高度值。

          • 設置box-shadow屬性,值等于設定的高度值。

          得到的代碼如下所示。

          頁面頂部加陰影

          運行完上述代碼后,就可以看到整個頁面頂部有陰影的效果。

          所有元素垂直居中

          假如有一個很簡單的頁面,需要所有的元素都垂直居中顯示,實現的方法其實很簡單。

          • 將與align有關的屬性設置為center。

          • displag設置為flex。

          得到的代碼如下所示。

          垂直居中的CSS方法

          設置以后,我們可以看到不管將窗口設置為多高,所有元素都是垂直居中的狀態。

          但是這種方法有個弊端,就是會將所有元素水平排列,垂直居中,頁面元素過多時,頁面會被水平撐開,不太美觀。

          因此這種方法建議在頁面元素少的情況下使用。

          元素垂直居中

          負數的nth-child選擇器

          在一個使用ul>li創建的列表中,如果想要選擇其中的幾個元素,我們可以使用nth-child選擇器,例如:nth-child(1)代表第一個元素。

          那么假如我們想選擇第一個到第三個元素,使用nth-child該怎么做呢?

          很多人第一選擇是:nth-child(1),:nth-child(2),:nth-child(3),然后設置屬性。

          其實還有一種更簡單的方法,那就是使用負數選擇器。

          :nth-child(-n+3),就代表選擇從第一個到第三個元素。

          我們可以通過以下例子測試,首先在看看頁面的HTML代碼,并將它們的display全部設置為none,這樣就可以將li全部隱藏起來。

          HTML代碼

          然后通過nth-child選擇器設置css屬性。

          nth-child選擇器

          最后看看頁面上的內容呈現,可以看出實際選中的li只有前三個,符合預期。

          頁面內容

          表格列等寬

          頁面的table元素,如果不對tr>td設置寬度,列td的寬度是會隨著內容的變化而變化,這樣就會造成頁面布局很難看。

          我們可以將表格的每列設置成相同的寬度,這樣不管內容怎么變化都不會改變頁面的布局。

          只需要使用如下一個屬性即可。

          表格列等寬

          實際的效果如下圖所示。

          表格列等寬

          CSS3中的calc()

          在CSS3中新增了一個calc()方法,用于動態的計算值,不管是數值還是百分比,都可以參與計算。

          這個方法非常適用于自適應的容器中,動態計算寬高,間距(margin,padding),邊框(border)等值,這樣在容器大小變化的時候,不會改變元素之間的布局。

          例如以下我們定義的兩個div。

          CSS屬性

          看到的頁面效果如下圖所示。

          calc()效果

          禁用鼠標

          假設在頁面上有一個很重要的區域,只是只讀的,不能讓鼠標點擊,可以直接禁用掉鼠標點擊事件。

          這個在CSS3中新增了pointer-event屬性,只要將其設置為none即可。

          禁用鼠標點擊

          漸變文本

          有的時候我們可以看到頁面上有一些文字漸變的效果,如下圖所示。

          漸變文字

          這個效果是怎么實現的呢?

          通過設置偽元素,然后在偽元素中使用-webkit-mask-image屬性,這個屬性是專門用來產生遮罩效果的。

          然后將遮罩效果的字與原來的文章重合,就可以達到上述效果。

          我們設置一個h2標簽,然后設置data-text屬性,date-text屬性值與頁面顯示值一樣。

          HTML元素

          然后設置對應的CSS屬性。

          CSS屬性

          當我們在頁面運行后,我們就可以得到上面的文字漸變效果。

          模糊文本

          和上面的漸變文本類似,模糊文本也有專門的屬性可以設置,那就是text-shadow。

          通過下面一段簡單的代碼,就可以得到模糊文本了。

          模糊文本樣式

          得到的效果如下圖所示。

          模糊文本

          結束語

          今天這篇文章主要介紹了CSS中幾個高級的使用技巧,可以讓你在實現相同效果時,減少很多的代碼量,提高工作效率。

          大家要好好掌握~


          主站蜘蛛池模板: 制服中文字幕一区二区| 暖暖免费高清日本一区二区三区 | 欧美激情国产精品视频一区二区 | 99久久精品国产一区二区成人| 亚洲无码一区二区三区| 一区二区三区内射美女毛片| 日本一区频道在线视频| 无码国产精成人午夜视频一区二区| 一区二区三区视频| 国产精品久久一区二区三区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 中文字幕在线无码一区| 日韩一区二区三区在线精品| 日本高清一区二区三区| 精品国产一区二区三区不卡 | 一区高清大胆人体| 中文字幕永久一区二区三区在线观看| 国产一区二区三区福利| 亚洲国产一区二区三区在线观看| 亚洲AV美女一区二区三区| 国产一区二区视频在线播放| 日韩精品无码人妻一区二区三区| 伊人久久精品一区二区三区| 亚洲国产高清在线精品一区| 久久精品道一区二区三区| 国产色综合一区二区三区| 三上悠亚亚洲一区高清| 日韩精品无码一区二区视频| 国产熟女一区二区三区四区五区 | 色国产在线视频一区| 无码人妻精品一区二区三区9厂| 亚洲AV香蕉一区区二区三区| 最新中文字幕一区二区乱码| 精品一区二区三区无码视频| 一区二区高清在线| 亚洲乱码日产一区三区| 精品福利视频一区二区三区| 亚洲AV成人精品一区二区三区| 国产未成女一区二区三区| 国产一区二区三区在线观看免费| 爱爱帝国亚洲一区二区三区|