CSS3/CSS之居中解析(水平+垂直居中、水平居中,垂直居中)

来源:https://www.cnblogs.com/xsd1/archive/2019/11/26/11936313.html
-Advertisement-
Play Games

首先,我們來看下垂直居中: (1)、如果是單行文本,則可以設置的line-height的數值,讓其等於父級元素的高度! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" conte ...


首先,我們來看下垂直居中:

(1)、如果是單行文本,則可以設置的line-height的數值,讓其等於父級元素的高度!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box{
            background: green;
            height:200px;
        }
        a {height:100%;
        line-height: 200px;
        color:red;
}
 </style>
</head>
<body>
   <div class="box">
       <a href="">ggg </a>
   </div>
</body>
</html>

 

 

 (2)、如果元素是行內塊級元素,一般會使用diaplay:inline-block,vertical-align:middle,還有一個偽元素讓元素內容處於容器中央!給父元素添加偽元素!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background: green;
            height:200px;
        }
     .box::after, .box2{
         display:inline-block;
         vertical-align: middle;
     }
     .box::after{
         content:'';
         height:100%;
     }
     .box2{background-color:red;width:20px;height:20px;}
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
   </div>
</body>
</html>

 

 

 (3)、通過display:flex來實現垂直居中;

父級:display:flex;

子元素:align-self:center;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background: green;
            height:300px;
            width: 600px;
            display:flex;
           
        }
        .box2{background:red;
        width:30%;
        height:30%;
        align-self: center;

     }
    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
   </div>
</body>
</html>

(4)、使用display:table進行垂直居中!

給父元素設置display:table;子元素設置為display:table-cell;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
            display:table;
        }
      
       .box .box2{
           color:red;
       
        display:table-cell;
         vertical-align: middle;
         
}
    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2">ddddd</div>
   </div>
</body>
</html>

 

 

 (5),已經知道父元素的高度,給子元素相對定位,在通過translaY()得到垂直居中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
           
        }
      
       .box .box2{
           background-color:red;
            width:50%;
             height:50%;
             position: relative;
             top:50%;
             transform:translateY(-50%);        
}
    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
   </div>
</body>
</html>

 

 

 6)、父元素高度不知道,同過transform實現,先給父元素相對定位,在給子元素絕對定位

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
            position: relative;
        }
      
       .box .box2{
           background-color:red;
            width:50%;
             height:50%;
             position: absolute;
             top:50%;
             transform:translateY(-50%);        
}
    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
   </div>
</body>
</html>

二、水平居中:

(1)、行內元素方案,只要把行內元素包裹 在一個盒子中,並且在他父級元素添加如下屬性:text-align:center;

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
            text-align:center;
        }
      P{color:red;}     
 </style>
</head>
<body>
   <div class="box">
       <p>1111</p>
   </div>
</body>
</html>

  

 

 (2)、單個塊狀元素解決方案:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
            text-align:center;
        }
    .box2{
        background-color: red;
        width: 20px;
        height: 20px;
        margin:0 auto;
    }    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
   </div>
</body>
</html>

 

 3)、多個塊狀元素解決方案:父元素設置為text-align:center;子元素設置為:display:inline-block;

 

 相信很多人在剛接觸前端或者中期時候總會遇到一些問題及瓶頸期,如學了一段時間沒有方向感或者堅持不下去一個人學習枯燥乏味有問題也不知道怎麼解決,對此我整理了一些資料 喜歡我的文章想與更多資深大牛一起討論和學習的話 歡迎加入我的學習交流群907694362

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
            text-align:center;
        }
    .box2, .box3{
        background-color: red;
        width: 20px;
        height: 20px;
        display:inline-block;
    }    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
       <div class="box3"></div>
   </div>
</body>
</html>

也可以使用flexbox來實現:

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
           display:flex;
           justify-content:center;
        }
    .box2, .box3, .box4{
        background-color: red;
        width: 20px;
        height: 20px;
      
    }    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
       <div class="box3"></div>
       <div class="box4"></div>
   </div>
</body>
</html>

 

(4)、不定寬度塊元素水平居中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            float:left;
            position: relative;
            left:50%;
        }
    .box ul{
        position:relative;
        left:-50%;
    }
 </style>
</head>
<body>
   <div class="box">
       <ul>
           <li>1111</li>
           <li>111</li>
           <li>111</li>
       </ul>
   </div>
</body>
</html>

