[TOC] 1. CSS基本語法 CSS是層疊樣式表 1.1. CSS基本定義 CSS的定義方法時: 選擇器是將樣式和頁面元素關聯起來的名稱 屬性是希望設置的樣式屬性,每個屬性有一個或多個值 CSS引入頁面的方法 1. 在HTML中通過外聯方法 2. 內聯式,通過標簽的style屬性,直接在標簽上寫 ...
目錄
1. CSS基本語法
CSS是層疊樣式表
1.1. CSS基本定義
CSS的定義方法時:
選擇器{
屬性: 值;
屬性: 值;
}
div{
width:100px;
height:100px;
background:gold;
}
- 選擇器是將樣式和頁面元素關聯起來的名稱
- 屬性是希望設置的樣式屬性,每個屬性有一個或多個值
CSS引入頁面的方法
- 在HTML中通過外聯方法
<link rel = "stylesheet" type="text/css" href="css/style.css">
- 內聯式,通過標簽的style屬性,直接在標簽上寫樣式
<div style="width: 100px; height: 100px">..</div>
- 嵌入式: 通過style標簽
<style type="text/css">
div{ width:100px; height:100px; background:red }
......
</style>
1.2. CSS佈局屬性
屬性 | 說明 |
---|---|
width | 寬度 |
height | 高度 |
background-color | 背景顏色 |
border | border: 1px solid gold; 設置元素邊框 |
padding | 設置內容和元素邊框距離 |
margin | 元素和容器的距離, margin: 10px auto 0 居中 |
float | 設置元素浮動 |
1.3. CSS文本常用屬性
常用的應用文本的css樣式
屬性 | 說明 | 值 |
---|---|---|
color |
文本顏色 | 顏色值 |
font-size |
文字大小 | px值 |
font-family |
文字字體 | 字體名稱 |
font-style |
字體是否傾斜 | normal :不傾斜italic :傾斜 |
font-weight |
字體是否加粗 | normal :不加粗bold :加粗 |
font |
同時設置上面的屬性 | 加粗 字型大小 /行高 字體 |
line-height |
文字的行高 | px值 |
text-decoration |
文字的下劃線 | none去除下劃線 |
text-indent |
文字的首行縮進 | 首行縮進24px |
text-align |
文字的水平對齊方式 | center字體居中 |
2.CSS選擇器
2.1. 標簽選擇器
- 直接通過html中的標簽名字來選擇對於的元素
- 選擇面太廣,很少用
/* 直接選擇html中所有的div元素 */
div{
color: red;
}
2.2. id選擇器
- 在html中設置一個id,在css中引用設置它
- id只能是一個全局唯一樣式
- 一次只能選擇一個元素
- 很少用
#box{
color: pink;
}
<div id="box">666</div>
2.3. 類選擇器
- 為了補償id選擇器的缺點,可以一下子設置多個元素樣式
.lei{
color: red;
}
.indent{
text-indent: 20px;
}
<div class="lei indent">1</div>
<div id = "box" class="lei">2</div>
<div class="lei">3</div>
<div class="lei">4</div>
<div class="lei">5</div>
2.4. 層級選擇器
- 主要用於選擇父元素下的子元素,或者子元素下麵的子元素,可與標簽元素結合使用
.list{
height: 30px;
}
/* 這是一個兩層的層級選擇器 */
.list a{
text-decoration: none;
color: #333;
}
.list .num{
color: #333;
}
<ul class="list">
<li><a href = "">新聞標題</a></li>
<li class="num"><a href = "">新聞標題</a></li>
<li><a href = "">新聞標題</a></li>
<li><a href = "">新聞標題</a></li>
</ul>
2.5.組選擇器
- 多個選擇器,有相同的樣式設置,可使用組合選擇器
/* 設置3個類的公共屬性 */
.box1,.box2,.box3{
font-size: 14px;
text-indent: 28px;
}
/* 然後在使用類選擇器個性化 */
.box1{
color: red;
}
.box2{
color: green;
}
.box3{
color: orange;
}
/* 更多設置形式 */
/* 匹配所有的p,b,i,span元素 */
p,b,i,span {
color: green;
}
<div class="box1">3</div>
<div class="box2">4</div>
<div class="box3">5</div>
2.6. 偽類和偽元素選擇器
- 常用的偽類選擇器為hover,表示滑鼠懸停在元素上時的狀態
/* 滑鼠放到list類下的a時,會變色 */
.list a:hover{
color: gold;
}
- 偽元素選擇器有before和after,它們可通過樣式在元素中插入內容
/* 塊級首行 */
/* 在p,div,body等塊級元素才有效果 */
::first-line{
color: red;
}
/* 塊級首字母 */
::first-letter{
color: red;
}
/* 文本前插入內容 */
/* 變成:點擊百度 */
a::before{
content: '點擊-';
}
/* 文本後插入內容 */
/* 百度搜索 */
a::after{
content: '搜索';
}
3. 塊元素、內聯元素和內聯塊元素
3.1. 塊元素(行元素)
- 塊元素,也稱為行元素,比如
div,p,ul,li,h1-h6,dl,dt,dd
等都是塊元素 - 它的行為有:
- 支持全部的樣式
- 如果沒有設置寬度,預設寬度是父級寬度的100%
- 盒子占據一行,即使設置了寬度
<style type="text/css">
body{
margin: 0;
}
div{
background-color: gold;
text-align: center;
margin: 10px 0;
}
.box2{
width: 200px;
}
.box3{
width: 300px;
}
</style>
...
<div class="">這是一個div元素</div>
<div class="box2">這是二個div元素</div>
<div class="box3">這是三個div元素</div>
3.2. 內聯元素(行內元素)
- 內聯元素,也是行內元素,佈局中常用的有
a, span,em,b,strong,i
等都是行內元素 - 他們在佈局中的行為是:
- 支持部分樣式(不支持寬,高,margin上下,padding上下)
- 寬高由內容決定
- 盒子擠在一行
- 代碼換行,盒子之間會產生間距
- 子元素是內聯元素,父元素可以用
text-align
屬性設置子元素水平對齊方式,用line-height
設置垂直對齊方式
<style type="text/css">
body{
margin: 0;
}
.con{
width: 500px;
height: 300px;
border: 1px solid #333;
margin: 50px auto 0;
}
.con a{
background-color: gold;
width: 500px;
height: 300px;
margin-left: 30px;
margin-top: 50px;
}
</style>
...
<div class="con">
<a href="#">這是一個a標簽</a>
<a href="#">這是二個a標簽</a>
</div>
解決內聯元素之間的間隔問題
- 去掉內聯元素之間的換行
- 將內聯元素的父級設置font-size為0,然後再設置自身的font-size
<!--方法1:-->
<a href="#">這是一個a標簽</a><a href="#">這是二個a標簽</a>
<!--方法2:-->
<style type="text/css">
body{
margin: 0;
}
.con{
width: 500px;
height: 300px;
border: 1px solid #333;
margin: 50px auto 0;
font-size: 0;
}
.con a{
background-color: gold;
width: 500px;
height: 300px;
margin-left: 30px;
margin-top: 50px;
font-size: 20px;
}
</style>
3.3. 內聯塊元素
- 結合了塊元素和內元素的優點,通過
display
轉換 - 他們的行為是:
- 支持全部樣式
- 如果沒有設置寬高,由內容決定
- 盒子併在一行
- 代碼換行,由間距
子元素是內聯塊元素,父元素可以通過text-align設置水平對齊方式,用line-height設置垂直對齊
display屬性
屬性 | 說明 |
---|---|
none | 隱藏不占用位置 |
block | 塊元素 |
inline | 內聯元素 |
inline-block | 內聯塊元素 |
<style type="text/css">
body{
margin: 0;
}
.con{
width: 500px;
height: 300px;
border: 1px solid #333;
margin: 50px auto 0;
}
.con a{
background-color: gold;
width: 100px;
height: 50px;
display: inline-block;
}
</style>
<div class="con">
<a href="#">這是一個a標簽</a>
<a href="#">這是二個a標簽</a>
</div>
3.4. 實例: 設置導航欄
<style type="text/css">
body{
margin: 0;
}
.menu{
width: 694px;
height: 50px;
margin: 50px auto 0;
list-style: none;
padding: 0;
font-size: 0;
}
.menu li{
display: inline-block;
width: 98px;
height: 48px;
border: 1px solid gold;
font-size: 16px;
margin-right: -1px;
text-align: center;
line-height: 48px;
}
.menu li:hover{
background-color: orange;
}
.menu a{
font-family: 'Microsoft Yahei';
color: pink;
text-decoration: none;
}
.menu a:hover{
color: red;
}
</style>
</head>
<body>
<ul class="menu">
<li><a href="#">首頁</a></li>
<li><a href="#">公司簡介</a></li>
<li><a href="#">公司簡介</a></li>
<li><a href="#">公司簡介</a></li>
<li><a href="#">公司簡介</a></li>
<li><a href="#">公司簡介</a></li>
<li><a href="#">公司簡介</a></li>
</ul>
</body>
4.CSS表格
.goods{
/* 通用屬性 */
width: 300px;
height: 300px;
text-align: center;
/* 設置的單元格相鄰邊是否被合併
separate: 單元格邊框獨立,預設
collapse: 邊框合併(變成實心的實現) */
border-collapse: collapse;
/* 設置單元格邊框邊距,只有在border-collapse為separate情況下才有用 */
border-spacing: 10px;
/* 標題方位
top, bottom */
caption-side: top;
/* 空內容單元格的是否顯示,hide */
empty-cells: hide;
/* 表格的排版方式
auto: 內容過長的時候,會拉伸整個單元格,擠壓其他單元格
fixed: 內容過長時,不會拉伸,會換行處理 */
table-layout: fixed;
}
/* 設置表頭的背景顏色 */
.goods th{
background-color: green;
color: #ffffff;
}
<link rel="stylesheet" type="text/css" href="style.css">
<table class = "goods" border="1">
<caption>人員表格</caption>
<tr>
<th>姓名</th>
<th>性別</th>
<th>年齡</th>
</tr>
<tr>
<td>張三</td>
<td>男</td>
<td>25</td>
</tr>
<tr>
<td>李四</td>
<td>女</td>
<td>34</td>
</tr>
<tr>
<td>王五</td>
<td>男</td>
<td>43</td>
</tr>
5.盒模型
5.1. 什麼是盒子模型
元素在頁面中顯示成一個方塊,類似一個盒子,CSS盒子模型就是現實盒子的比喻,幫組我們設置元素對應的樣式
- 盒子的邊框:
border
- 盒子內的內容和邊框的間距:
padding
- 盒子和盒子之間的間距:
margin
5.2設置邊框
border
:長度值或者百分比border-top/bottom
border-left/right
.box{
width: 200px;
height: 100px;
background-color: red;
/* 設置頂部邊框的寬度,顏色 */
/* border-top-width: 10px;
border-top-color: #000; */
/* 設置線的樣式,實線solid, 虛線dashed, 點線dotted */
/* border-top-style: solid; */
/* 全部一下子來寫 */
/* border-top: 10px solid #000; */
border: 10px solid orange;
}
<div class="box"></div>
5.3. 盒子內邊距
padding
:長度值或者百分比padding-top/bottom
padding-left/right
.box{
padding: 20px;
/* 上,右,下,左 */
/* padding: 10px 20px, 10px, 20px; */
}
5.4. 盒子外邊距
根據body文檔的左上角為起點
margin
margin-top/bottom
margin-left/right
註意
- 當兩個垂直外邊距相遇時,它們將形成一個新的外邊距,這個新的外邊距長度等於兩個發生合併的外邊距的高度中的最大值,解決方法是
- 只設置
margin-top
,不設置margin-bottom
- 將元素浮動或者定位
- 盒子水平居中方法 :使用
auto
平分水平距離
.box{
margin: 100px auto;
}
5.5. 盒子尺寸大小
盒子寬度 = width + 左右padding值 + 左右的border值
盒子高度 = height + 上下的padding值+ 上下的border值
.box1,.box2,.box3{
width: 50px;
height: 50px;
background-color: gold;
margin: 20px;
}
.box2,.box3{
border: 50px solid #000;
}
.box3{
padding: 50px;
}
<div class="box1">1</div>
<div class="box2">2</div>
<div class="box3">3</div>
如何解決盒子尺寸動態變化的問題?
- 使用
indent
: 首行縮進 - 文本垂直居中
line-height
- 文本水平居中
text-align
- 盒子水平居中
margin: 10px auto;
假設設置一個高寬45*400px的盒子
.box2{
width: 400px;
height: 50px;
border-top: 1px solid #f00;
border-bottom: 3px solid #666;
font-size: 20px;
font-family: "Microsoft Yahei";
text-indent: 15px;
/* 讓文字居中 */
line-height: 50px;
}
5.6. 盒子元素溢出
5.6.1. margin-top塌陷
在兩個盒子嵌套的時候,內部的盒子設置的margin-top會加到外部的盒子上(只有外部的盒子有margin-top),導致內部的盒子margin-top
設置失敗,解決方法如下:
- 外部盒子設置一個邊框
- 外部盒子設置
overflow: hidden
- 外部盒子使用偽元素類(常用)
/* 類似於加邊框 */
.clearfix:before{
content: "";
display: table;
}
/* <div class= "non clearfix"></div> */
5.6.2. 元素溢出
當子元素的尺寸超出父元素的尺寸時, 需要設置父元素顯示溢出的子元素的方式,設置的方法通過overflow
屬性設置
屬性值 | 說明 |
---|---|
visible |
內容不會被修剪,會呈現在元素框外部,預設 |
hidden |
內容會被修剪,並且其他內容不可見,此屬性還有清除浮動、清除margin-top 塌陷的功能 |
scroll |
內容會被修剪,通過滾動條顯示 |
auto |
如果內容被修剪,就通過滾動條顯示 |
inherit |
規定應該從父元素繼承overflow 屬性的值 |
什麼是溢出
<div class="con">
<div class="box">
</div>
</div>
.con{
width: 500px;
height: 300px;
border: 1px solid #333;
margin: 50px auto;
}
.box{
width: 400px;
height: 600px;
background-color: gold;
}
以下這個圖就是溢出
設置溢出方法
.con{
width: 500px;
height: 300px;
border: 1px solid #333;
margin: 50px auto;
overflow: scroll;
}
6. CSS浮動
文檔流
文檔流,是指按照html標簽編寫的順序一次從上到下,從左到右排列,塊元素占一行,行內元素在一行只能從左到右排列,先寫的先排,後寫的後排,每個盒子都占據自己的位置, 浮動,定位可以打破這種規律
6.1. 浮動的特性
- 浮動元素有左浮動(
float:left
)和右浮動(float:right
) - 浮動的元素會向左或者向右浮動,直到碰到了父元素邊界,浮動元素,或者未浮動元素才會停下來
- 相鄰浮動的塊元素可以併在一行,超出父級寬度就換行
- 浮動會讓行內元素或者塊元素自動轉為行內塊元素
- 浮動元素後面沒有浮動的元素會占據浮動元素的位置,沒有浮動的元素內的文字會避開浮動的元素,形成文字饒圖的效果--也就是說浮動元素像是浮起來一樣,後面的元素就占據了浮動起來空的位置,但是其中的文字會避開浮動的元素 浮動相當於飄起來了,到了天上,空出來的位置就會被占據(但是文字不會,從而形成文字饒圖)
- 父元素內整體浮動的元素無法撐開父類,需要清除浮動
- 浮動元素之間沒有垂直
margin
的合併
浮動特性1-5
/* 碰到父元素邊界停下 */
.box1{
float: left;
}
/* 碰到父元素邊界停下 */
.box2{
float: right;
}
/* 碰到box1浮動元素邊界停下 */
.box3{
float: left;
}
6.2. 清除浮動
- 父級上增加屬性
overflow: hidden
(在定位的時候會有問題 ) - 在最後一個子元素的後面加入空的
div
,給它樣式屬性clear: both
(不推薦) - 使用成熟的清浮動樣式類(推薦)
/* 既可以清除margin-top的bug,也可以清除浮動 */
.clearfix:after, .clearfix:before{
content: "";
display: table;
}
.clearfix:after{
clear: both;
}
.clearfix{
zoom: 1;
}
清除浮動的用法(在父級上添加)
<div class = "con clearfix">
7. 定位
7.1. 定位簡介
可以使用CSS的position屬性來設置元素的定位類型,position的設置項如下:
relative
: 相對定位元素,元素所占的文檔流位置不變,元素本身相對文檔流進行位置偏移absolute
: 絕對定位元素,元素脫離文檔流,不占據文檔流的位置,可以理解為漂浮在文檔流的上方,相對於上一個設置了相對或者絕對或者固定定位的父級元素來進行定位,如果找不到,就相當於body元素定位fixed
: 固定定位元素,元素脫離文檔流,不占據文檔流的位置,可以理解為為漂浮在文檔流的上方,當有滾動條的時候,元素會跟隨滾動條一直顯示static
: 預設值,沒有定位,元素出現在正常的文檔流中,相當於取消定位屬性或者不設置定位屬性inherit
: 從父元素繼承position
的值
7.1.1. 相對定位
.con{
width: 400px;
height: 400px;
border: 1px solid #000;
margin: 100px auto 0;
}
.con div{
width: 200px;
height: 100px;
margin: 20px;
background-color: gold;
font-size: 40px;
text-align: center;
line-height: 100px;
}
.box01{
position: relative;
top: 80px;
left: 50px;
background-color: green;
}
7.1.2. 絕對定位
.box01{
position: absolute;
top: 50px;
left: 50px;
background-color: green;
}
我們也可把外部容器設置為定位的起點
.con{
width: 400px;
height: 400px;
border: 1px solid #000;
margin: 100px auto 0;
position: relative;
}
.box01{
position: absolute;
top: 50px;
left: 50px;
background-color: green;
}
7.1.3. 固定定位
- 跟隨滾動框走
.box01{
position: fixed;
top: 50px;
left: 50px;
background-color: green;
}
7.2. 定位元素的特性
絕對定位和固定定位的塊元素和行內元素會自動轉化為行內塊元素
7.3. 定位元素層級
定位元素是浮動的正常的文檔流之上的,可以用z-index
屬性來設置元素的層級
7.4. 典型的 定位佈局
- 固定在頂部的菜單
- 水平垂直居中的彈框
- 固定的側邊的工具欄
- 固定在底部的按鈕
7.5. 浮動定位的範例
1. 導航欄
<ul class="menu">
<li class="active"><a href="">首 頁</a></li>
<li><a href="">網站建設</a></li>
<li><a href="">網站建設</a></li>
<li><a href="">網站建設</a></li>
<li><a href="">網站建設</a></li>
<li><a href="">網站建設</a></li>
<li><a href="">網站建設</a></li>
<li class="new"></li>
</ul>
.menu{
width: 950px;
height: 40px;
margin: 50px auto 0;
list-style: none;
background-color: #55a8ea;
padding: 0;
position: relative;
}
.menu li{
float: left;
width: 100px;
height: 40px;
text-align: center;
line-height: 40px;
}
.menu li a{
font-size: 14px;
font-family: 'Microsoft Yahei';
color: #fff;
text-decoration: none;
}
.menu .active{
background-color: #00619f;
}
.menu li:hover{
background-color: #00619f;
}
.menu .new{
width: 30px;
height: 30px;
background: url(new.png) no-repeat;
position: absolute;
left: 433px;
top: -20px;
}
.menu .new:hover{
background: url(new.png) no-repeat;
}
2. 新聞列表
<div class="news_list_con">
<h3><span>新聞標題</span></h3>
<ul>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
<li><a href="">特征佈局:新聞列表所需要的至少</a><span>2016-12-25</span></li>
</ul>
</div>
.news_list_con{
width: 600px;
height: 290px;
border: 1px solid #ddd;
margin: 50px auto 0;
overflow: hidden;
}
.news_list_con h3{
height: 50px;
width: 560px;
border-bottom: 1px solid #ddd;
margin: 0px auto;
}
.news_list_con h3 span{
display: inline-block;
height: 50px;
border-bottom: 2px solid red;
font-size: 18px;
line-height: 50px;
font-family: 'Microsoft Yahei';
padding: 0 15px;
}
.news_list_con ul{
list-style: none;
padding: 0;
width: 560px;
height: 238px;
margin: 7px auto 0;
}
.news_list_con ul li{
height: 38px;
border-bottom: 1px solid #ddd;
}
.news_list_con ul a{
float: left;
height: 38px;
line-height: 38px;
font-size: 14px;
font-family: 'Microsoft Yahei';
text-decoration: none;
color: #000;
}
.news_list_con ul a:before{
content: ".";
}
.news_list_con ul a:hover{
color: red;
}
.news_list_con ul span{
float: right;
height: 38px;
line-height: 38px;
font-size: 14px;
font-family: 'Microsoft Yahei';
color: #000;
}
8. CSS背景
頁面上放圖片的方法
方法 | 說明 |
---|---|
直接通過src | 占用空間 |
通過backgound-image |
圖片不占用空間,只是作為背景,可以在上面寫字.. |
backgound-image屬性解釋
background
是CSS中很重要的一個屬性,它複製給盒子設置背景圖片和背景顏色的,background
是一個複合屬性,他可以分解成如下幾個設置項
backgound-color
: 設置背景顏色image postion color repeat
backgound-image
: 設置背景圖片地址backgound-repeat
: 設置背景圖片如何重覆平鋪repeat(default),repeat-X,repeat-Y, no-repeat
backgound-position
: 設置背景圖片位置水平(left/right/center) 垂直(top/bottom/center)
同時設置:必須在no-repeat
情況下使用水平偏移(10px) 垂直偏移(0px)
:參考點是 父元素的左上角
backgound-attachment
: 設置背景圖片是固定還是隨著頁面滾動條滾動fixed
:不隨著滾動
.box{
width: 200px;
height: 200px;
border: 1px solid red;
background-image: url(news.png);
}