天天看點

CSS學習總結ing

css選擇器:

标簽選擇器、類選擇器(class>>>黑點)、id選擇器(#)、通配符選擇器(*)

注意:通配符選擇器代表頁面所有的的标簽名,可以去掉浏覽器自帶的間距,如下代碼所示:

*{
    margin:0;   /*外間距*/
    padding:0;  /*内間距*/
}
           

并集選擇器

div,p,h3{
	/*三個标簽顯示相同的屬性,如三個都顯示背景顔色為紅色*/    
}
           

交集選擇器

精準的找到要渲染的标簽,在類選擇器和id選擇器前添加需要渲染的标簽

p.javayu{
    /*類選擇器*/
}
-----------------
p#javayu{
    /*id選擇器*/
}
           

派生(後代)選擇器

ol li strong{
    /*後代選擇器:空格隔開*/
    /*注意: 層級的嵌套最好不要超過3個以上,隻需要保留一些關鍵節點*/
}
------------
ol li{
    list-style: none;  /*去掉ol、li前面的小黑點*/
}
           

子代選擇器

div>p{
    /*隻作用于兒子這一代*/
}

<div>
  <p></p>
  <p></p>
</div>
------------
<mark></mark>  /*自帶黃色*/
           

相鄰兄弟選擇器

strong+span{
    /*隻有3起作用 */
    /*加号前面的選擇器隻是用來作為查找兄弟的參照标簽,她不參與樣式的影響*/
    /*尋找strong标簽的兄弟,而且是要緊挨着的兄弟才可以*/
    /* ~ : 所有兄弟》》》3、4起作用 */
}

<div>
   <span>1</span>
   <strong>2</strong>
   <span>3</span>
   <span>4</span>
</div>
           

屬性選擇器

[za]{
    /*屬性:分為标簽天生自帶 和 我們自定義的标簽屬性*/
    /* 符号:[屬性名]*/
}

<div za="as"></div>
-----------------------
[za="as1"]{
    /*精準找到哪一個标簽渲染*/
    /* 符号:[屬性名="屬性值"]*/
}

<div za="as"></div>
<div za="as1"></div>
           

僞類選擇器

CSS學習總結ing
input:blur{
    /*失去焦點*/
}
           

新增

ul li:not(:last-child){
    /* :last-child 最後一個子元素*/
    /*除了做最後一個 li 沒有右邊框線,其餘都有*/
    border-right:10px solid #000
}

<ul>
   <li></li>
   <li></li>
   <li></li>
</ul>

-----------------------------------
:nth-child(n)   >>n表示具體的第幾個,n可以使odd/2n+1奇數、even/2n偶數
:only-child     >>僅僅、唯一隻有一個起作用
:nth-last-child(n) >>倒數第幾個元素起作用
:first-of-type  >>第一同級兄弟元素起作用
:last-of-type  >>最後一個同級兄弟元素起作用
:only-of-type  >>隻有一個同級兄弟元素起作用
:nth-of-type(n)  >>第幾個同級兄弟元素起作用
:nth-last-of-type(n)  >>倒數第幾個同級兄弟元素起作用
:empty   >>空内容
           

僞元素選擇器

:first-line   >>第一行文字内容起作用
:first-letter   >>第一文字起作用
:before       >>元素之前添加内容
:after       >>元素之後添加内容
--------------
li{
    list-style:none;
    display: inline-block;  /*行内塊*/
}
/* 添加分割線*/
li:after{
    /*display: inline-block;>>不獨占一行*/
    /*確定是一個塊>>>隻要設定寬度不起作用,就要加 “塊”display: block;*/
    display: inline-block;    /*display: block; >>獨占一行 */
    content: "";     /* 這個屬性不能省略,如果沒有,則 before/after後的渲染不會起作用*/
    
    width:2px;
    heigh:20px;
    margin: 0 10px;        /* 上下0,左右10*/
    background-color: #000;
    vertical-align: bottom; /* 基線對齊 */
}

<li></li>
<li></li>
           

css權重及規則

标簽選擇器          權重
div                1
---------------------------
class/類選擇器      權重
.right             10
---------------------------
id選擇器           權重
#right            100
---------------------------
通配符選擇器        權重
*                  0-1
---------------------------
後代、子代、交集、并集、相鄰兄弟、兄弟->>>>>權重:每個單獨的選擇器的權重相加之和
注意:1、權重如果相等,遵循就近原則,下面的會覆寫上面的渲染
2、權重相等,不遵循就近原則》》》》使用  !important-》》(權重1000),比ID大
3、權重大小:!important > id > class > 标簽 > *
           

