HTML與CSS布局技巧總結

很多人對CSS的布局有困惑,實際的應用場景中由于布局種類多難以選擇。今天我花些時間總結下自己對CSS布局的理解,分析下了解各種布局的優劣,同時希望能分享給初入前端的朋友們一些在布局上的經驗,如果有那些地方總結的不好,歡迎大家指正。言歸正傳,現在就來揭開各種布局的面紗。

單列布局

<div class="parent"><div class="child"></div>
</div>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

水平居中

???????水平居中的布局方式是最常見的一種,常常用于頭部、內容區、頁腳,它主要的作用是控制盒子在整個頁面以水平居中的方式呈現。

這里寫圖片描述

使用margin:0 auto來實現

.child{width:800px; margin: 0 auto;}
  • 1
  • 1

???????優勢:兼容性好?
???????劣勢:需要指定盒子 寬度


1.使用table來實現

.child{display: table; margin: 0 auto;}
  • 1
  • 1

???????優勢:不需要父容器parent,只需要對自身進行設置?
???????劣勢:IE6、7需要調整結構


2.使用inline-block和text-align來實現

.parent{text-align: center;}
.child{display: inline-block;}
  • 1
  • 2
  • 1
  • 2

???????優勢:兼容性好?
???????劣勢:需要同時設置子元素和父元素


3.使用絕對定位absolute來實現

???????使用絕對定位來實現水平居中布局有兩種情況,一種子容器無寬度,另一種子容器有寬度。無寬度可以用一下代碼,如果是有寬度,則可以設置margin-left負值為容器寬度的一半。

.parent{position: relative;}
.child{position: absolute; left: 50%; transform: translateX(-50%);}
  • 1
  • 2
  • 1
  • 2

???????優勢:無需設置容器寬度,在移動端可以使用?
???????劣勢:兼容性差,需要IE9及以上瀏覽器的支持


4.使用flex布局來實現

???????flex有兩種方法來實現水平居中,父容器設置display:flex, 一種直接在父容器中設置justify-content屬性值center。第二種在子容器中使用margin: 0 auto

.parent{display: flex; justify-content: center;}
  • 1
  • 1
.parent{display: flex;}
.child{margin: 0 auto;}
  • 1
  • 2
  • 1
  • 2

???????優勢:實現起來簡單,尤其是使用在響應式布局中?
???????劣勢:兼容性差,如果大面積的使用該布局可能會影響效率


垂直居中

這里寫圖片描述

這邊說的垂直居中是子容器無高的垂直居中,并非單行文本垂直居中line-height

1.使用絕對定位absolute來實現(同水平居中的使用方法,優劣一樣)

.parent{position: relative;}
.child{position: absolute; top: 50%; transform: translateY(-50%);}
  • 1
  • 2
  • 1
  • 2

2.使用flex來實現

.parent{display: flex; align-items: center;}
  • 1
  • 1

3.使用display:table-cell來實現

.parent{display: table-cell;vertical-align: middle;height: 400px;}
  • 1
  • 1

???????總結:將水平居中和垂直居中兩種布局方法相互的結合起來就可以實現水平居中布局。這邊只舉一個用絕對定位來實現水平垂直居中布局的方法,別的方法大家可以嘗試自己練習。(以下介紹各種布局時都是基于上面水平和垂直居中的方法,所有對于它們的優劣就不再分析。)

.parent{position: relative;}
.child{position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);}
  • 1
  • 2
  • 1
  • 2

多列布局

多列布局也是非常常見的,適用于一側定寬,另一側自適應的布局。

這里寫圖片描述

浮動布局

???????前段時間我總結過關于兩列浮動布局方法,這里我就不再從新總結了,如果有興趣的朋友可以參考前端時間關于浮動布局的方法(總結)這篇博客。

多列等分布局

多列等分布局常常出現在內容中,多數為同功能、同階級內容的并排顯示。?
這里寫圖片描述

HTML代碼

<div class="parent"><div class="column">1</div><div class="column">2</div><div class="column">3</div><div class="column">4</div>
</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.使用flex來實現多列布局

.parent{display: flex;}
.column{flex: 1;}
.column+ .column{margin-left: 20px;}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.使用table來實現多列布局

.parent{display: table; table-layout: fixed; width: 100%;}
.column{display: table-cell; padding-left: 20px;}
  • 1
  • 2
  • 1
  • 2

3.使用float來實現多列布局

.column{float: left; width: 25%; padding-left: 20px; box-sizing: border-box;}
  • 1
  • 1

