前端基礎知識之html和css全解
阿新 • • 發佈:2020-05-31
# 前端回顧
[TOC]
前端就是展示給使用者並且與使用者進行互動的操作介面。
前端包括包括三部分:
1. html:網頁的骨架,沒有任何樣式,比較醜
2. css:相當於一些裝飾品,給骨架新增樣式。
3. js:控制網頁的動態效果。
前端也有很多框架,只需要按照固定的語法進行呼叫即可。
## 基礎知識
軟體的開發架構分為兩種:
1. CS:擁有客戶端和服務端。
2. BS:用瀏覽器代替客戶端,其本質也是BS架構,但是客戶端不需要我們自己寫。
忽略掉進行域名解析的過程,當我們在瀏覽器的視窗中輸入網址後的過程:
1. 瀏覽器向伺服器發出請求
2. 服務端接受請求
3. 服務端返回響應。
4. 瀏覽器接受響應,然後將資料按照特定的規則進行渲染,展示給使用者。
如果要想瀏覽器當做很多服務端的客戶端,那麼就需要瀏覽器熟練掌握各種各樣的服務端的規則,對於瀏覽器來說壓力很大,因此,瀏覽器決心變得傲嬌:你要是想讓我給你打工(當做客戶端),那麼你就遵守我的規則,不然的話,不好意思了,你自己去開發自己的客戶端吧。因此,產生了瀏覽器制定的協議。
### HTTP協議
首先說一下HTTP協議。
它是超文字傳輸協議,用來規定服務端和瀏覽器之間的資料互動的格式,有四大特性:
1. 基於請求響應。
2. 基於TCP\IP作用於應用層之上的協議
3. 無狀態:不儲存使用者狀態資訊。臉盲症重度患者,即使見你千百遍,依舊像是從未見。
4. 無連結/短連結:請求來就響應,響應完就結束。
既然是基於請求響應的,那肯定也都有各自的請求響應的資料格式。
下劃線
斜體
刪除線
加粗
換行
水平分割線 空格 > 大於號 < 小於號 & & ¥ ¥ © © 商標® ® ``` ```python 上述標籤在瀏覽器中的顯示所佔的位置是不一樣的,據此,對不同的標籤又進行了分類。 1. 塊級標籤:獨佔一行,不受本身文字的大小限制。 -塊級標籤可以修改長寬。 -其內部可以巢狀塊級標籤。 -只有一個比較頁數的標籤:p標籤只能內嵌行內標籤 2.行內標籤:其所佔位置大小被自身文字所決定,文字多大,佔多大。 -行內標籤不能巢狀塊級標籤 ``` #### div和span標籤 塊級標籤的典型代表就是``標籤,行內標籤代表就是``標籤,為什麼要單獨拉出來說呢?因為這兩個標籤是我們專門用來在初期構造html骨架的。在設計頁面初期,我們可以首先使用div標籤來進行整體頁面的一個規劃,然後其中的文字內容可以使用span標籤佔位。後期我們新增內容都是在div和span組成的簡易結構中進行的。 #### 特殊的屬性 1. id:該頁面不能重複,用來標識標籤唯一身份。 2. class:類似於Python的繼承,會按照class內的css樣式進行渲染標籤。 #### 常用標籤 ```html 1. img標籤:可以插入圖片 如果寬和高只定義一個的話,那麼就會等比例改變 2. a標籤:傳送門標籤 target='_self/_blank' 開啟新頁面的方式,前者表示本頁面開啟,後者是新建頁面開啟,預設前者 tip:本頁面跳轉的功能 a標籤具有錨點功能,這時候就要說到一個特殊的屬性了:id='',這個id必須是本頁面唯一,作為每個標籤的身份標識,我們可以通過查詢某標籤的id直接定位到該標籤,所以a標籤中的href屬性就可以寫為本頁面的id值,完成點選之後即跳轉到該標籤。 3. 列表標籤 列表標籤有三種,這裡只記錄一下無序列表。
html本身子代的表格是比較醜的,但是仍然可以新增一些屬性的變化使其稍微好看點。
border='數字':表格的邊框樣式
rowspan='數字':向下的單元格合併幾行
colspan='數字':向右的單元格合併幾行
```
4. 表單元素
這個表單屬性可以實現向服務端傳送資料,如果我們填寫一部分資料向後端提交,就要使用到這個表單元素。
```python
輸入文字
密碼輸入
日期輸入
單選框:從給出的選項進行選擇
多選框:從給出的選項中可以進行多選
提交按鈕,觸發提交動作
可以進行自定義功能按鈕,空白的只能點著玩
重置按鈕:重新整理本頁面
選擇檔案,可進行上傳,但有前提條件
```
**action的3種狀態:**
1. 不填:預設是向本頁面所在的url提交資料。
2. 寫全路徑:向該url提交資料。如’www.baidu.com‘。
3. 只寫路徑字尾:自動識別當前的ip和port,然後拼接。如:'/index/'
主要記得就是當在內部輸完資料準備進行提交的時候,action決定了提交的方向。
**幾個特殊狀態:**
1. checked:對於給出的選項(針對radio和check)問題,可使用這個值作為設定預設值。
2. disabled:不能獲得焦點(不能輸入)。
3. readonly:只能讀。
**上傳檔案的前提條件:**
1. 請求方式為POST
2. 必須定義`enctype='multipart/form-data'`屬性。
注意事項:
1. name屬性:資料是按k:v進行提交的,因此input內部務必填寫一個name屬性作為資料的key。
2. value屬性:針對輸入文字型別,value為輸入文字,針對按鈕類為按鈕顯示文字,針對選項類為傳送資料的鍵值對的值。
```python
select標籤:預設是單選的,下拉式選項。想要多選需新增mutiple selected為預設選中狀態
textarea標籤是獲取使用者大段文字輸入,本身是一個大的可輸入多行的文字框。
```
## 認識css
css相當於一個化妝盒,用來給html打造的東東進行華麗大變身。
既然要進行裝飾,那麼就首先要找到被裝飾的物件。
css的引入方式有幾種:
1. head內的link標籤引入外部css檔案
2. head內的style標籤內寫入css
3. 在標籤內部直接定義style='{屬性:屬性值.....}'
一般情況建議使用第一種方式,方便後期維護,第三種方式不建議大批量使用,耦合度較高。
### 選擇器
這個就很好理解,就是通過一些方法精確定位到某一個標籤。
**選擇器分類:**
```css
/*我是註釋語法:選擇器是定位某標籤,大括號內的內容是定義的css的一些樣式*/
選擇器 {屬性1:屬性值1;屬性2:屬性值2.....}
/*基本選擇器*/
/*1. id選擇器: 關鍵符號為# */
#id值 {屬性1:屬性值1;屬性2:屬性值2.....}
/*2. 類選擇器: 關鍵符號為點 */
.類 {屬性1:屬性值1;屬性2:屬性值2.....}
/*3. 元素選擇器*/
標籤名 {屬性1:屬性值1;屬性2:屬性值2.....}
/*4. 通用選擇器*/
* {屬性1:屬性值1;屬性2:屬性值2.....}
/*組合選擇器:先找到某一個確定的標籤,根據這個標籤的親戚關係進行查詢*/
後代選擇器:凡是在標籤內部的標籤都是後代 #id a {}
兒子選擇器:在標籤內部第一層級的標籤 #id>a {}
毗鄰選擇器:同級別緊挨著標籤的下一個標籤 #id+a {}
弟弟選擇器:同級別下方所有的標籤 #id~a {}
/*屬性選擇器:以[]為標識,查詢含有某屬性的標籤*/
[name] {} 含有name屬性的標籤都被選擇
[name='tom'] 含有name屬性且值為tom的所有標籤
標籤名[name='tom'] 標籤名內含有屬性為name的且值為tom的所有標籤
```
分組:多個元素樣式相同可通過逗號隔開選擇器的方式設定。
巢狀:多種選擇器巢狀使用,可以想想後代選擇器
```css
div,#d1,.c1 {} 選擇div標籤、id為d1、繼承c1類的標籤
#d1 a {} 選擇id為下的a標籤
```
**偽類選擇器**
一般在a標籤使用比較頻繁
```python
a:link {color:blue} # 未訪問連結時的顏色
a:visited {color:blue} # 訪問連結之後的顏色
a:hover {color:blue} # 滑鼠懸浮在連結時顏色
a:active {color:blue} # 滑鼠點選連結不鬆時的顏色
input:focus {color:bule} # 輸入框獲得焦點時的樣式
```
**偽元素選擇器**
```python
p:first-letter {} 設定文字首字母的字型樣式
p:after {content:'content必須定義'} 在p元素之後新增一個不可選中的內容,多用於清除浮動
p:before {content:'content必須定義'} 在p元素之前新增一個不可選中的內容,多用於清除浮動
```
**優先順序**
在標籤內部的所有標籤都會預設繼承該標籤的樣式,但是如果內部標籤也有自己的樣式,這個時候就要考慮優先順序的問題了。
選擇器的優先順序是按照權重來決定的,誰的權重高那麼就聽誰的。按照通俗的話說就是哪一個選擇器精確就聽誰的。
針對相同的選擇器:就近原則。後執行的會將前面執行的覆蓋。
針對不同的選擇器:行內選擇器》id選擇器>類選擇器>標籤選擇器。誰查詢的精度高,範圍小。就聽誰的。
## 屬性
**寬和高**
這兩個屬性是塊級標籤通用的,用來設定高和寬,行內標籤是無法生效寬屬性的,它的寬是由其本身文字內容決定
```css
width:100px; 設定寬
height:100px; 設定高
```
**字型屬性**
```css
font-family: "Microsoft Yahei", "微軟雅黑", "Arial";字型的版式,前面不能使用就用備胎
font-size:10px 字型的大小
font-weight:250px 字型的粗細
color:red 顏色的英文
#abc456 16進位制的6位數
rgb(111,222,255) 三基色。範圍0~255
rgba(111,222,255,0.5) 三基色加透明度,透明度範圍0~1
```
**文字樣式屬性**
```css
text-align:left/right/center/justify 水平對齊方式
text-decoration:none 無樣式,常用語去掉a標籤預設的下劃線
underline 文字下的一條線
overline 文字上的一條線
line-through 穿過文字的一條線
text-indent:2em 空兩個字元大小
```
**背景屬性**
```css
background-color:white 背景顏色
background-image:url('') 背景圖片
background-repead:repead 預設圖片會鋪滿整個網頁
no-repead 背景圖片不平鋪
repead-x 水平平鋪
repead-y 垂直平鋪
background-position:center center 確定背景位置
background-attachment:fixed 背景不會隨著文件的向下移動而滾動
對於上述都是以同樣開頭的屬性是支援簡寫的
background:White url() no-repead center center
```
**邊框**
```scss
可以設定整體的邊框樣式,也可單獨設定邊框的樣式,例如:border-left-width
border-width:10px; 邊框寬
border-style:solid/none/dotted/dashed; 邊框的樣式
border-color:red; 邊框的顏色
簡寫:border:10px solid red;
border-radius:50% 可以設定為圓,半徑為長與寬的一半
```
**display屬性**
```css
display:none; 文件中元素存在,但是不顯示
block; 將標籤設定為塊級標籤
inline; 將標籤設定為行內標籤
inline-block; 標籤可以在一行,且可以設定寬和高
```
**css盒子模型**
```css
margin:用於控制元素周圍空間的間隔,通俗點就是與鄰居標籤的距離
border:本身邊框
padding:標籤內部內容與邊框的鉅鹿
content:盒子的內容
margin-top:10px;
margin-right:10px;
margin-bottom:10px;
margin-left:10px;
簡寫:margin:10px 10px 10px 10px ;
margin:0 auto; 水平居中
padding方法和margin相似
```
**float浮動**
假設我們看到的頁面是一個平面的話,那麼浮動就會讓元素從平面升到空中,任何元素都可以浮動,浮動之後就會自動成為塊級元素,只可以向左或向右浮動,知道碰到邊框為止。
注意:浮動有可能導致父標籤塌陷的問題
```css
float:right 向左浮動
float:left 向右浮動
```
**clear清除浮動**
在clear規定的屬性的某一側是不允許有浮動元素的。
```css
clear:left; 該標籤的左側是不能有浮動元素的
clear:right; 該標籤的右側不能有浮動元素
clear:both; 兩個均不能出現浮動元素
清除浮動的影響,除了使用clear還有兩種方式:
1.自己新增一個有高度的div。
2.通用的解決方式是繼承一個自定義的類clearfix,
.clearfix:after {
content:'';
display:block;
clear:both;
}
```
**溢位屬性overflow**
```css
overflow:visible; 多出內容預設可見,在框外可見
overfloe:hidden; 多出部分在框外不可見
overflow:scroll; 加一個滾動條
overflow:auto; 內容被修剪的話,就會顯示滾動條
最佳案例:原型頭像的設定。
```
**position定位**
```css
定位分為四種:
position:static; 預設值,沒有定位過。無法作為絕對定位的參照物
position:relative; 相對定位。以自己原始位置為參照物定位
position:absolute; 絕對定位。相對定位過的父元素為原點定位
position:fixed; 固定定位。固定在某一個位置且不會改變,原點是基於瀏覽器視窗
```
**驗證浮動和定位是否脫離文件流(原來的位置是否儲存)**
不脫離文件流:相對定位
脫離文件流:浮動、相對定位、固定定位
**z-index模態框**
是設定物件的層疊順序,相當於在平面的文件上,又加了一個z軸,而z-index就是設定z的高度。值高的就會壓著值低的,導致值低的元素會被遮擋。
只能針對已經定位過的元素進行設定,同時,比較數值的時候是看父元素的z-index。
**opacity透明度**
定義透明效果,之前在顏色中rgba()也有一個透明度,但是隻能針對顏色,而這個透明度則是針對元素。取值範圍是0~1之間
請求資料格式 = 請求首行 + 請求頭 + 空行 + [請求體]
```python 1. 請求首行:當前請求方式 url和HTTP版本號,如 GET /index/ HTTP/1.1 當前請求方式在HTTP/1.1中有8種,只學了get和post最基本的請求方式。 url:統一資源定位符,可以理解為網址 get:請求指定的頁面,要求服務端將請求的url頁面在響應的時候返回。地址中?後可新增傳送資料,但是一般只能傳送1024個字元,不能太大。 post:瀏覽器可以通過post請求將大量資料傳送給服務端,無大小限制。 2. 請求頭:主要由大量鍵值對組成,包含客戶端的一些請求資訊 如:User-Agent:瀏覽器型別。 3. 空行 最後一個請求頭之後使一個空行,傳送回車符和換行符,主要是作為標識,告訴服務端請求頭結束了 4. 請求體:主要在post中使用,get請求沒有。一般post適用於請求展示資料時候使用 ``` 響應資料格式 = 響應首行 + 響應頭 + 空行 + 響應體。 ```python 1. 響應首行:伺服器HTTP協議版本 響應狀態碼 狀態碼的文字描述,例:HTTP/1.1 200 OK 狀態碼是由三位數字組成的,代表某些固定含義 1XX:表示請求已被服務端接受,繼續處理。 2XX:請求已被成功接受理解。 3XX:重定向,要完成請求需要完成某些前置條件 4XX:客戶端錯誤,請求有錯誤,如資源不存在(404)等等 5XX:服務端炸了,服務端著火了等等,就是服務端不能工作了 2. 響應頭:大量鍵值對 3. 空行 4. 響應體:返回的是服務端返回的資料。 ``` ## 認識HTML HTML是一種用於建立網頁的標記語言,並不是程式語言。本質就是瀏覽器識別的格式,我們按照該格式書寫,然後瀏覽器能認識並加以渲染,達到我們想要的效果。 注意:不同的瀏覽器對相同的標籤有不一樣的認識,這裡是瀏覽器的相容問題。 #### HTML組成 ```python HTML主要是由4部分組成: 1.:宣告為html5的文件 2.:是文件的開始和結束標誌。其餘三部分也是在這個標籤內。 3.:內部資料不會再頁面上展示,只是定義一些配置讓瀏覽器識別。 4::被瀏覽器渲染給使用者看的資料內容。 其實1和2是第一層結構,而3和4是在2內部定義的。 結構如下: ``` #### HTML標籤 標籤代表的某些固定的含義,像樂高積木一樣,把這些各種各樣的積木堆起來,就能完成一個傑出的作品。 按照標籤是否是單身可分為以下兩種: 1. 單標籤:語法為`<標籤名 屬性1=值1 屬性2=值2 ...../>` 2. 雙標籤:語法為`<標籤名 屬性1=值1 屬性2=值2 .....>前面表開始,中間是內容,後邊表結束` 一些常見的HTML標籤 ```html 首先是註釋: 引入外部css檔案 ``` ```html1級標題 改變數字可以進行1~6級標題的替換
段落
換行
水平分割線 空格 > 大於號 < 小於號 & & ¥ ¥ © © 商標® ® ``` ```python 上述標籤在瀏覽器中的顯示所佔的位置是不一樣的,據此,對不同的標籤又進行了分類。 1. 塊級標籤:獨佔一行,不受本身文字的大小限制。 -塊級標籤可以修改長寬。 -其內部可以巢狀塊級標籤。 -只有一個比較頁數的標籤:p標籤只能內嵌行內標籤 2.行內標籤:其所佔位置大小被自身文字所決定,文字多大,佔多大。 -行內標籤不能巢狀塊級標籤 ``` #### div和span標籤 塊級標籤的典型代表就是``標籤,行內標籤代表就是``標籤,為什麼要單獨拉出來說呢?因為這兩個標籤是我們專門用來在初期構造html骨架的。在設計頁面初期,我們可以首先使用div標籤來進行整體頁面的一個規劃,然後其中的文字內容可以使用span標籤佔位。後期我們新增內容都是在div和span組成的簡易結構中進行的。 #### 特殊的屬性 1. id:該頁面不能重複,用來標識標籤唯一身份。 2. class:類似於Python的繼承,會按照class內的css樣式進行渲染標籤。 #### 常用標籤 ```html 1. img標籤:可以插入圖片 如果寬和高只定義一個的話,那麼就會等比例改變 2. a標籤:傳送門標籤 target='_self/_blank' 開啟新頁面的方式,前者表示本頁面開啟,後者是新建頁面開啟,預設前者 tip:本頁面跳轉的功能 a標籤具有錨點功能,這時候就要說到一個特殊的屬性了:id='',這個id必須是本頁面唯一,作為每個標籤的身份標識,我們可以通過查詢某標籤的id直接定位到該標籤,所以a標籤中的href屬性就可以寫為本頁面的id值,完成點選之後即跳轉到該標籤。 3. 列表標籤 列表標籤有三種,這裡只記錄一下無序列表。
- 預設是帶小黑點的子集排列
- 如下展示
- 無序列表就是這樣
- 可以有多行
加粗的欄位1 | 欄位2 | 欄位3 |
---|---|---|
一行資料的第一個欄位值 | 一行資料的第二個欄位值 | 一行資料的第三個欄位值 |