2D動作遊戲《常世之塔》完整版正式發售 Steam永漲至41元
阿新 • • 發佈:2022-06-02
第十週周總結
多表查詢的兩種方法
方式一:連表操作 inner join 內連線,只連線兩張表中共有的部分 seiect * from emp1 inner join dep on emp1.dep_id=dep.id; left join 左連線,以left join左邊的表為基準,展示左邊表的所有資料,沒有右邊表的對應項則用null填充 select * from emp1 left join dep on emp1.dep_id=dep.id; right join 右連線,以right join右邊的表為基準,展示右邊表的所有資料,沒有左邊表的對應項則用null填充 select * from emp1 left join dep on emp1.dep_id=dep.id; nuion 全連線,以左右表為基準展示兩張表所有的資料,沒有的則用null填充 select * from emp1 left join dep on emp1.dep_id=dep.id union select * from emp1 right join dep on emp1.dep_id=dep.id; 方式二:子查詢 將一條SQL語句用括號括起來當成另一條SQL語句的查詢條件
小知識點補充
1.concat與concat_ws concat用於分組之前的欄位拼接操作 select concat(name,'|',sex) from emp; concat_ws拼接多個欄位並且中間的連線符一致 select concat_ws('|',name,sex,age) from emp; 2.exists SQL語句1 exists SQL語句2 SQL語句2有結果的情況下才會執行SQL語句1,否則不執行SQL語句1,返回空資料 3.關於表的其它SQL補充 alter table 表名 rename 新表名; # 修改表名 alter table 表名 add 欄位名 欄位型別 約束條件; # 新增欄位 alter table 表名 add 欄位名 欄位型別 約束條件 after 現有欄位; # 指定欄位新增的位置 alter table 表名 add 欄位名 欄位型別 約束條件 first; # 將新建立的欄位列於首位 alter table 表名 change 舊欄位名 新欄位名 欄位型別 約束條件; # 修改欄位名 alter table 表名 modify 欄位名 新欄位型別 約束條件; # 修改原有欄位的欄位型別 alter table 表名 drop 欄位名; # 刪除欄位
視覺化軟體Navicat
視覺化軟體就是第三方開發的用來充當資料庫客戶端的軟體,特點是操作介面簡單快捷,其底層本質還是SQL 能夠操作資料庫的第三方視覺化軟體有很多,針對MySQL資料庫最出名的就是Navicat 1.下載 瀏覽器搜尋Navicat進入官網直接下載 2.破解 1.網上搜索註冊碼,淘寶購買註冊碼 2.直接下載破解版(版本較老) 3.網上搜索破解教程或破解軟體 ... ps: 這裡分享一下我的破解方法https://www.bilibili.com/read/cv16884052 3.常用操作 建立庫、表、記錄、主鍵、外來鍵 根據已有資料庫生成模型或直接使用模型建立表、記錄等 新建查詢可以編寫SQL語句,並自帶提示功能 SQL語句註釋語法 --、#、\**\ 執行、轉儲SQL檔案 ps:有些功能可能需要自己修改SQL預覽
python中操作MySQL
pymysql模組 第三方模組
import pymysql
# 1.連線MySQL伺服器
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='321',
db='db3',
charset='utf8mb4'
)
# 2.產生遊標物件
# cursor = conn.cursor() # 括號內不填寫額外引數,資料是元組,指定性不強 [()]
cursor = conn.cursor(cursor=pymysql.cursor.DictCursor) # [{}]
# 3.編寫sql語句
sql = 'select * from score;'
# 4.傳送SQL語句
affect_rows = cursor.execute(sql)
# 5.獲取SQL語句執行之後的結果
res = cursor.fetchall()
print(res)
補充說明
1.獲取資料
fetchall() 獲取所有結果
fetchone() 獲取結果集的第一個資料
fetchmany() 獲取指定數量的結果
cursor.scroll(1,'relative') # 基於當前位置向後移動一個
cursor.scroll(1,'absolute') # 基於資料的開頭往後移動一位
2.增刪改查
autocommit=True # 針對增刪改自動確認(在連線資料庫時直接配置)
conn.commit() # 針對增刪改二次確認(沒有配置通過程式碼確認)
python中SQL的注入問題
我們在python中編寫sql語句時會遇到各種問題,比如我們在編寫使用者登入功能時,只需要輸對姓名或者使用者名稱密碼都輸入錯誤了,但是卻能夠東路成功,這是因為遇到了SQL注入問題導致的
SQL注入問題就是利用特殊的組合產生特殊的含義,從而避開正常的業務邏輯
eg:
sql = 'select * from user where name="jason" --fsdag" and spwd=""'
轉成SQL語句就是
select * from user where name='jason' --fsdag' and spwd='' # 使用者名稱後面的語句被註釋了
sql = "select * from user where name='' or 1=1 --fgdsfh' and pwd=''"
轉成SQL語句
select * from user where name='' or 1=1 --fgdsfh' and pwd=''
# where後面是or連線的只要有一個成立就成立
針對上面的這種注入問題使用execute即可解決
sql = 'select * from user where name=%s and pwd=%s'
cursor.execute(sql,(username,password))
execute還有一個兄弟executemany,它可以一次性傳入多條資料 executemany[sql,(),()]
檢視
檢視就是我們通過查詢得到一張表,然後儲存下來留待下次使用但是這張表是虛擬的,只能查詢不能做修改刪除操作
create view teacher_course as
select * from teacher inner join course on teacher.tid = course.teacher_id
觸發器
觸發器,字面意思達到某個條件後自動觸發
在MySQL中對觸發器的說明是:針對表繼續進行增刪改操作可以自動觸發
主要有六種情況:分別是增、刪、改操作的前後、
create trigger 觸發器名稱 before/after insert/update/delete on 表名 for each row
begin
sql語句
end
1.觸發器的命名規律 # tri(表名是觸發器)_什麼時候觸發_什麼操作_表名
tri_before_insert_t1
tri_after_delete_t2
tri_after_update_t2
2.臨時修改SQL語句的結束符
delimiter $$ # 修改結束符為$$
事物
1.事物的四大特性(ACID)(重點)
A:原子性
事務中的各項操作是一個不可分割的整體,要麼同時成功要麼同時失敗
C:一致性
使資料庫從一個一致性狀態變為另一個一致性狀態
I:隔離性
多個事物之間彼此互不干擾
D:永續性
也可以稱之為永久性,一個事物一道提交,那麼他對資料庫中資料的改變就應該是永久的
事務相關關鍵字
start transaction; 開啟事物操作
rollback 回滾到上一個狀態
commit 將資料真正重新整理到硬碟
savepoint 儲存事物節點,就是儲存事物當前狀態
2.四種隔離級別(重點)
在SQL標準中定義了四種隔離級別,每一種級別都規定了一個事務中所做的修改
InnoDB支援所有隔離級別
set transaction isolation level 級別
1.read uncommitted(未提交讀)
事務中的修改即使沒有提交,對其他事務也都是可見的,事務可以讀取未提交的資料,這一現象也稱之為"髒讀"
2.read committed(提交讀)
大多數資料庫系統預設的隔離級別
一個事務從開始直到提交之前所作的任何修改對其他事務都是不可見的,這種級別也叫做"不可重複讀"
3.repeatable read(可重複讀) # MySQL預設隔離級別
能夠解決"髒讀"問題,但是無法解決"幻讀"
所謂幻讀指的是當某個事務在讀取某個範圍內的記錄時另外一個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄會產生幻行,InnoDB和XtraDB通過多版本併發控制(MVCC)及間隙鎖策略解決該問題
4.serializable(可序列讀)
強制事務序列執行,很少使用該級別
儲存過程
可以看成是python中自定義的函式
可以看成是python中的自定義函式
# 無參函式
delimiter $$
create procedure p1()
begin
select * from cmd;
end $$
delimiter ;
# 呼叫
call p1()
# 有參函式
delimiter $$
create procedure p2(
in m int, # in表示這個引數必須只能是傳入不能被返回出去
in n int,
out res int # out表示這個引數可以被返回出去,還有一個inout表示即可以傳入也可以被返回出去
)
begin
select * from cmd where id > m and id < n;
set res=0; # 用來標誌儲存過程是否執行
end $$
delimiter ;
# 針對res需要先提前定義
set @res=10; 定義
select @res; 檢視
call p1(1,5,@res) 呼叫
select @res 檢視
"""
檢視儲存過程具體資訊
show create procedure pro1;
檢視所有儲存過程
show procedure status;
刪除儲存過程
drop procedure pro1;
"""
# 大前提:儲存過程在哪個庫下面建立的就只能在對應的庫下面才能使用!!!
# 1、直接在mysql中呼叫
set @res=10 # res的值是用來判斷儲存過程是否被執行成功的依據,所以需要先定義一個變數@res儲存10
call p1(2,4,10); # 報錯
call p1(2,4,@res);
# 檢視結果
select @res; # 執行成功,@res變數值發生了變化
# 2、在python程式中呼叫
pymysql連結mysql
產生的遊表cursor.callproc('p1',(2,4,10)) # 內部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10;
cursor.excute('select @_p1_2;')
流程控制
# 分支結構
declare i int default 0;
IF i = 1 THEN
SELECT 1;
ELSEIF i = 2 THEN
SELECT 2;
ELSE
SELECT 7;
END IF;
# 迴圈結構
DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT num ;
SET num = num + 1 ;
END WHILE ;
函式
可以看成是python中的內建函式
"ps:可以通過help 函式名 檢視幫助資訊!"
1.移除指定字元
Trim、LTrim、RTrim
2.大小寫轉換
Lower、Upper
3.獲取左右起始指定個數字元
Left、Right
4.返回讀音相似值(對英文效果)
Soundex
"""
eg:客戶表中有一個顧客登記的使用者名稱為J.Lee
但如果這是輸入錯誤真名其實叫J.Lie,可以使用soundex匹配發音類似的
where Soundex(name)=Soundex('J.Lie')
"""
5.日期格式:date_format
'''在MySQL中表示時間格式儘量採用2022-11-11形式'''
CREATE TABLE blog (
id INT PRIMARY KEY auto_increment,
NAME CHAR (32),
sub_time datetime
);
INSERT INTO blog (NAME, sub_time)
VALUES
('第1篇','2015-03-01 11:31:21'),
('第2篇','2015-03-11 16:31:21'),
('第3篇','2016-07-01 10:21:31'),
('第4篇','2016-07-22 09:23:21'),
('第5篇','2016-07-23 10:11:11'),
('第6篇','2016-07-25 11:21:31'),
('第7篇','2017-03-01 15:33:21'),
('第8篇','2017-03-01 17:32:21'),
('第9篇','2017-03-01 18:31:21');
select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%Y-%m');
1.where Date(sub_time) = '2015-03-01'
2.where Year(sub_time)=2016 AND Month(sub_time)=07;
# 更多日期處理相關函式
adddate 增加一個日期
addtime 增加一個時間
datediff計算兩個日期差值
索引相關概念
1.索引就好比一本書的目錄,它能讓你更快的找到自己想要的內容
2.讓獲取的資料更有目的性,從而提高資料庫檢索資料的效能
索引在MySQL中也叫做“鍵”,是儲存引擎用於快速找到記錄的一種資料結構
primary key
unique key
index key
1.上述的三個key都可以加快資料查詢
2.primary key和unique key除了可以加快查詢本身還自帶限制條件而index key很單一就是用來加快資料查詢
3.外來鍵不屬於索引鍵的範圍 是用來建立關係的 與加快查詢無關
索引加快查詢的本質
id int primary key auto_increment,
name varchar(32) unique,
province varchar(32)
age int
phone bigint
select name from userinfo where phone=18818888888; # 一頁頁的翻
select name from userinfo where id=99999; # 按照目錄確定頁數找
索引可以加快資料查詢 但是會降低增刪的速度
通常情況下我們頻繁使用某些欄位查詢資料
為了提升查詢的速度可以將該欄位建立索引
聚集索引(primary key)
主鍵、主鍵索引
輔助索引(unique,index)
除主鍵以外的都是輔助索引
覆蓋索引
select name from user where name='jason';
非覆蓋索引
select age from user where name='jason';
索引資料結構
索引底層其實是樹結構>>>:樹是計算機底層的資料結構
樹有很多中型別
二叉樹、b樹、b+樹、B*樹......
二叉樹
二叉樹裡面還可以細分成很多領域 我們簡單的瞭解即可
二叉意味著每個節點最大隻能分兩個子節點
B樹
所有的節點都可以存放完整的資料
B+\*樹
只有葉子節點才會存放真正的資料 其他節點只存放索引資料
B+葉子節點增加了指向其他葉子節點的指標
B*葉子節點和枝節點都有指向其他節點的指標
輔助索引在查詢資料的時候最會還是需要藉助於聚集索引
輔助索引葉子節點存放的是資料的主鍵值
有時候就算採用索引欄位查詢資料 也可能不會走索引!!!
最好能記三個左右的特殊情況
前端之HTML
前端與後端的概念
前端是直接與使用者打交道的,後端不直接與使用者打交道,主要負責內部的業務邏輯的執行
http協議
又稱為超文字傳輸協議
1.四大特性
1.基於請求響應
客戶端傳送請求,服務端響應請求
2.基於TCP、IP作用於應用層之上的協議
該協議屬於應用層
3.無狀態
服務端不會儲存客戶端的狀態
4.無\短連線
客戶端與服務端不會一直保持連線
2.資料格式
1.請求格式
請求首行(請求方式根據協議版本有多種)
請求頭(一堆的k:v鍵值對)
換行
請求體(存放敏感資訊,不是所有的請求方式都有請求體)
2.相應格式
響應首行(狀態碼 協議版本)
響應頭(一堆k:v鍵值對)
換行
響應體(存放給瀏覽器展示的資料)
3.響應狀態碼
用數字來表示一些意思
1xx:服務端已經接收到了你的請求正在處理,客戶端可以繼續傳送或等待
2xx:200 請求成功,服務端傳送了對應的響應
3xx:302(臨時) 304(永久) 重定向(想訪問一個網頁但是自動調到了另一個網頁)
4xx:403 訪問許可權不夠 404 請求資源不存在
5xx:服務端內部錯誤
我們還可以自己定義更多的響應狀態碼,通常以10000起步
HTML概覽
1.HTML註釋語法
<!--註釋內容-->
2.HTML文件結構
<html> 固定格式 html包裹
<head>主要放跟瀏覽器互動的配置</head>
<body>主要放給使用者檢視的花裡胡哨的內容</body>
</html>
3.HTML標籤分類
單標籤(自閉和標籤)
<img/>
雙標籤
<h1></h1>
head內常見標籤
1.title 網頁小標題
2.meta 定義網頁源資訊(配置較多)
<meta name="keywords" content="查詢關鍵字">
<meta name="description" content="網頁簡介">
3.style 內部支援編寫css程式碼
<style>
h1{
color:rebeccapurple;
}
</style>
4.link 引入外部css檔案
<link rel="stylesheet" href="mycss.css">
5.script 支援內部編寫js程式碼也可以引入外部js檔案
<script>
prompt('good good study','day day up')
</script>
<script src="myjs.js"></script>
body之基本標籤
1.標題系列標籤
h1-h6
2.段落標籤
p
3.其他標籤
u 下劃線
i 斜體
s 刪除線
b 加粗
# 相同的效果可能是由不同的標籤實現的,標籤的功能不是獨一無二的
4.換行與分割線
br 換行
hr 分割線
'''
標籤分類
行內標籤 u i s b
內部文字有多大就佔多大(緊挨著的都在一行)
塊兒級標籤 h系列 p
獨佔一行
'''
body之常見符號
1. 空格
2.> 大於
3.< 小於
4.& &符
5.¥ ¥
6.© ©
7.® ®
body之佈局標籤
div
塊兒級標籤
span
行內標籤
"""
標籤之間可以相互巢狀 並且理論上可以無線套娃
塊兒級標籤內部可以巢狀塊兒級標籤和行內標籤
p標籤雖然是塊兒級標籤 但是它的內部也不能巢狀塊兒級標籤
行內標籤內部只能巢狀行內標籤
"""
body之常見標籤
"""
標籤括號內填寫的 什麼=什麼 稱之為的標籤的屬性
1.預設屬性
標籤自帶的 編寫的時候有自動提示
2.自定義屬性
使用者自定義 編寫不會有提示甚至會飄顏色
"""
a 標籤 連結標籤
href
1.填寫網址 具備跳轉功能
href='url'
2.填寫其他標籤的id值 具備錨點功能
href='#id'
target
預設_self原網頁跳轉
_blank新建網頁跳轉
img 標籤 圖片標籤
src
1.填寫圖片地址
2.其他特性
title
滑鼠懸浮在圖片上自動展示的文字
alt
圖片載入失敗提示的資訊
width\height
圖片的尺寸,兩個調整一個即可,等比例縮放
body之列表標籤
無序列表
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
網頁上所有有規則排列的橫向或者豎向的資料一般用的都是無序列表
有序列表
<ol type="I">
<li>1</li>
<li>2</li>
<li>3</li>
</ol>
標題列表
<dl>
<dt>大標題</dt>
<dd>小標題1</dd>
<dd>小標題2</dd>
<dt>大標題</dt>
<dd>小標題1</dd>
<dd>小標題2</dd>
<dd>小標題3</dd>
</dl>
body之表格標籤
1.先寫基本骨架
<table>
<thead></thead>
<tbody></tbody>
</table>
2.再寫表頭及表單資料
<tr> 一個tr標籤就表示一行
<th>編號</th>
<th>姓名</th>
<th>年齡</th>
</tr>
<tr>
<td>1</td> td主要用於表達資料
<td>jason</td>
<td>18</td>
</tr>
完整寫法
<table>
<thead>
<tr>
<th>編號</th>
<th>姓名</th>
<th>年齡</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>jason</td>
<td>18</td>
</tr>
</tbody>
</table>
body之表單標籤
可以獲取到使用者的資料併發送給服務端
form標籤
action 控制資料提交的地址
method 控制資料提交的方法
input標籤 使用者輸入
type屬性
text 普通文字
password 密文展示
date 日期選項
email 郵箱格式
radio 單選
checkbox 多選
file 檔案
submit 觸發提交動作
reset 重置表單內容
select標籤 下拉框
option標籤 一個個的選項
textarea標籤 獲取大段文字
基於form表單傳送資料
1.獲取的使用者資料應該以k:v健值對的形式傳送
用於獲取使用者資料的標籤至少應該含有name屬性,就相當於字典的鍵
使用者輸入的資料儲存到標籤的value屬性中,相當於字典的值
2.如果獲取的使用者資料不是填寫而是選擇,那麼我們需要自己填寫value
<input type="radio" name="gender" value="male">
# 沒有name屬性的標籤form表單會直接忽略不會發送
3.針對input標籤理論上應該配一個label標籤繫結,但是也可以不寫
在這裡label的作用就是使滑鼠在點選username的時候能夠直接聚焦到輸入框
寫法一:
<label for="d1">username:
<input type="text" id="d1">
</label>
寫法二:
<label for="d1">username:</label>
<input type="text" id="d1">
4.標籤的屬性如果和屬性值相等那麼可以簡寫
完整寫法
<input type="file" multiple="multiple">
簡寫
<input type="file" multiple>
5.針對選擇型別的標籤可以提前設定預設選項
單選與多選使用checked,下拉框使用selected
<input type="radio" name="gender" checked="checked">
<input type="checkbox" name="football" checked>
下拉框
<option value="" selected>222</option>
6.下拉框與檔案上傳可以複選
<input type="file" multiple>
<select name="" id="" multiple>
CSS
層疊樣式表
主要用於調節HTML標籤的各種樣式
標籤的兩大屬性:
1.class屬性
分類查詢,主要用於批量查詢
2.id屬性
精確查詢,點對點的查詢
我們之所以將標籤分為這兩大屬性主要是用來區分標籤的,頁面都是由HTML組成的,且一個頁面有許多HTML標籤都是相同的,但是這些相同的標籤在不同的位置樣式可能是不同的,所以我們需要將之區分開來
# 我們學習css是需要先學會查詢標籤,然後才能調整對應標籤的樣式
1.css語法結構
選擇器{
樣式名1:樣式值1,
樣式名2:樣式值2
}
2.css註釋語法
/*註釋內容*/
3.引入css的多種方式
1.head內style標籤內編寫(學習css是推薦使用)
2.head內link標籤引入(主流寫法)
3.標籤內直接通過style屬性編寫(不推薦使用)
選擇器
1.CSS基本選擇器
1.標籤選擇器(直接按照標籤名查詢標籤)
div {
color: red;
}
2.類選擇器(按照標籤的class值查詢標籤)
.c1 {
color: red;
}
3.id選擇器(根據標籤的id值精準查詢標籤)
#d1 {
color: yellow;
}
4.通用選擇器(直接選擇頁面所有的標籤)
* {
color: blue;
}
2.CSS組合器
1.後代選擇器(空格)
div span {
color: red;
}
查詢div標籤內所有的span標籤
2.兒子選擇器(大於)
div>span {
color: yellow;
}
查詢div標籤下的第一級的span標籤
3.毗鄰選擇器(加號)
div+span {
color: blue;
}
查詢與div標籤緊挨著的span標籤,如果與div標籤緊挨著的不是span標籤那麼該選擇器不生效
4.弟弟選擇器(小波浪號)
div~span {
color: yellow;
}
查詢與div標籤同級的span標籤
3.分組與巢狀
1.div,p,span {
color: yellow;
}
多個選擇器合併查詢
2. div.c1 {
color: red;
}
查詢class類含有c1的div的標籤
3..c1 p.c2 {
color: yellow;
}
查詢含有c1樣式值中含有c2樣式值的p標籤
4.屬性選擇器
[username] {
color: red;
} # 按照屬性名查詢
[username='jason'] {
color: red;
} # 按照屬性名等於屬性值查詢
5.偽類選擇器
1.滑鼠移動到連線上
a:hover {
color: red;
}
2.input獲取焦點(滑鼠點選)之後採用的樣式
input:focus {
background-color: red;
}
6.偽元素選擇器
使用css新增文字無法正常選中
1.在文字之前
p:before {
content: '一二三';
color: red;
}
2.在文字之後
p:after {
content: '三二一';
color: red;
}
選擇器優先順序
1.選擇器相同,匯入方式不同
就近原則
2.原則器不同,匯入方式相同
內聯樣式 > id選擇器 > 類選擇器 > 標籤選擇器
樣式調節
1.字型樣式
font-size:24px # 字型大小
font-weight用來設定字型的字重(粗細)。
值 描述
normal 預設值,標準粗細
bold 粗體
bolder 更粗
lighter 更細
100~900 設定具體粗細,400等同於normal,而700等同於bold
inherit 繼承父元素字型的粗細值
字型顏色 三種模式
color: red; # 直接填寫顏色英文
color: #3d3d3d; # 填寫顏色程式碼
color: rgb(111,111,111) # rgb值
color: rgba() # 與rgb一樣,只是最後一個a用來控制透明度
文字對齊
text-align 屬性規定元素中的文字的水平對齊方式。
值 描述
left 左邊對齊 預設值
right 右對齊
center 居中對齊
justify 兩端對齊
文字裝飾
text-decoration 屬性用來給文字新增特殊效果。
值 描述
none 預設。定義標準的文字。
underline 定義文字下的一條線。
overline 定義文字上的一條線。
line-through 定義穿過文字下的一條線。
inherit 繼承父元素的text-decoration屬性的值
2.背景屬性
div {
width: 800px;
height: 800px; # 背景大小
/*background-color: red;*/ # 背景顏色
/*background-image: url("666.png");*/ # 以圖片作為背景
/*background-repeat: no-repeat;*/ # 背景圖片不平鋪滿整個背景,正常預設平鋪滿
/*background-repeat: repeat-x;*/ # 背景圖片只在水平方向上平鋪
/*background-repeat: repeat-y;*/ # 背景圖片只在上下方向上平鋪
/*background-position: center center;*/ # 背景圖片居中
background: url("666.png") blue no-repeat center center;
# 當多個屬性名有相同的字首 那麼可以簡寫一次性完成
}
邊框
用於給標籤新增樣式
border-width: 5px; # 邊框寬度
border-style: solid; # 邊框樣式
border-color: red; # 邊框顏色
上面的可以直接簡寫成
border: 5px solid red;
# 如果只是設定其中一面的邊框的話加上方向就行了 border-left]\
畫圓(就是將邊框設定為圓形) #邊框長寬一樣則是正圓
border-radius: 50%;
display
用於控制HTML元素的顯示效果
display:none # 徹底的隱藏標籤,頁面上不會顯示標籤,也不會保留標籤的位置
起到隱藏作用的還有一個
visibility:hidden
# 可以隱藏某個元素,但隱藏的元素仍需佔用與未隱藏之前一樣的空間。也就是說,該元素雖然被隱藏了,但仍然會影響佈局
盒子模型
我們可以將標籤看成是一個盒子,標籤內的內容就是盒子內的物體
1.盒子內的物體 content(內容)
2.物體與盒子內部邊界的距離 padding(內邊距)
3.快遞盒包裝 border(邊框)
4.快遞盒與快遞盒之間的距離 margin(外邊框)
padding使用方法
padding: 10px; # 上下左右
padding: 10px 20px; # 上下 左右
padding: 10px 20px 30px; # 上 左右 下
padding: 10px 20px 30px 40px; # 上 右 下 左
margin使用方法與padding相同
針對標籤的巢狀水平方向可以居中
margin: 0 auto;
浮動
浮動是用來做頁面佈局的,使用方法就是 float:left\right
但是使用浮動帶來的影響就是會造成父標籤塌陷,這是因為浮動的元素是脫離正常文件流的
解決浮動最好的辦法就是先寫好樣式類,誰塌陷了就給誰新增該樣式類就行了
樣式類
.clearfix:after {
content: '';
display: block;
clear: both;
}
溢位
就是填充的內容超出了標籤的大小
比如是圖片超出了標籤大小,那麼我們可以讓它自適應
div img {
max-width: 100%;
} # 需要單獨寫
定位
針對標籤的定位有四種狀態
1.static靜態 標籤預設的狀態,正常狀態下無法通過定位的引數來移動
2.relative相對定位 基於標籤原來的位置
3.absolute絕對定位 基於某個定位過的父標籤做定位
4.fixed固定定位 基於瀏覽器視窗固定不動,無論視窗是否滾動都會在設定好的固定位置
z-index
用於設定物件的層疊順序
1.z-index值表示誰在誰上面,數值大的壓著數值小的
2.只有定位了的原色才能有z-index,浮動元素用不了
3.z-index是一個正整數,預設的z-index值為零,如果大家的z-index值相同,那麼誰寫在HTML後面誰就壓著別人
4.定位了的元素永遠壓著沒有定位的元素