不可以繼承的屬性

1、display:inline、 block、inline-block、table-cell、none

2、文本類:盒子模型、背景類、浮動類、定位類

可以繼承屬性

1、字型系列的樣式屬性

2、文本系列的樣式屬性:text-align、line-height、text-indent

盒子模型

盒子寬度和高度機關:

1、px : 像素寫死

2、%: 動态計算的機關(自适應,響應式)

1、橫向滾動條自适應
.banner img{
    width: 100%;
}
           

内邊距padding

padding:10px;   /*上、右、下、左 = 10px*/   
padding:10px 20px;   /*上、下= 10; 左、右 = 20px*/ 
padding:10px 20px 30px;   /*上=10px; 左、右 = 20px; 下= 30px*/ 
padding:10px 20px 30px 40px;  /*上右下左*/
           

注意:内邊距會影響盒子在浏覽器中的實際寬度和高度的大小

邊框border

border: 邊框的寬度 邊框線的類型 邊框線的顔色

邊框線的類型:solid 實線、dashed 虛線、dotted 點狀線

注意:border會影響實際的盒子的寬度和高度的大小。

/*如果沒有指明方向,表示四個方向都有邊框線而且邊框相等*/
隻需要上邊框線:  
border-top: 10px solid #000;
-----------------------------
去掉邊框線:
border:0;

注意:如果border屬性隻有邊框寬度,沒有邊框線的類型和顔色,導緻border屬性失效。
如-》  border-top: 10px;  ->上邊框失效為0
           
/*三角圖示的實作*/
.arrow{
    /*三角形的大小由寬高控制,三角形的粗細由border邊框線的寬度控制*/
    width: 200px;
    height: 200px;
    /*整體下移*/
    margin-top: 50px;
    border-top: 10px solid #000;
    border-left: 10px solid #000;
    /*rotate旋轉角度>>deg角度放入機關*/
    transform: rotate(45deg);
}

--------------------------------
/*三角形實作*/
.triangle{
    width: 0px;
    height: 0px;
    border-width: 100px;   /*控制三角形的大小*/
    border-style: solid;
    border-color: red transparent transparent transparent;  /*transparent透明*/
}

--------------------------------
border-radius: 40px;   /*控制圓角*/
           

外邊距margin

/*margin跟padding内邊距的方位值和取值情況一樣》》》上、右、下、左*/
注意:并列兩個盒子,一個盒子,有上邊距,另外一個有下邊距,會出現margin外邊距的重疊問題=》最終的邊距》》去最大值

---------------------------------
/*margin相容問題的處理: 大盒子裡嵌套小盒子>>>此時給小盒子加margin-top,不但沒有實作和大盒子的間距,反而傳遞到大盒子上,導緻整體下移*/
1、加在大盒子屬性:     
overflow:hidden;  /*解決margin-top傳遞問題》》此處不是溢出隐藏*/
或者:
padding-top: 1px;   /*這種方法會影響實際的寬高,需要在height/width的基礎上減去響應的像素值*/
或者:
border-top:1px solid transparent;  /*這種方法會影響實際的寬高*/
或者:
/*不需要在子元素(小盒子》》第二個div)添加margin-top: 20px; */
padding-top: 20px;   /*隻需要在大盒子添加這個内邊距屬性*/
》》》也就是給子元素的margin-top值改為給父元素加内邊距padding-top,進而避免了margin-top的傳遞方法

<div>
  <div></div>
</div>
           

margin的負值

<div>
  <div>1</div>   /*寬高500px*/
  <div>2</div>   /*寬高800px*/
</div>
要求不改變結構,2在前,1在後:
margin-left: -1300;       /*實作位置的調換*/
           

内邊距和外邊距的差別

1、margin外邊距、padding内邊距

2、margin不會影響最後元素的實際寬高、padding是會影響最後元素的實際寬高

3、margin主要是用來控制元素和元素之間的間距

​ padding不能控制元素和另外一個元素的間距,隻能控制它裡面的元素

盒子模型的計算

CSS學習總結ing
<div class="content"></div>

.content{
    width: 100px;
    height: 250px;
    border: 10px solid #000;
    border-left: 40px;    /* 實際這個左邊框失效》border-left: 0px; */
    padding: 10px 30px;
    margin: 10px 20px 30px;
}
實際的寬度: 100 + 30 + 30 + 0 + 10 =170
實際的高度: 250 + 10 + 10 + 10 + 10 =290
           

