整合營銷服務(wù)商

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

          免費咨詢熱線:

          CSS 中幾種最常用的水平垂直居中的方法

          SS 是前端里面的基礎(chǔ)之一,也是非常重要的一部分,它往往決定了你所做出來的網(wǎng)頁頁面是否美觀。在設(shè)計網(wǎng)頁頁面的過程中,總會有將元素或者文字進行水平垂直居中的要求。下面w3cschool編程獅就為大家介紹 CSS 中幾種常用到的水平垂直居中的方法。


          一、使用 margin:auto

          當元素有給定的高度以及寬度的時候,使用 margin: auto; 元素僅會水平居中,并不會進行垂直居中。此時就需要設(shè)置元素的 position 為 absolute,父級元素的 position 為 relative,同時元素的上下左右都需要設(shè)置為 0。

          HTML 代碼

          <div class="box">
            <div class="center1"></div>
          </div>

          CSS 代碼

          .box{
            width: 200px;
            height: 200px;
            background-color: #eee;
            position: relative;
            margin-top: 20px;
          }
          .center1{
            width: 50px;
            height: 50px;
            background-color: #00ACED;
            margin: auto;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
          }

          效果展示:



          二、使用 position:absolute

          當已經(jīng)知道了要進行水平垂直居中的元素的寬高時,就可以通過設(shè)置 position: absolute 來實現(xiàn)。但是,使用的同時還需要結(jié)合其他屬性才完整實現(xiàn)。因為,單是設(shè)置 absolute,上左距離均為一半,就會出現(xiàn)下面這種情況。很顯然可以看到,元素并不是完全居中,僅只有左上角的位置在中心點

          概念圖:

          因此想要實現(xiàn)元素完全水平垂直居中,在設(shè)置了 absolute 定位后,可以設(shè)置 margin 值為負,或者使用 calc 來計算,上左距離在 50% 的基礎(chǔ)上還要減去元素本身一半的寬高。

          margin 值為負或者 calc 計算均是在已知元素寬高的情況下,假設(shè)不知道元素的寬高,那么怎么實現(xiàn)水平垂直居中呢?這里就可以使用 transform 屬性,通過坐標位移來實現(xiàn)居中。

          CSS 代碼

          /* 結(jié)合 margin */
          .center2{
            width: 50px;
            height: 50px;
            background-color: #7FFFD4;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -25px;
            margin-top: -25px;
          }
          /* 結(jié)合 calc 計算*/
          .center2{
            width: 50px;
            height: 50px;
            background-color: #7FFFD4;
            position: absolute;
            left: calc(50% - 25px)
            top: calc(50% - 25px);
          }
          /* 結(jié)合 transform */
          .center2{
          width: 50px;
          height: 50px;
          background-color: #7FFFD4;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%, -50%);
          }

          效果展示



          03

          PART

          三、使用彈性布局

          可以通過彈性布局來設(shè)置水平垂直居中,這里需要設(shè)置父級元素 display:flex; 還需要設(shè)置兩個屬性,水平布局 justify-content 以及垂直布局 align-items。

          HTML代碼

          <div class="box2">
            <div class="center4"></div>
          </div>

          CSS代碼:

          .box2{
            background-color: #eee;
            width: 200px;
            height: 200px;
            position: relative;
            margin-top: 20px ;
            display: flex;
            justify-content: center;
            align-items: center;
          }
          .center4{
            width: 50px;
            height: 50px;
            background-color: #B39873;
          }

          效果展示:


          四、文本水平對齊和行高

          前面介紹的是元素如何實現(xiàn)水平垂直居中,下面介紹的是如何將文字進行水平垂直居中。這第一個方法也是最經(jīng)常用的,使用文本水平對齊 text-align 和行高 line-height 來實現(xiàn)的。

          HTML 代碼

          <div class="box3">
            <div class="center5">文字居中</div>
          </div>

          CSS 代碼

          .box3{
            background-color: #eee;
            width: 200px;
            height: 200px;
            margin-top: 20px;
          }
          .center5{
            text-align: center;
            line-height: 200px;
          }

          效果展示


          05

          PART

          五、使用網(wǎng)格布局

          第二個方法可以通過網(wǎng)格布局 grid 來實現(xiàn)。而這里通過 grid 有兩種方式實現(xiàn),一種對元素本身屬性進行設(shè)置,另一種在元素的父級元素中設(shè)置。兩者看上去內(nèi)容似乎差不多,不同的是在元素中設(shè)置的是 align-self 還要多了一個 margin,父級元素中是 align-items。

          相關(guān)代碼:

          /* grid 元素中設(shè)置 */
          .box4{
            background-color: #eee;
            width: 200px;
            height: 200px;
            margin-top: 20px;
            display: grid;
          }
          .center6{
            align-self: center;
            justify-content: center;
            margin: auto;
          }
          /* grid 父級元素中設(shè)置 */
          .box5{
            background-color: #eee;
            width: 200px;
            height: 200px;
            margin-top: 20px;
            display: grid;
            align-items: center;
            justify-content: center;
          }
          
          

          效果展示:


          六、總結(jié)

          以上就是關(guān)于 CSS 如何將元素或者文字進行水平垂直居中的幾種常用方法,大家還其他關(guān)于 CSS 實現(xiàn)水平垂直居中的方法嗎?請在評論區(qū)留下你的想法。

          關(guān)注w3cschool編程獅訂閱更多IT資訊、技術(shù)干貨~

          有時候,我們想閱讀頁面中某段精彩的內(nèi)容,但由于頁面太長,用戶需要自己滾動頁面,查找起來非常麻煩 ,很容易讓人失去繼續(xù)往下閱讀的興趣。這樣體驗非常不好,所以我們可以想辦法 實現(xiàn)點擊某段文字或者圖片跳轉(zhuǎn)到頁面指定位置,方便用戶的閱讀。

          一、 純 html 實現(xiàn)

          1. 利用 id 為標記的錨點

          這里作為錨點的標簽可以是任意元素。

            <a href="#aa">跳轉(zhuǎn)到 id 為 aa 標記的錨點</a>
            <p>-------------分隔線-------------</p>
            <div id="aa">a</div>
          

          2. 利用 a 標簽的 name 屬性作為錨點

          這里作為錨點的標簽只能是 a 標簽。

            <a href="#bb" >跳轉(zhuǎn)到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <div id="abb">bbb</div>
          

          注意:當以 ' a 標簽 name 屬性作為錨點 ' 和 ' 利用 id 為標記的錨點 ' 同時出現(xiàn)(即以 name 為錨點和以 id 為錨點名字相同時),會將后者作為錨點。

          二、 js 實現(xiàn)

          1. 利用 scrollTo()

          window.scrollTo 滾動到文檔中的某個坐標。可提供滑動效果,想具體了解 scrollTo() 可以看看 MDN 中的介紹。

          話不多說,看下面代碼

          「html 部分」:

            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">c</div>
          

          「js 部分」:

            var linkc = document.querySelector('#linkc')
            var cc = document.querySelector('#cc')
          
            function to(toEl) {
              // toEl 為指定跳轉(zhuǎn)到該位置的DOM節(jié)點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              
              // 計算該 DOM 節(jié)點到 body 頂部距離
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
              
              // 滾動到指定位置
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          

          2. 利用 scrollIntoView()

          Element.scrollIntoView() 方法讓當前的元素滾動到瀏覽器窗口的可視區(qū)域內(nèi)。想具體了解 scrollIntoView() 可以看看 MDN 中的介紹。

          下面也直接上代碼

          「html 部分」:

            <a onclick="goTo()">利用 scrollIntoView 跳轉(zhuǎn)到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">ddd</div>
          

          「js 部分」:

            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          

          注意:此功能某些瀏覽器尚在開發(fā)中,請參考瀏覽器兼容性表格以得到在不同瀏覽器中適合使用的前綴。由于該功能對應(yīng)的標準文檔可能被重新修訂,所以在未來版本的瀏覽器中該功能的語法和行為可能隨之改變。

          下面為了方便看效果,把上面的代碼整理在一起。

          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
              div {
                width: 600px;
                height: 300px;
                background-color: pink;
              }
            </style>
          </head>
          <body>
            <a href="#aa">跳轉(zhuǎn)到以 id 為 aa 標記的錨點 a</a>
            <p>-------------分隔線-------------</p>
            <a name="aa">hhh</a>
            <div id="aa">aa</div>
            <a href="#bb" >跳轉(zhuǎn)到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <p>-------------分隔線-------------</p>
            <div>bb</div>
            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">cc</div>
            <a onclick="goTo()">利用 scrollIntoView 跳轉(zhuǎn)到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">dd</div>
            <p>-------------分隔線-------------</p>
            <div></div>
          </body>
          <script>
            var cc = document.querySelector('#cc')
            var linkc = document.querySelector('#linkc')
          
            function to(toEl) {
              //ele為指定跳轉(zhuǎn)到該位置的DOM節(jié)點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
          
              console.log(height)
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          
          </script>
          <script>
            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          </script>
          </html>
          

          效果圖:

          如果網(wǎng)頁只有一種顏色,那是非常可怕的,顏色的設(shè)置豐富了網(wǎng)頁,就如同多彩繽紛的世界。

          在了解css顏色之前,我們回顧下計算機是如何顯示顏色的?計算機根據(jù)色光三原色的原理通過各種算法來顯示顏色。

          css 顏色 —— color

          網(wǎng)頁中使用顏色關(guān)鍵字、16進制字符、rgb、rgba等表示紅,綠,藍三種顏色混合色,如下示例,幾種寫法都是指同一個顏色(紅色):

          color:red;
          color: #ff0000;
          color: rgb(255,0,0)
          color: rgba(255,0,0,1)

          對于16進制形式,每2位表示一個顏色,從左到右分別是紅、綠、藍,每種顏色取值從00 到 FF。

          如下示例:

          color: #000000; /*黑色*/
          color: #ffffff; /*白色*/
          color: #ff0000; /*紅色*/
          color: #00ff00; /*綠色*/
          color: #0000ff; /*藍色*/

          對于rgb的表示法,由三個參數(shù)組成,分別是紅、綠、藍,每種顏色取值從0 到 255。

          如下示例:

          color: rgb(0,0,0); /*黑色*/
          color: rgb(255,255,255); /*白色*/
          color: rgb(255,0,0); /*紅色*/
          color: rgb(0,255,0); /*綠色*/
          color: rgb(0,0,255); /*藍色*/

          紅,綠,藍值從0到255的結(jié)合,給出了總額超過1600多萬不同的顏色(256 × 256 ×256)。

          但是現(xiàn)代大多數(shù)顯示器能夠顯示至少16384種顏色。所以在使用顏色時要格外注意,避免設(shè)置不能夠顯示的顏色,可以參考網(wǎng)頁安全色:https://www.w3school.com.cn/cssref/css_colors.asp。

          顏色除了有三原色紅綠藍組成,還有亮度層級,如下圖:

          rgba 中的a是指透明度,這個是css3新增加的屬性,通過rgba可以設(shè)置更加漂亮的顏色。

          css 背景 —— background

          通過background屬性可以設(shè)置元素的背景色、背景圖片,語法如下:

          background:bg-color bg-image position/bg-size bg-repeat bg-origin bg-clip bg-attachment initial|inherit;

          background 在一個聲明中設(shè)置所有的背景屬性,可以在這里設(shè)置如下屬性:

          • background-color —— 背景顏色。
          • background-image —— 使用的背景圖像
          • background-position —— 背景圖像的位置
          • background-size —— 背景圖片的大小
          • background-repeat —— 如何重復(fù)背景圖像
          • background-origin —— 背景圖片的定位區(qū)域
          • background-clip —— 背景的繪制區(qū)域
          • background-attachment —— 背景圖像是否固定或者隨著頁面的其余部分滾動。

          各值之間用空格分隔,不分先后順序。可以只有其中的某些值,例如 background:#FF0000 url(img.png)是允許的,但至少有一個值。

          建議使用background 簡寫屬性,這樣可以更好地兼容較老的瀏覽器,少寫很多代碼,當然你也可以分開使用,比如:

          background-color: #ff0000;
          background-image: url(img.png);
          background-repeat: no-repeat;
          background-size: 100% auto;

          1、背景顏色 —— background-color

          background-color 和之前講的的color 一樣,可以使用16進制、rgb、rgba等設(shè)置顏色。如下實例:

          <html>
          <head>
          <style type="text/css">
          body {background-color: yellow}
          h1 {background-color: #00ff00}
          h2 {background-color: transparent}
          p {background-color: rgb(250,0,255)}
          p.no2 {background-color: gray; padding: 20px;}
          </style>
          </head>
          <body>
          <h1>背景色1</h1>
          <h2>背景色2</h2>
          <p>背景色3</p>
          <p class="no2">背景色4</p>
          </body>
          </html>

          如下圖顯示:

          注意:background-color: transparent; 指透明色,不顯示任何顏色。

          2、背景圖片的使用——background-image

          給html元素添加背景圖片,在早期網(wǎng)頁制作中被廣泛應(yīng)用,如今已不建議大量使用。如下實例:

          body {background-image:url(/static/bg.gif);}

          這里使用了一個125*125大小的圖片,如下:

          但是你會發(fā)現(xiàn),整個網(wǎng)頁鋪滿了圖片,上面的代碼默認會鋪滿整個頁面從左到右,從上到下 。如果不想被平鋪,可以使用background-repeat 設(shè)置。

          背景圖片同時可以設(shè)置多個背景圖片,如下:

          background-image: url(/statics/bg1.gif), url(/statics/bg2.gif);

          多個圖像以逗號隔開,在頁面中多個圖片會疊加顯示,第一張圖片顯示在最頂端。

          如下效果:

          3、背景重復(fù)方式 —— background-repeat

          它有如下幾個屬性:

          repeat

          默認。背景圖像將在垂直方向和水平方向重復(fù)。

          repeat-x

          背景圖像將在水平方向重復(fù)。

          repeat-y

          背景圖像將在垂直方向重復(fù)。

          no-repeat

          背景圖像不重復(fù)。

          inherit

          從父元素繼承 background-repeat 屬性的設(shè)置。

          實例如下:

          4、背景圖的位置 —— background-position

          背景圖片默認顯示在左上角,語法如下:

          background-position: x y; // x 距離左邊距離,y距離頂部距離

          如果要改變它的位置,可以使用關(guān)鍵字:top、bottom、left、right 和 center;或者使用長度值,如 100px 或 5cm;也可以使用百分數(shù)值。

          x 可以取值 百分比| 數(shù)值| left | center | right。

          y 可以取值 百分比| 數(shù)值| top| center | bottom。

          當只設(shè)置一個值的時候,另一個會缺省為 center。

          使用關(guān)鍵字,將背景圖片水平居中,垂直居中:

          background-image:url('/statics/images/course/smiley.gif');
          background-repeat:no-repeat;
          background-attachment:fixed;
          background-position:center; 

          使用百分比%:

          background-image:url('/statics/images/course/smiley.gif');
          background-repeat:no-repeat;
          background-attachment:fixed;
          background-position: 50% 50%; 

          50% 50% 等同于 center center,顯示效果和上圖一樣。

          還可以使用具體數(shù)值,比如 px、em、cm等。

          background-image:url('/statics/images/course/smiley.gif');
          background-repeat:no-repeat;
          background-attachment:fixed;
          background-position: 50px 50px; 

          顯示效果如下:

          5、背景圖相對于容器的基準點 —— background-origin

          就是設(shè)置背景圖片相對于html元素什么位置作為初始坐標點,語法:

          background-origin: padding-box|border-box|content-box;

          幾種值得含義:

          padding-box

          背景圖像相對填充框的位置

          border-box

          背景圖像相對邊界框的位置

          content-box

          背景圖像相對內(nèi)容框的位置

          如下實例:

          6、背景圖片大小 —— background-size

          默認會顯示背景圖原始尺寸,可以通過此屬性設(shè)置背景圖片在元素上的大小,語法:

          background-size: width height;

          寬度和高度可以使用 數(shù)值、百分比%、cover 及 contain ;

          數(shù)值:可以使用任何單位的數(shù)字,比如 px、em、cm等。如果設(shè)置一個值,第二個為"auto(自動)"。

          百分比%:相對于其所在html原始寬度和高度,如果設(shè)置一個值,第二個為"auto(自動)"。

          cover:把背景圖像擴展至足夠大,以使背景圖像完全覆蓋背景區(qū)域。背景圖像的某些部分也許無法顯示在背景定位區(qū)域中。

          contain:把背景圖像擴展至最大尺寸,以使其寬度和高度完全適應(yīng)內(nèi)容區(qū)域。

          如下示例:

          7、背景圖像是否固定或者隨著頁面的其余部分滾動

          background-attachment 屬性有以下幾個值:

          scroll

          背景圖片隨頁面的其余部分滾動。這是默認

          fixed

          背景圖像是固定的

          inherit

          指定background-attachment的設(shè)置應(yīng)該從父元素繼承

          local

          背景圖片隨滾動元素滾動

          如設(shè)置一個固定的背景圖片,不跟隨頁面滾動:

          background-attachment:fixed;

          滾動滾動條,會發(fā)下背景圖片始終固定在屏幕那個位置。

          8、背景繪制區(qū)域 —— background-clip

          語法如下:

          background-clip: border-box|padding-box|content-box;

          border-box

          默認值。背景繪制在邊框方框內(nèi)(剪切成邊框方框)。

          padding-box

          背景繪制在襯距方框內(nèi)(剪切成襯距方框)。

          content-box

          背景繪制在內(nèi)容方框內(nèi)(剪切成內(nèi)容方框)。

          這個屬性類似于 background-origin ,只不過它會裁剪背景圖片,如下示例:

          9、背景層的混合模式 —— background-blend-mode

          所謂混合模式就是將圖片與顏色或圖片與圖片進行混合,語法:

          background-blend-mode: normal|multiply|screen|overlay|darken|lighten|color-dodge|saturation|color|luminosity;

          屬性值:

          示例如下:

          正常模式

          luminosity 亮度模式

          color 顏色模式

          其它模式可以自己試試,看下有什么區(qū)別。

          到此,我們了解了顏色和背景的使用方法,尤其是背景的使用,由于它的屬性很多,可以簡寫也可以分開寫,要想完全掌握,還得多練習,每種屬性進行組合使用看看其效果。

          一般建議使用 background 簡寫方式,主要是可以少寫很多代碼。以上介紹難免有誤,或不齊全,歡迎指出錯誤,并補充。

          上篇:前端入門——css鏈接樣式


          主站蜘蛛池模板: 亚洲香蕉久久一区二区| 亚洲成AV人片一区二区密柚 | 久久精品免费一区二区喷潮| 亚洲Aⅴ无码一区二区二三区软件| 国产福利一区二区三区在线观看| 伦理一区二区三区| 无码人妻一区二区三区精品视频| 在线一区二区三区| 成人精品一区二区激情| 欧美激情国产精品视频一区二区| 无码av人妻一区二区三区四区| 日本激情一区二区三区| 亚洲制服丝袜一区二区三区| 亚洲国产精品综合一区在线| 精品国产一区二区三区四区| 国产精品亚洲一区二区麻豆 | 国产福利91精品一区二区| 精品少妇人妻AV一区二区三区| 亚洲日韩国产一区二区三区在线| 国产精品久久久久一区二区三区| 日本精品视频一区二区三区| 精彩视频一区二区三区| 亚洲AⅤ无码一区二区三区在线| 成人免费av一区二区三区| 中文字幕永久一区二区三区在线观看 | 伊人色综合一区二区三区| 国产自产在线视频一区| 青青青国产精品一区二区| 亚洲av无码一区二区三区人妖| 日本一区二区三区在线视频观看免费 | 国产精品夜色一区二区三区| 麻豆精品人妻一区二区三区蜜桃| 国产精品伦子一区二区三区| 美女免费视频一区二区三区| 一区二区三区影院| 美女视频在线一区二区三区| 视频一区二区精品的福利| 国产精品99精品一区二区三区| 日韩精品福利视频一区二区三区| 日本一区二区三区精品视频| 亚洲乱码一区二区三区国产精品 |