三:實現水平+垂直居中,也就是在中央:(1)單行行內元素:父元素設置:text-align:center,display:table-cell;vertical-align:middle,在這裡,圖片,文字,都是一樣的操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: #ccc;
            width:500px;
            height: 500px;
            display:table-cell;
            text-align: center;
            vertical-align: middle;
        }
        img{width:50px;
        height: 50px;}
   
 </style>
</head>
<body>
   <div class="box">
      <img src="5.jpg" alt="">
   </div>
</body>
</html>

 

 文字在中央,還可以父級設置為text-align:center;line-height設置為父元素的height

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: #ccc;
            width:500px;
            height: 500px;
            text-align: center;
        }
        
   p{line-height: 500px;}
 </style>
</head>
<body>
   <div class="box">
  <p>1111</p>
      
   </div>
</body>

(2)對於單個塊級元素,父元素設置為相對定位,子元素設置為絕對定位高度,寬度為50%

 

 

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: #ccc;
            width:500px;
            height: 500px;
            position: relative;  
        }
        .box2{position: absolute;
        top:50%;
        left:50%;
        background-color: black;
        width: 20px;
        height: 20px;}
   
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
  
      
   </div>
</body>
</html>

(3)、flex實現不定寬度水平+垂直居中

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            background-color: green;
            height:300px;
            width: 600px;
           display:flex;
           justify-content:center;
           align-items:center;
        }
    .box2, .box3, .box4{
        background-color: red;
        width: 20px;
        height: 20px;
      
    }    
 </style>
</head>
<body>
   <div class="box">
       <div class="box2"></div>
      
   </div>
</body>
</html>

推薦閱讀:CSS邊框長度控制 

                   css樣式的書寫順序及原理——很重要!

原文鏈接:https://blog.csdn.net/qq_35788269/article/details/80691114

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <style>        .box{            background: green;            height:200px;        }        a {height:100%;        line-height: 200px;        color:red;} </style></head><body>   <div class="box">       <a href="">ggg </a>   </div></body></html>————————————————版權聲明:本文為CSDN博主「左手寫愛等等」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/qq_35788269/article/details/80691114


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • var LayVerifyExtend = { notnullNonnegativeInteger: function (value, item) { //value:表單的值、item:表單的DOM對象 if (!/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\d+)?$/.t ...
  • 1、新建一個layui.extend.js文件,頁面調用時這個文件放到layui.js後面。 2、基礎的配置卸載config中,擴展的組件寫入extend,組件的路徑是相對於config下base的路徑。 例如: layui.config({ version: false, //一般用於更新模塊緩存 ...
  • rem佈局 1. 技術選型 方案:採取單獨製作移動頁面方案 技術:佈局採取rem適配佈局(less rem+媒體查詢) 設計圖紙:750px尺寸 2. 相關文件夾結構 3. 設置視口標簽以及引入初始化央視 ~~~html ~~~ 4. 設置公共的common.less文件 設置好最常見的屏幕尺寸,利 ...
  • 今天,在頁面上碰到一個非 select 標簽的下拉框,打算進行定位和模擬選中。 <input aria-invalid="false" autocomplete="disabled" placeholder="請選擇" type="text" class="AABBCC-input DDCC-inp ...
  • 1.在指南的緩存章節里webpack.config.js文件中,使用new的方法會報錯 const webpack = require('webpack'); + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor' + }), new ...
  • 運用Taro實現多端導航欄/tabbar實例 (H5 + 小程式 + React Native) 最近一直在搗鼓taro開發,雖說官網介紹支持編譯到多端,但是網上大多數實例都是H5、小程式,很少有支持RN端。恰好Taro是基於React技術,想著之前也做過一些react項目,如是抱著好奇深究了一番, ...
  • 練習1:求兩個數字的和:獲取任意的兩個數字的和 function getSum(x, y) { return x + y; } console.log(getSum(10, 20)); 練習2:求1-100之間所有的數字的和 function geteverySum() { var sum = 0; ...
  • 前言 最近在做 webapp,遇到了很多移動端相容的問題,其中一個問題就是:輸入框觸發 focus 後,鍵盤彈出,然後遮住了輸入框。 然後在 和`IOS`上,這個問題的表現形式不一樣,而原生鍵盤和第三方鍵盤也不一樣,但引起的問題都是一樣的:輸入框被遮住了。 需要的效果 在鍵盤彈出時,獲得焦點的輸入框 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...