背景顔色

CSS學習總結ing
text-align: center;       /*文字内容水準居中*/

-------------------------------------------
margin: 0 auto;  /*上下0,左右auto>> 塊元素的居中*/

文本内容行高控制 》》 line-height
<h3></h3>
/*實作h3文本内容的垂直居中》》》*/
line-height:32px;
height: 32px;
           

背景圖檔

/* 實作一個logo的背景圖檔 */
<h1 class="#">
   <a href="#" target="_blank" rel="external nofollow" >111</a>
</h1>

.logo a{
    display: block;   /*一個塊*/
    width: 173px;
    height: 66px;
    background-image: url(圖檔位址);
    text-indent: -9999px;    /*手段縮進,讓111消失*/
}
           

背景重複

<h1 class="logo"></h1>

/* 未指定平鋪方式,此時的h1會有重複現象*/
.logo{
    width: 300px;
    height: 300px;
    background-image: url(圖檔位址);
}

/*指定平鋪方式: (預設值repeat)不平鋪背景不重複*/
1、拆分寫法
background-image: url(圖檔位址);
background-repeat: no-repeat; 
2、複合寫法(簡寫)》》有空格,一定要指定平鋪方式
background: url(圖檔位址) repeat-y;
----------------------------------------
repeat-x    :x軸平鋪
repeat-y    :y軸平鋪
注意:1、background-repeat不能單獨(單個使用)簡寫為background
     2、background-image和background-color可以單獨簡寫為background
           

背景定位

<h1 class="logo"></h1>
--------------------------
background-position: 50px 50px;      /*x,y軸坐标*/

注意:方位隻指明x軸,沒有Y軸,此時預設y軸為center;
     同理background-position: left;》》》lift center
     同理background-position: right;》》》right center
     同理background-position: 50%》》50% 50%
           

背景關聯

background-attachment: 屬性
屬性:scroll>>背景随着頁面滾動條的滾動而滾動
屬性:fixed>>背景不會随着頁面滾動條的滾動而滾動》》固定
           

背景尺寸

background-size: 500px 500px;    /*x、y軸的大小*/
--------------------------------
background-size: auto;           /*圖檔原本的大小*/
--------------------------------
/*此時有一個問題:圖檔拉伸之後會  變虛*/
background-size: cover;          /*覆寫,背景圖檔等比例拉伸 到完全覆寫盒子大小(設定的寬高)為止*/
--------------------------------
/*背景圖檔會等比例拉伸,但是隻要有一條邊 觸碰到盒子的任何一條邊,它都會停止拉升(縮放)= 會出現留白*/
background-size: contain;
           

背景裁剪

/*content-box>  從内容區域之外開始裁剪(裁剪掉的是内邊距和邊框區域)*/
background-clip: content-box;
------------------------------------
/*從内邊距區域之外開始裁剪(不包括内邊距,裁剪掉的是邊框區域)*/
background-clip: padding-box;
-----------------------------------
/*從邊框線之外開始裁剪(不包括邊框線)*/
background-clip: border-box;
           

設定背景圖像的參考原點(位置)

/*background-origin 顯示背景的原點坐标*/
/*content-box >>>從内容區域開始顯示背景圖檔(左上角開始)》》width/height*/
background-origin: content-box;
--------------------------------------------------
padding-box;》》從内邊距區域(包括内邊距)開始顯示背景圖檔》》padding包括padding值
border-box》》從邊框區域開始(包括邊框)開始顯示背景圖檔》》border包括border值
           

背景屬性複合(縮寫)

css新增的屬性:
background-size、background-origin、background-clip 都不能用background複合縮寫
           

雪碧圖

CSS學習總結ing
/*雪碧圖  background-position: -400px 0;  x軸上取負值*/
background: url("") no-repeat 0 0;>>>>>/*00>>預設不寫,預設是background-position: 0 0;*/
           

overflow:hidden的多種作用

1、overflow溢出隐藏

2、清浮動

3、解決margin-top的傳遞問題

那麼,單行文本出現省略号,多行文本出現省略号?

overflow溢出隐藏》》》文本内容超過設定的寬度和高度時(超出内容之外的隐藏),出現溢出隐藏效果
           

多行元素在一行顯示

/*兩個div顯示在一行*/
<div>内容一</div>
<div>内容二</div>

----------------------------
1、css屬性設定為行内元素顯示》》》display: inline;

----------------------------------
如果此時給兩個div設定了寬高和背景顔色:》》》此時設定行内元素顯示會對寬高不起作用