???????提示:使用table和float實現多列布局的時候需要注意,如果要設置背景顏色則必須將.column盒子作為父容器在其里面添加一個子容器,在設置背景顏色,如果直接在.column容器中設置背景顏色會由于padding而無法產生盒子之間的間距。

九宮格布局

這里寫圖片描述
HTML代碼

<div class="parent"><div class="row"><div class="item"></div><div class="item"></div><div class="item"></div></div><div class="row"><div class="item"></div><div class="item"></div><div class="item"></div></div><div class="row"><div class="item"></div><div class="item"></div><div class="item"></div></div>
</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

1.使用flex來實現九宮格布局

.parent{display: flex; flex-direction: column;width: 300px;}
.row{height: 100px; display: flex;border: 1px solid red;}
.item{width: 100px; background-color: #ccc;border: 1px solid red;}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.使用table來實現九宮格布局

.parent{display: table; table-layout: fixed; width: 100%;}
.row{display: table-row;}
.item{display: table-cell; width: 33.3%; height: 200px; border: 1px solid red;}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

全屏布局

這里寫圖片描述

HTML代碼

<div class="parent"><div class="top"></div><div class="left"></div><div class="right"></div><div class="bottom"></div>
</div>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用絕對定位實現全屏布局

html,body,.parent{height: 100%; overflow: hidden;}.top{position: absolute; top: 0; left: 0; right: 0; height: 0; background-color: black; height: 100px;}.left{position: absolute; top: 100px; left: 0;bottom: 50px; width: 200px; background-color: orange;}.right{position: absolute; top: 100px; left: 200px; right: 0; bottom: 50px; background-color: grey; overflow: hidden;}.bottom{position: absolute; left: 0; right: 0; bottom: 0; height: 50px; background-color: pink;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

響應式布局

meta標簽的使用

<meta name="viewport" content="width=device-width, initial-scale=1"/>
  • 1
  • 1

使用媒體查詢

@media screen and (max-width: 480px){/*屏幕小于480px的樣式*/
}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

???????總結:這些布局方法有些經常用到,有些由于兼容性的問題在具體項目相中使用的情況相對較少,不過對于移動端來說,以上總結的布局都是實用。今天特意花些時間來整理這些布局,一是為了鞏固知識,二是希望這些方法能夠分享給前端的初學者,讓他們對布局有更深入的了解,當然這些并非是CSS中的所有布局方法,以后發現有什么布局沒有總結到的,我會繼續更新、分享,如果哪位同行對布局方法有所補充,或者發現博客中存在問題,歡迎相互交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

當談論迭代器時,我談些什么?

花下貓語&#xff1a;之前說過&#xff0c;我對于編程語言跟其它學科的融合非常感興趣&#xff0c;但我還說漏了一點&#xff0c;就是我對于 Python 跟其它編程語言的對比學習&#xff0c;也很感興趣。所以&#xff0c;我一直希望能聚集一些有其它語言基礎的同學&#xff0c;一…

在Vue-cli項目中使用echarts

該示例使用 vue-cli 腳手架搭建 安裝echarts依賴 npm install echarts -S11 或者使用國內的淘寶鏡像&#xff1a; 安裝 npm install -g cnpm --registryhttps://registry.npm.taobao.org11 使用 cnpm install echarts -S11 創建圖表 全局引入 main.js // 引入echarts im…

Java的模板文件配置

Java的Mappers文件配置 <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.qfedu.…

Python爬蟲學習二

1、selenium自動測試工具 2、主要使用selenium的目的是跳過登錄驗證3、下載驅動器下載請求庫from selenium import webdriver import time#1、 直接在script文件夾中找驅動 driverwebdriver.Chrome() time.sleep(5) driver.close()#2、找到驅動路徑 #webdriver.Chrome(rD:\Pyth…

通過GitHub Pages創建個人主頁

登陸github,創建新倉庫&#xff0c;寫入名字, 這里要以github.io做后綴, 不然創建出來的不是GitHub Pages 打開終端, cd到自己想要的文件夾后clone到本地 git clone https://github.com/username/username.github.io 進入這個項目文件夾 cd username.github.io 把寫好HTML項目拷…

Spring IOC 配置文件模板

基于XML的普通設置 <?xml version1.0 encodingUTF-8 ?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/contex…

validate+jquery+ajax表單驗證

1.案例 1.1 Html form表單內容 <form class"cForm" id"cForm" method"post" action""> <p> <label for"user">用戶名</label> <input id"user" name"user" required minlen…

Html5做webapp中界面適配的問題總結

做一款軟件首先是要做出相應的界面&#xff0c;然而對于手機軟件開發者來說&#xff0c;大小各異的手機屏幕卻給我們帶來了不少的麻煩。HTML5技術在大家的心中要比傳統的Android/iOS/wp簡單的多&#xff0c;因為它的適配性和平臺跨越方面比較出色。在外看來卻不是那樣的&#x…

設置Maven下載鏡像源(直接替換其中的 settings.xml 內容即可)

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

P1576 最小花費

----------------------------------- 這道題就是圖論最短路&#xff0c;但是我們要改一下一些細節 比如說&#xff0c;因為這是算匯率&#xff0c;我們的初始化就要是0 我們還要改一改松弛操作 ----------------------------------- 還有&#xff0c;題目上給的是匯率&#xf…

css hack技術整理

做前端多年&#xff0c;雖然不是經常需要hack&#xff0c;但是我們經常會遇到各瀏覽器表現不一致的情況。基于此&#xff0c;某些情況我們會極不情愿的使用這個不太友好的方式來達到大家要求的頁面表現。我個人是不太推薦使用hack的&#xff0c;要知道一名好的前端&#xff0c;…

Hanoi雙塔問題

Hanoi雙塔問題 題目描述 給定A,B,C三根足夠長的細柱&#xff0c;在A柱上放有2n個中間有空的圓盤&#xff0c;共有n個不同的尺寸&#xff0c;每個尺寸都有兩個相同的圓盤&#xff0c;注意這兩個圓盤是不加區分的(下圖為n3的情形&#xff09;。現要將 這些國盤移到C柱上&#xff…

vue中config/index.js:配置的詳細理解

當我們需要和后臺分離部署的時候&#xff0c;必須配置config/index.js: 用vue-cli 自動構建的目錄里面 &#xff08;環境變量及其基本變量的配置&#xff09; 123456789101112131415var path require(path)module.exports {build: {index: path.resolve(__dirname, dist/ind…

uni-app吸頂固定樣式

<template><view class"full"><view class"sticky-box"><!-- 搜索 --><uni-search-bar class"unisearchbar" radius"5" placeholder"請輸入搜索關鍵詞" clearButton"auto" bgColor&qu…

Django(模板語言-自定義filter和simple_tag)

filter過濾器的主要形式&#xff1a;變量|函數,意思是將變量交給函數處理&#xff0c;而自定義filter就是自己定義函數&#xff0c;因為用到已有的很少。 1.在當前app中創建templatetags模塊(包&#xff1a;帶__init__.py)&#xff08;必須的&#xff09; 2.在templatetags中創…

uni-app商品分類

<template><view class"classify"><!-- 分類部分 --><view class"cate-left"><view :class"[cate-item,activeIndexindex?active:]" v-for"(item,index) in cateList" :key"index"click"c…

10分鐘看懂瀏覽器的渲染過程及優化

一、瀏覽器概述 目前的主流瀏覽器有5個&#xff1a;Internet Explorer、Firefox、Safari、Chrome和Opera瀏覽器。根據 StatCounter 瀏覽器統計數據&#xff0c;目前&#xff08;截止2019 年 5 月&#xff09;Firefox、Safari 和 Chrome 瀏覽器的總市場占有率將近 83.66%。由此可…

淺談 Vue 項目優化

前幾天看到大家說 vue 項目越大越難優化&#xff0c;帶來很多痛苦&#xff0c;這是避免不了的&#xff0c;問題終究要解決&#xff0c;框架的性能是沒有問題的&#xff0c;各大測試網站都有相關數據。下面進入正題 基礎優化 所謂的基礎優化是任何 web 項目都要做的&#xff0c;…

uni-app微信小程序一鍵登錄獲取權限功能

<button class"bottom size_30" type"primary" lang"zh_CN" click"getUserInfo">一鍵登錄</button>//第一授權獲取用戶信息》按鈕觸發getUserInfo() {// 展示加載框uni.showLoading({title: 加載中,});uni.getUserProfile…

第九章 結構體與共用體

姓名&#xff1a;呂家浩 實驗地點&#xff1a;教學樓514教室 實驗時間&#xff1a;4月30日 一、本章要點 1.通過實驗理解結構體和共用體的數據結構2.結構體、共用體中數組的使用及變量的賦值3.結構體和共用體定義時的嵌套使用&#xff08;嵌套使用的結構體必須先定義&…