2、修改屬性為》display: inline-block;
注意:display: inline-block可以讓元素在一行顯示,但是它會受空格、換行鍵的影響,會有預設的間距産生
=》解決辦法:
(1)去掉空格和換行鍵的影響,将(div)标簽全都在一行(不推薦,閱讀性不好)
(2)給兩div添加一個父div,給父div增加css屬性》font-size:0>>>但是發現一個問題,此時div中的文字消失了=》解決:此時隻需要在“内容一”和“内容二”的div屬性身上加加一個font-size:14把父元素font-size:0覆寫;

/*hack寫法:指css相容寫法*/
另外注意:display: inline-block;在ie6/ie7下不相容解決辦法=》在“内容一”和“内容二”的div屬性增加=》*display: inline> css hack IE浏覽器可以識别; 
=》*zoom:1;重新出發layout

<div>
  <div>内容一</div>
  <div>内容二</div>
</div>
------------------------------------
3、使用左浮動和有浮動(注意清除浮動)
float:left;
float:right;
           

單行文本出現省略号

<h3>文本字段</h3>
/*單行文本出現省略号必備條件:缺一不可*/
width: 30px;      /*必須要有寬度*/
overflow:hidden;    /*溢出隐藏*/
white-space: nowrap;  /*強制文字不折行*/
text-overflow: ellipsis;   /*文字隐藏方式:以省略号的方式隐藏*/
           

多行文本出現省略号

<h3>文本字段</h3>
/*多行文本出現省略号必備條件:主要是引用手機端*/
display: -webkit-box;          /*彈性盒模型*/
-webkit-box-orient: vertical;  /*規定元素的排列方式:垂直排列*/
-webkit-line-clamp: 2;    /*文字的行數,需要哪一行,值就是多少*/
overflow:hidden;    /*溢出隐藏*/
           

浮動

CSS學習總結ing
<div>内容一</div>
<div>内容二</div>

1、在一行顯示:
float: left;
---------------------------------
<div>内容一</div>
<div>内容二</div>
<div>内容三</div>

2、”内容一“和”内容二“的css屬性中都有float: left;
但是“内容三”無浮動屬性》》》》此時,浮動元素會脫離文檔流,導緻下面沒有浮動的元素識别不了它的高度和位置,此時“内容三”div就會往上跑

---------------------------------
3、元素都是 float: left; 左浮動,元素從左往右依次排列;
  元素都是float: right; 有浮動,元素從右往左依次排列;

---------------------------------
4、父元素浮動,子元素并不會繼承父元素的浮動;
5、浮動屬性不能繼承;

---------------------------------
<span></span>

6、浮動元素本身具有塊元素的特點,是以用了浮動就不需要在加display: block;

7、是以元素都可以用浮動屬性
           

文檔流和脫離文檔流

CSS學習總結ing
文檔流: 指的是元素的排列方式;

正常文檔流: 從左往右 從上到下;
文檔流可以分等級: 行内元素(從左往右)和 塊級元素(從上到下);

----------------------------------------
需求:需要塊級元素(比如div)在一行顯示
=》此時正常文檔流方式被打破;
=>是以得到》》脫離文檔流:正常的文檔流被打破;

脫離文檔流的影響:
1、float
2、定位
           

浮動元素的值

<div>内容一</div>
<div>内容二</div>

關于浮動的值:
float: left; 左浮動
float: right; 右浮動
float: none;  正常的文檔流
float:inherit;  規定應該從父元素繼承float屬性的值。
           

浮動元素産生的影響

<div>
  <div>内容一</div>
  <div>内容二</div>
</div>

1、父元素設定背景顔色不起作用
2、父元素設定邊框border屬性沒有被撐開,會重合到一起。
3、父元素設定内邊距padding屬性也沒有被撐開
           

清浮動的方法

1、給浮動元素的父元素手動添加一個height屬性;(不推薦)

2、給浮動元素的父元素設定overflow:hidden/auto;

3、給浮動元素的父元素結束标簽之前加一個具有塊元素特點的标簽(一般是div),
給元素加一個clear:both;  <div style="clear:both"></div>

4、clearfix 僞元素去清除浮動;  (常用)
/*利用僞元素:after 清除浮動必備的條件,缺一不可*/
(1)display: block;  /*確定元素是一個塊級元素*/
(2)clear: both;      /*不允許左右兩邊有浮動對象*/
(3)content:"";       /**/

/*下列屬性是寫全的方式,不是必備的條件*/
height: 0;            /*防止低版本浏覽器中預設 height: 1px;的情況*/
font-size: 0;         /**/
overflow: hidden;     /**/
visibility: hidden;   /*讓左右可見性的元素隐藏*/

注意:content:"";/*這是僞元素:before和:after天生自帶的屬性,如果不寫,僞元素不起作用*/

/*利用僞元素清除浮動》固定寫法*/
/*隻要清浮動,就在浮動元素的父元素上加一個 .clearfix 即可*/
如:<div class="head clearfix"></div>

.clearfix:after{
    display: block;
    clear: both;
    content: ""; 
    height: 0;           
    font-size: 0;         
    overflow: hidden;     
    visibility: hidden;
}    


[clear清除浮動]:
clear:both; /*不允許左右兩邊有浮動對象(清除左右兩邊的浮動的影響)*/

clear:left; /*不允許左邊有浮動對象(清除左兩邊浮動的影響)*/
clear:right; /*不允許右邊有浮動對象(清除右兩邊浮動的影響)*/

clear:none; /*允許左右兩邊有浮動對象 預設值(不清除左右兩邊的浮動的影響)*/
           

如何讓元素消失在視野中

/* 1、透明度為0 */
opacity: 0;

/* 2、隐藏 */
display: none;

/* 3、寬度為0和 overflow*/
width: 0;    
overflow:hidden;    

/* 4、沒有設定height高度的情況下,和 line-heigh和overflow*/
overflow:hidden; 
line-heigh: 0;

/* 5、讓所有可見性元素消失(優先考慮)*/
visibility: hidden;

/* 6、margin和padding設定足夠大*/
margin-left: -9999999999px;

/* 7、利用transfrom屬性,讓translate坐标設定足夠大*/
transfrom: translateY(-999999px);
           

僞元素:before和:after

:before  表示元素之前添加内容

:after   表示元素之後添加内容
           

定位

絕對定位

position: absolute;

1、它設定top、bottom、left、right四個方位值;

2、絕對定位元素會脫離文檔流,不占位,導緻後面的元素會往前跑,占領它的位置;

3、絕對定位元素一定要有相對參照(它的直接父級元素),如果父級元素沒有相對參照物,它會一級一級的往上查找,直到找到最外層的根元素html;

4、如果方位裡,同時有left和right,最後聽left;
             同時有top和bottom,最後聽top;
是以在實際應用中隻需要設定left或者top;

5、z-index越大,層級越在上

6、一個元素定在另一個元素上,或者兩個元素疊加的情況,都可以使用定位(絕對定位),同時需要設定相對參照物(相對定位 position: relative;)并且要指明它定位的方向。
           

相對定位

position: relative;

1、不會脫離文檔流,會占位,所有後面的元素不會往前跑。

2、可以設定top、bottom、left、right四個方位值
如果方位裡,同時有left和right,最後聽left;
          同時有top和bottom,最後聽top;

3、參照物: 自己本身

4、可以設定z-index屬性,z-index越大,層級越在上
z-index必須要和定位元素同時使用,才起作用。
           

固定定位

position: fixed;

1、會脫離文檔流

2、可以設定top、bottom、left、right四個方位值
如果方位裡,同時有left和right,最後聽left;
          同時有top和bottom,最後聽top;

3、參照物:整個浏覽器視窗

4、可以設定z-index屬性,z-index越大,層級越在上
           

定位總結

(1)相同點:
1、可以設定top、bottom、left、right四個方位值
如果方位裡,同時有left和right,最後聽left;
          同時有top和bottom,最後聽top;

2、可以設定z-index屬性,z-index越大,層級越在上

(2)不同點:
1、是否脫離文檔流
絕對定位:是
相對定位:否
固定定位:是

2、參照物
絕對定位:是具有定位元素的父級元素,如果直接父級元素沒有定位元素,則會往上級查找,知道找到根級元素html
相對定位:自己本身
固定定位:整個浏覽器視窗
           

z-index(層級)的特點

1、當标簽中都有定位元素時,在後面标簽中的z-index要比在前面的z-index的值要大

2、z-index沒有機關,支援負值

3、z-index一般是同級元素比較,子元素與父元素比較,z-index并不起作用(z-index值越大,越在上)

4、 z-index屬性不能繼承
           

基于WebStorm常用快鍵鍵

ctrl + D 複制整行
ctrl + X 剪切整行
ctrl + G 可快速定位到想要的行數
ctrl + alt +L 代碼格式化
window + E 調出資源檔案管理器
window + D 快速回到左面
           

繼續閱讀