CSS 基本使用

引用CSS方式

內(nèi)部引用

html文件中寫一個(gè)<style>標(biāo)簽,并將樣式寫入到里面,舉例:

<style type="text/css">
 p {
 background: blue;
 font-size: large;
 }
</style>
外部引用

通過<link>標(biāo)簽實(shí)現(xiàn),里面有rel表示關(guān)系,href表示css文件地址,舉例:

<link rel="stylesheet" type="text/css" href="a.css">
CSS文件內(nèi)部引入其他CSS文件
@import url(xxx);
// 舉例:@import url("1.css");

注1:
引用可以同時(shí)用,樣式也可以覆蓋樣式,所以最終樣式根據(jù)設(shè)置樣式的優(yōu)先級(jí)決定(一般范圍越精確優(yōu)先級(jí)越高),如果優(yōu)先級(jí)相同就按最后設(shè)置的確定,比如先內(nèi)部設(shè)置背景是藍(lán)色,在后面再引用外部樣式把背景弄成綠色,那么最終就是綠色。但是有個(gè)例外的就是,如果某個(gè)樣式十分重要,不希望被覆蓋,就可以在那個(gè)的值后面加:!important,這樣就能保證樣式固定,舉例:

p {
 color: green !important;
 }
<p style="color: gray">AAA</p>

結(jié)果就會(huì)發(fā)現(xiàn)本該是灰色的字因?yàn)間reen的時(shí)候加了!important,最終顯示的還是綠色

注2:
link標(biāo)簽不止可以引入CSS,還可以引入網(wǎng)頁圖標(biāo)等,舉例:

<link rel="stylesheet" type="text/css" >
<!-- 引入CSS -->
<link rel="icon" type="image/x-icon" >
<!-- 引入網(wǎng)頁圖標(biāo)(支持ico和png格式)-->
<!-- 其中type屬性可以省略,但是rel屬性不能省略(用于指定文檔和鏈接資源的關(guān)系),rel設(shè)置了,對(duì)應(yīng)的type默認(rèn)也會(huì)被確定 -->

媒體類型

頁面的在對(duì)應(yīng)媒體類型的展示樣式,主要是screenprint兩種,分別決定了屏幕和打印時(shí)的界面樣式,也可以設(shè)置all(默認(rèn)),代表全部設(shè)備都兼容的樣式,舉例:

<style media="screen">
  body {
    background: blue;
  }
</style>
<style media="print">
  body {
    background: green;
  }
</style>
link標(biāo)簽導(dǎo)入
<link rel="stylesheet" href="xxx.css" media="screen">
css內(nèi)部導(dǎo)入
@import url(xxx.css) print;
媒體流響應(yīng)式設(shè)置常用關(guān)鍵詞
screen
print
all
and
or
not
only  瀏覽器支持的樣式才能正常顯示,否則全部忽略

舉例:

@media not print and (min-width: 100px) or ... {
  ...
}

響應(yīng)式布局

如果希望界面樣式能夠隨著窗口大小的改變而改變,即實(shí)現(xiàn)響應(yīng)式布局,首先需要設(shè)置如下標(biāo)簽:

<meta name="viewport" content="width=device-width,initial-scale=1.0">
媒體查詢

link標(biāo)簽下的media屬性,可以設(shè)置css文件使用條件,因此常用來判斷是在PC端還是移動(dòng)端,舉例:

<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- 響應(yīng)式布局必須設(shè)置的標(biāo)簽 -->
<link media="(min-width: 500px)" rel="stylesheet" href="pc.css" />
<!-- 當(dāng)窗口寬度大于500時(shí)使用pc.css -->
<link media="(min-width: 400px) and (max-width: 500px)" rel="stylesheet" href="mobile.css" />
<!-- 當(dāng)窗口寬度大于400且小于500時(shí)使用mobile.css -->

更多關(guān)于媒體查詢可以參考:
https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Media_queries

設(shè)置樣式條件

CSS文件中也可以通過語句來根據(jù)條件來決定是否使用該樣式,舉例:

@media(條件) {
  樣式1:xxx;
  ...
}

例如根據(jù)屏幕寬度改變樣式:

input {  /* 默認(rèn)樣式 */
    width: 14.893617021276595%;
    *width: 14.840425531914894%;  /* *表示兼容IE瀏覽器 */
}
@media (min-width: 768px) and (max-width: 979px) {  /* 窗口大小在768~979之間 */
    input {
        width: 14.3646408839779%;
        *width: 14.311449394616199%;
    }
}
更多參考

https://blog.csdn.net/u010510187/article/details/82790963

選擇器

參考我的另一篇:CSS選擇器

繼承

繼承概念:如果一個(gè)元素沒有設(shè)置某個(gè)屬性,那么其就會(huì)跟隨于父元素的該屬性值

屬性繼承

CSS中一些屬性是可以繼承的,如:color、font-size,而對(duì)于不可繼承的屬性,可以通過對(duì)該屬性設(shè)值為inherit來實(shí)現(xiàn)強(qiáng)制繼承

繼承值

繼承的是計(jì)算值(computed里的),而不是設(shè)置的值,例如父元素中設(shè)置font-size50%,實(shí)際計(jì)算出來的結(jié)果是10px,那么子元素繼承的就是10px而不是50%

元素區(qū)分

基于顯示類型

主要分為:塊級(jí)元素/行內(nèi)元素

塊級(jí)元素

獨(dú)占一行,即使寬沒有占滿一行,這一行也不讓別的元素使用,并且有寬高可以設(shè)置,如:div/p/ul/...

行內(nèi)元素

多個(gè)行內(nèi)元素能夠在父元素的同一行內(nèi)顯示,沒有寬高(inline-block屬于塊級(jí)和行內(nèi)級(jí)的結(jié)合),如:span/a/img/iframe/canvas/video/audio
注:
行內(nèi)元素注意:因?yàn)樾袃?nèi)元素沒有寬高(其寬高就是內(nèi)容本身大?。?,因此無法設(shè)置width/height/margin-top/margin-bottom屬性,但是可以設(shè)置margin-left/margin-right

基于內(nèi)容類型
替換元素

元素本身無內(nèi)容,而是根據(jù)其類型和屬性來決定顯示的內(nèi)容,如:img/input/video/...
注:
可以看到如img雖然是行內(nèi)元素,但其可以設(shè)置寬高(行內(nèi)級(jí)替換元素可以設(shè)置寬高)

非替換元素

元素本身有內(nèi)容,而無需本身的類型和屬性來決定顯示的內(nèi)容,如:div/...

偽類和偽元素

參考:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building_blocks/Selectors/Pseudo-classes_and_pseudo-elements

常用樣式

通用屬性
initial  使用默認(rèn)值
inherit  繼承于父類
unset  不設(shè)置(可以理解為如果可繼承的樣式,則繼承,否則使用默認(rèn)值)

參考:https://www.cnblogs.com/coco1s/p/6733022.html

固定樣式不被覆蓋
!important  /* 在樣式的值后面加這個(gè)就能保證不被覆蓋 */
基本單位
px  絕對(duì)單位,具體的像素大小
em  相對(duì)單位,相對(duì)于當(dāng)前對(duì)象font-size的比例(如果沒設(shè)置font-size會(huì)繼承父類的),可以設(shè)置幾個(gè)字的間距
rem  相對(duì)單位,相對(duì)于html的font-size比例
vh  相對(duì)于視圖窗口的高度比例
vw  相對(duì)于視圖窗口的寬度比例
vmin  vw和vh中較小的一個(gè)值
vmax  vw和vh中較大的一個(gè)值
fr  按比例分配

如果當(dāng)前標(biāo)簽使用了em單位,但沒有font-size,就找父元素的font-size,所以body是整體的默認(rèn)font-size,其他的應(yīng)該根據(jù)body的用em按比例設(shè)置font-size(而子元素則根據(jù)父元素的比例設(shè)置font-size),否則直接寫死的話,將來維護(hù)將會(huì)特別麻煩
還有如rem/vw/vh等單位,可以參考:https://blog.csdn.net/u013594477/article/details/80232495

顏色相關(guān)
color

設(shè)置標(biāo)簽的前景色(除了背景色以外的,例如文字、邊框、外輪廓等顏色,而不單只是文字顏色),舉例:

color: red;
opacity

透明度,舉例:

opacity:0.4;  /* 透明度百分比 */
transparent

完全透明,相當(dāng)于rgba(0,0,0,0),舉例:

background-color: transparent;
linear-gradient

線性漸變,舉例:

background: linear-gradient(to left, red, green, blue);
/* 從右往左依次紅綠藍(lán)漸變 */
background: linear-gradient(to right top, red, blue);  /* 從左下角到右上角,紅色到藍(lán)色漸變 */
background: linear-gradient(60deg, red, blue, green, yellow, pink, white);
/* 旋轉(zhuǎn)60度,從左到右按上面?zhèn)鬟f顏色漸變 */
radial-gradient

徑向漸變,舉例:

background: radial-gradient(100px 100px, red, green, blue);
/* 紅綠藍(lán)分別以半徑50px從圓心向外擴(kuò)散 */
background: radial-gradient(red, blue, green, yellow, pink, white);
/* 從里到外按上面?zhèn)鬟f顏色漸變 */
background: radial-gradient(circle at 10px 10px, red, blue, green 50%, yellow, pink, white);
/* 從(10, 10)開始,以圓形往外按上面?zhèn)鬟f顏色漸變,并且綠色的范圍只占原來的一半 */
background: radial-gradient(300px 100px ellipse, red, green, yellow, white);
/* 橫向300px,縱向100px的橢圓往外按上面?zhèn)鬟f顏色漸變 */
repeating-linear-gradient

重復(fù)線性漸變,我們可以用其實(shí)現(xiàn)一些條紋樣式,舉例:

background: repeating-linear-gradient(45deg, blue 0px, blue 30px, white 30px, white 60px);
/* 傾斜45度,0~30px部分為藍(lán)色,30~60px部分為白色,循環(huán)線性漸變的藍(lán)白條紋 */
repeating-radial-gradient

重復(fù)徑向漸變,舉例:

repeating-radial-gradient(circle, blue 10px, white 20px)
/* 圓形,0~10px部分為藍(lán)色,10~30px部分為白色,循環(huán)徑向漸變的藍(lán)白條紋 */
盒子模型相關(guān)
margin

外邊距,舉例:

margin: 0px 0px 0px 0px;  /* 四個(gè)分別表示上右下左的外邊距,也有對(duì)應(yīng)的margin-top等 */
padding

內(nèi)邊距,舉例:

padding: 0px 0px 0px 0px;  /* 四個(gè)分別表示上右下左的內(nèi)邊距 */
border

邊框,舉例:

border: 1px solid green; /* 邊框粗細(xì)、邊框類型、邊框顏色 */
通過border實(shí)現(xiàn)三角形
div {
  height: 0px;
  width: 0px;
  border-left: 100px solid yellow;
  border-bottom: 100px solid transparent;
  transform: rotate(45deg)
}

兩個(gè)border連在一起,中間會(huì)有條斜線隔開,把元素長寬改成0,并且其中一個(gè)border設(shè)成透明,就是三角形了,然后可以通過transform調(diào)整方向

border-collapse

合并邊框,舉例:

table {
  border-collapse: collapse;
}
border-radius

邊框角度,舉例:

border-radius: 10px;  /* 代表4個(gè)角都變成半徑為10px的圓角,可以傳四個(gè)數(shù)值,一次為左上->右上->右下->坐下 */
border-radius: 50%;  /* 直接拿尺寸的一半變成半徑,相當(dāng)于直接變成橢圓/圓了 */
box-shadow

盒子陰影,屬性取值:

水平偏移(px)  垂直偏移(px)  模糊半徑(px)  延伸距離(px)  陰影顏色(color)  內(nèi)框陰影(inset,默認(rèn)外框)

舉例:

box-shadow: 10px 10px 5px 10px green inset;
/* x軸往右偏移10px(負(fù)的就代表向左偏移),y軸往下偏移10px,
模糊范圍寬度為5px,陰影尺寸為10px,顏色為綠色,向內(nèi)展示陰影 */
box-sizing

設(shè)置盒子模型類型,主要分為兩種:
標(biāo)準(zhǔn)盒子模型:實(shí)際寬高width/height為內(nèi)容(content)的寬高,也是默認(rèn)常用的
IE盒子模型:元素實(shí)際寬高width/height中把paddingborder也算在內(nèi)(content+padding+border),適合經(jīng)常調(diào)整padding,但不希望寬高發(fā)生變化的時(shí)候(固定width/height,那么調(diào)整padding時(shí),只會(huì)改變content。但要注意其不會(huì)改變border,因此當(dāng)content縮小到0時(shí),padding+border還是超出了寬高限制時(shí),那么寬高以超出的結(jié)果為準(zhǔn),例如:height為100px,padding為50px,border為10px,那么最終的content為0,height0+50*2+10*2=120
取值如下:

content-box  標(biāo)準(zhǔn)盒子模型,默認(rèn)(width/height = content)
border-box  IE盒子模型(width/height = content + padding + border)
height/width自適應(yīng)屬性
fill-available  自動(dòng)撐滿可用空間
fit-content  內(nèi)容多大就多大
max-content
min-content

參考:https://www.cnblogs.com/xiaohuochai/p/7210540.html

布局相關(guān)
display

設(shè)置元素的顯示類型,常用值如下:

block  塊級(jí)元素
inline  行內(nèi)級(jí)元素
inline-block  同時(shí)具備塊級(jí)、行內(nèi)級(jí)元素特征:跟多個(gè)行內(nèi)級(jí)元素可以同一行顯示,并且可以設(shè)置寬高(默認(rèn)由內(nèi)容決定)
none  不占空間(隱藏)

注:
塊級(jí)元素和inline-block元素一般內(nèi)部可以包含塊級(jí)、inline-block、行內(nèi)級(jí)元素,但是p標(biāo)簽作為塊級(jí)元素,不能包含塊級(jí)元素;行內(nèi)級(jí)元素一般內(nèi)部只能包含行內(nèi)級(jí)元素

display其他屬性
table  table標(biāo)簽
inline-table  inline的table標(biāo)簽
table-row  tr標(biāo)簽,表格中的一行
table-cell  td/th標(biāo)簽,一個(gè)單元格
table-row-group  tbody標(biāo)簽,表格內(nèi)容
table-header-group  thead標(biāo)簽,表格頭
table-footer-group  tfoot標(biāo)簽,表格尾部
table-caption  caption標(biāo)簽,表格的標(biāo)題
list-item  li標(biāo)簽
grid  柵格布局
柵格布局

將元素拆分為xx行和yy列進(jìn)行展示,類似于表格的布局,但對(duì)于各行各列的寬高占比,可以很方便的進(jìn)行分配,舉例:

<head>
<style>
    .grid {
        background-color: white;
        display: grid;
        /* 柵格布局 */
        grid-template-rows: auto;
        /* 多行高度平均分配 */
        grid-template-columns: 1fr 2fr 3fr 2fr 1fr;
        /* 每行分5列,寬度比為:1:2:3:2:1 */
        height: 300px;
        width: 600px;
        grid-gap: 2px;
    }
    .grid>div{
        background-color: cadetblue;
    }
</style>
</head>

<body>
    <div class="grid">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div>9</div>
        <div>10</div>
        <div>11</div>
        <div>12</div>
        <div>13</div>
        <div>14</div>
        <div>15</div>
    </div>
</body>
柵格布局相關(guān)屬性

類似柵格系統(tǒng)一樣可以給內(nèi)容分列顯示

  • 分列數(shù):column-count
column-count: 3; /* 分3列 */
  • 分列間隔:column-gap
column-gap: 10px; /* 分列間隔為10px */
  • 分列邊框樣式:column-rule
column-rule: 2px solid yellow; /* 分列邊框2px,黃色 */
flex

彈性布局,在移動(dòng)端開發(fā)中很常用,其中設(shè)置display: flex;display: inline-flex;的元素被稱為flex container,而其的直接子元素(子元素的子元素不算)則被稱為flex items

常用屬性
flex-direction

container配置,規(guī)定主軸的方向,常用值如下:

row  主軸從左到右,交叉軸從上到下
row-reverse  主軸從右到左,交叉軸從上到下
column  主軸從上到下,交叉軸從左到右
column-reverse  主軸從下到上,交叉軸從左到右
justify-content

container配置,規(guī)定flex items在主軸上的對(duì)齊方式,常用值如下:

flex-start  與主軸頭對(duì)齊(例如`row`下就是向左對(duì)齊)
flex-end  與主軸尾對(duì)齊
center  居中對(duì)齊
space-between  兩端對(duì)齊,并且`flex items`之間距離相等
space-evenly  在兩端以及`flex items`之間距離相等
space-around  在兩端的距離是`flex items`之間距離的一半
align-items

container配置,規(guī)定flex items在交叉軸的對(duì)齊方式,常用值如下:

flex-start  與交叉軸頭對(duì)齊
flex-end  與交叉軸尾對(duì)齊
center  居中對(duì)齊
baseline  與基線對(duì)齊
strech  如果flex items在交叉軸方向的size為auto時(shí),將填充占滿交叉軸
flex-wrap

container配置,規(guī)定flex container是單行還是多行(當(dāng)單行的item寬度超過時(shí)才會(huì)換行)

nowrap  單行,默認(rèn)
wrap  多行
wrap-reverse  多行,但是交叉軸是反過來的
flex-flow

container配置,flex-directionflex-wrap的簡寫,舉例:

flex-flow: cloumn wrap;
align-content

container配置,規(guī)定多行flex items在交叉軸的對(duì)齊方式,常用值如下:

flex-start  與交叉軸頭對(duì)齊
flex-end  與交叉軸尾對(duì)齊
center  居中對(duì)齊
stretch  如果多行flex items在交叉軸方向的size為auto時(shí),將填充占滿交叉軸
space-between  交叉軸兩端對(duì)齊,并且`flex items`之間距離相等
space-evenly  交叉軸兩端以及`flex items`之間距離相等
space-around  交叉軸兩端的距離是`flex items`之間距離的一半

舉例:

<style>
  .row {
    display: flex;
    background-color: gold;
    width: 250px;
    height: 300px;
    flex-wrap: wrap;
    align-content: space-between;
  }
  .col {
    background-color: pink;
    width: 100px;
    height: 100px;
    border: 1px solid beige;
    box-sizing: border-box;
  }
</style>
<body>
  <div class="row">
    <div class="col">1</div>
    <div class="col" style="height: 30px">2</div>
    <div class="col">3</div>
    <div class="col" style="height: 120px">4</div>
  </div>
</body>
order

item配置,規(guī)定flex items的排列順序,可以設(shè)置任何整數(shù)(默認(rèn)為0),值越小越靠前

align-self

item配置,通過該屬性可以覆蓋flex container中設(shè)置的align-items屬性,屬性值參考align-items

flex-grow

item配置,規(guī)定flex items的擴(kuò)展系數(shù),可以設(shè)置任意正數(shù)或者0(默認(rèn)為0),代表在主軸的擴(kuò)展相對(duì)比例,舉例:

<style>
  .row {
    display: flex;
    background-color: gold;
    width: 600px;
    height: 100px;
    flex-wrap: wrap;
    align-content: space-between;
  }
  .col {
    background-color: pink;
    width: 100px;
    height: 100px;
    border: 1px solid beige;
    box-sizing: border-box;
  }
</style>
<body>
  <div class="row">
    <div class="col" style="flex-grow: 1;">1</div>
    <div class="col" style="height: 30px; flex-grow: 2;">2</div>
    <div class="col">3</div>
    <div class="col">4</div>
  </div>
</body>

注:
該屬性只有flex container在主軸方向有剩余空間時(shí)才有效

flex-shrink

item配置,規(guī)定flex items的收縮系數(shù),可以設(shè)置任意正數(shù)或者0(默認(rèn)為1),其中值大于1則收縮,值大于0小于1則放大(相對(duì)),舉例:

<style>
  .row {
    display: flex;
    background-color: gold;
    width: 300px;
    height: 100px;
  }
  .col {
    background-color: pink;
    width: 100px;
    height: 100px;
    border: 1px solid beige;
    box-sizing: border-box;
  }
</style>
<body>
  <div class="row">
    <div class="col" style="flex-shrink: 20;">1</div>
    <div class="col" style="height: 30px; flex-shrink: 0.1;">2</div>
    <div class="col">3</div>
    <div class="col">4</div>
  </div>
</body>

注:
該屬性只有flex items在主軸方向的尺寸超過了flex container的尺寸時(shí)才有效

flex-basis

item配置,規(guī)定flex items在主軸上的基礎(chǔ)尺寸,默認(rèn)是content大小,常用值如下:

auto  默認(rèn)
數(shù)字  代表具體的基礎(chǔ)size

舉例:

<style>
  .row {
    display: flex;
    background-color: gold;
    width: 300px;
    height: 100px;
  }
  .col {
    background-color: pink;
    width: 100px;
    height: 100px;
    border: 1px solid beige;
    box-sizing: border-box;
  }
</style>
<body>
  <div class="row">
    <div class="col" style="flex-basis: 200px;">1</div>
    <div class="col" style="height: 30px;">2</div>
    <div class="col">3</div>
    <div class="col">4</div>
  </div>
</body>

注:
在item上設(shè)置flex-basiswidth大多情況結(jié)果相同,但flex-basis的優(yōu)先級(jí)高于width,但flex-basiswidth一樣都會(huì)受到min-width/max-width的制約,更多參考:https://juejin.cn/post/6844903914148462599

flex

item配置,flex-grow、flex-shrinkflex-basis的簡寫,其支持單值語法、雙值語法和三值語法,舉例:

flex: 0;  // flex:0 1 0;
flex: 100px;  // flex-basis: 100px;
flex: 1 1;  // flex:1 1 0;
flex: 0 0 auto;

參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex

定位相關(guān)
position

指定元素的定位方式,常用值如下:

static  靜態(tài)定位,默認(rèn)
relative  相對(duì)定位
absolute  絕對(duì)定位
fixed  固定定位
sticky  粘性定位
靜態(tài)定位

標(biāo)準(zhǔn)流布局下的默認(rèn)定位方式
注:
標(biāo)準(zhǔn)流:元素默認(rèn)從上到下,從左到右的排序方式

相對(duì)定位

在標(biāo)準(zhǔn)流布局下,可以通過left/right/top/bottom屬性,參照原來的位置進(jìn)行定位偏移

絕對(duì)定位

元素脫離標(biāo)準(zhǔn)流,通過left/right/top/bottom屬性,參照父元素中最近的一個(gè)定位元素(非靜態(tài)定位的元素)進(jìn)行定位
注:
絕對(duì)定位和固定定位可能會(huì)修改元素布局,參考:https://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo

固定定位

元素脫離標(biāo)準(zhǔn)流,通過left/right/top/bottom屬性,一般情況下參照瀏覽器窗口的位置進(jìn)行固定定位,但也有例外,例如下面:

<!DOCTYPE html>
<html lang="en">
  <head>
      <style>
          .parent {
              transform: scale(1);
              position: relative;
              left: 100px;
              top: 100px;
          }
          .child {
              position: fixed;
              left: 0px;
              top: 0px;
          }
      </style>
  </head>
  <body>
      <div class="parent">
          <div class="child">child</div>
      </div>
  </body>
</html>

可以看到明明fixed定位到頁面左上角,實(shí)際上卻有100px的間隔,這是因?yàn)楫?dāng)元素祖先的 transform, perspective 或 filter 屬性非 none 時(shí),容器由視口改為該祖先,所以child參照的是parent節(jié)點(diǎn)而不是視口

參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/position

粘性定位

類似于相對(duì)定位+固定定位,當(dāng)內(nèi)容沒到父元素邊界時(shí),按相對(duì)定位行為正常展示;當(dāng)?shù)竭_(dá)父元素邊界時(shí),則會(huì)固定在指定位置上,適用于那種閱讀文章時(shí),固定當(dāng)前章節(jié)的標(biāo)題在頂部的場景,舉例:

<head>
    <style>
    .main {
        width: 200px;
        height: 200px;
        overflow: auto;
    }
    .head {
        position: sticky;
        width: 200px;
        height: 30px;
        top: 0px;
        background-color: red;
    }
    .content {
        height: 200px;
        background-color: burlywood;
    }
    </style>
</head>

<body>
    <div class="main">
        <div class="head">111</div>
        <div class="content">xxxxxxx</div>
        <div class="head">222</div>
        <div class="content">yyyyyyy</div>
        <div class="head">333</div>
        <div class="content">zzzzzzz</div>
    </div>
</body>

更多參考:https://www.cnblogs.com/coco1s/p/6402723.html

注:
絕對(duì)定位元素(絕對(duì)、固定)都會(huì)脫標(biāo),并且不再區(qū)分inlineblock,寬高默認(rèn)是自己的內(nèi)容大小,但是可以設(shè)置寬高(類似inline-block,但不是,此時(shí)設(shè)置display屬性已經(jīng)對(duì)其沒有效果)

子絕父相

由于絕對(duì)定位的參照是父元素中最近的定位元素(非靜態(tài)定位的元素),如果此時(shí)不希望父元素脫標(biāo),一般會(huì)講父元素設(shè)置為相對(duì)定位,也就是所謂的"子絕父相"

z-index

用于設(shè)置定位元素(非靜態(tài)定位的元素)的層疊關(guān)系

元素重疊問題
  • 非定位元素(static)一般不會(huì)重疊,但可以使用margin之類的屬性實(shí)現(xiàn)重疊,此時(shí)一般后面的元素會(huì)蓋在前面的上面
  • 定位元素一定是蓋在非定位元素上
  • 定位元素之間可以通過z-index來確定層疊關(guān)系
z-index對(duì)比原則

同一個(gè)祖先元素下對(duì)比(兄弟關(guān)系,直接當(dāng)前元素比較):

  • z-index大的蓋在上面(沒設(shè)置默認(rèn)是0);
  • z-index相等,那么后面的蓋在上面;

非同祖先元素對(duì)比(各自找出祖先元素中離自己最近的定位元素比較,標(biāo)準(zhǔn)和上面一樣,跟當(dāng)前元素的z-index無關(guān)),例如:

<head>
    <style>
        .a1, .a2 {
            height: 100px;
            width: 100px;
            position: relative;
        }
        .a1-1, .a2-1 {
            height: 100%;
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="a1" style="z-index: 10;">
        <div class="a1-1" style="background: blue; z-index: 10;">div1</div>
    </div>
    <div class="a2" style="z-index: 1; top: -30px; left: 10px;">
        <div class="a2-1" style="background: green; z-index: 1000;">div2</div>
    </div>
</body>

這里因?yàn)?code>div1的祖先元素大于div2的祖先元素,因此無論div2z-index設(shè)置多大,都不可能蓋住div1,只能通過將其祖先元素.a2z-index調(diào)大才能實(shí)現(xiàn)

float

浮動(dòng)樣式,常用值如下:

none  不浮動(dòng),默認(rèn)
left  向左浮動(dòng)
right  向右浮動(dòng)
float層疊關(guān)系
  • 對(duì)于非定位元素,float元素一定蓋在其上方
  • 對(duì)于定位元素,一定蓋在float元素上方
float規(guī)則
  • 一旦設(shè)置了float屬性不為none,則脫離標(biāo)準(zhǔn)流,直接往左/右邊的父元素邊界或者其他浮動(dòng)元素上靠
  • float元素不能和行內(nèi)級(jí)內(nèi)容重疊(如span標(biāo)簽的行內(nèi)元素、inline-block,包括塊級(jí)內(nèi)容里面的文字也是),其會(huì)將這些內(nèi)容擠出去,因此可以用該特性實(shí)現(xiàn)文字環(huán)繞(圖片作為浮動(dòng)元素,將內(nèi)部的文字?jǐn)D開,從而實(shí)現(xiàn)效果)
  • float之間也不能重疊,而是緊貼上去。如果水平方向上空間不夠時(shí),則會(huì)沿垂直方向移動(dòng)一些,直到有充足的空間可以裝下該元素
clear

控制自身元素和浮動(dòng)對(duì)象的位置關(guān)系,常用值如下:

none  無特殊要求,默認(rèn)
left  要求元素頂部低于之前所有左浮動(dòng)元素的底部(左側(cè)不能有浮動(dòng)元素)
right  ...右浮動(dòng)...
both  ...左/右浮動(dòng)...
背景相關(guān)
background-color

背景顏色,舉例:

background-color: rgba(0, 0, 0, 0.3);  /* rgba前三個(gè)參數(shù)是三原色,最后一個(gè)是透明度百分比 */
background-image

背景圖片,其會(huì)蓋在background-color上,并且可以設(shè)置多張圖片,舉例:

background-image: url("xxx.jpg"), url("yyy.jpg"), ...;

設(shè)置多張圖片時(shí),第一張展示在最上面,其他的依次往下疊(所以是疊在一起展示的)
注1:
使用image-set設(shè)置多個(gè)背景圖片時(shí),還可以設(shè)置尺寸,此時(shí)瀏覽器會(huì)自動(dòng)識(shí)別當(dāng)前屏幕分辨率,并選擇適配的背景圖,舉例:

background-image: image-set(url("xxx.jpg") 1x, url("yyy.jpg") 2x, ...);

注2:
設(shè)置的背景圖片,需要元素有具體的寬高才能夠展示出來

background-repeat

設(shè)置背景圖片的展示是否平鋪,常用值如下:

no-repeat  不平鋪
repeat  平鋪
repeat-x  水平平鋪
repeat-y  垂直平鋪
background-size

設(shè)置圖片尺寸,舉例:

background-size: 100px 50px;
/* 指定寬100px,高50px */
background-size: auto 50px;
/* 指定寬維持圖片原本寬高比,高50px */
background-size: 100px auto;
/* 指定寬100px,高維持圖片原本寬高比 */
background-size: 100px;
/* 指定寬100px,高維持圖片原本寬高比(第二個(gè)不寫,默認(rèn)auto) */
background-position

背景圖片在水平/垂直方向的具體位置,第一個(gè)是水平方向,第二個(gè)是垂直方向,舉例:

background-position: 10px 20px;
/* 往右移動(dòng)10px,往下移動(dòng)20px */

其他設(shè)值:

水平:left|center|right
垂直:top|center|bottom

如果只設(shè)置一個(gè),另一個(gè)默認(rèn)是center
注:
該屬性常結(jié)合雪碧圖使用

background-attachment

設(shè)置背景圖片的顯示行為,常用值如下:

scroll  背景圖片隨元素一起滾動(dòng),默認(rèn)
local  背景圖片跟隨元素及元素內(nèi)容一起滾動(dòng)
fixed  背景圖片相對(duì)于瀏覽器窗口固定

注:
該屬性經(jīng)常用于希望整體頁面背景不隨著頁面一起滾動(dòng)的時(shí)候

background

是前面幾個(gè)屬性的簡寫屬性,舉例:

background: url("xxx.jpg") right bottom no-repeat fixed red;
/* 屬性可省略,順序也可以任意,但background-size必須緊跟在background-position后面 */
background-clip

背景覆蓋到哪,常用值如下:

content-box  只覆蓋內(nèi)容
padding-box  只到padding里
border-box  只到邊框,默認(rèn)
字體相關(guān)
font-size

字體大小,舉例:

font-size: 30px;
font-weight

字體粗細(xì),舉例:

font-weight: 100;
font-family

設(shè)置字體,可以設(shè)置多個(gè),用逗號(hào)隔開
注1:當(dāng)設(shè)置多個(gè)字體時(shí),每個(gè)字(不是整個(gè)標(biāo)簽,而是以字符為單位)都會(huì)從第一個(gè)字體開始匹配,如果該字體能用,就不看后面的:
字體除非是有空格或者中文名,否則可以不加引號(hào),舉例:

font-family: "微軟雅黑", Consolas, "Microsoft ..."

注2:因?yàn)橹形淖煮w一般兼容英文,這樣英文字體可能就無法應(yīng)用到英文上,所以英文字體應(yīng)該放前面

@font-face

加載自定義字體,舉例:

@font-face {
  /* 加載一個(gè)字體 */
  src: url("font/xxx.ttf");
  font-family: "我的字體";
  /* 給字體命名 */
}

.test {
  font-family: "我的字體";
  /* 使用前面加載的字體 */
}
font-style

字體樣式,常用值如下:

normal  正常
italic  斜體
oblique  傾斜

注:如果字體不支持斜體那么italic則沒有效果,而oblique則是不管支不支持斜體,都會(huì)將內(nèi)容傾斜表示

文本相關(guān)
text-align

文字水平對(duì)齊,常用值如下:

left  左對(duì)齊
right  右對(duì)齊
center  居中
justify  兩端對(duì)齊
vertical-align

設(shè)置行內(nèi)級(jí)元素在垂直方向的位置,常用值如下:

baseline  與基線對(duì)齊,默認(rèn)
sub  將元素基線下降
super  將元素基線上升
middle  元素中心點(diǎn)與父元素基線加上字母x一半高的線對(duì)齊
text-top  元素頂部和父元素內(nèi)容的頂部對(duì)齊
text-bottom  元素底部和父元素內(nèi)容的底部對(duì)齊
top  元素頂部和行頂部對(duì)齊
bottom  元素底邊和行底邊對(duì)齊
百分比  將元素基線上升/下降一定距離(相對(duì)于行高計(jì)算)
具體像素  將元素基線上升/下降一定距離

使用場景:如一些數(shù)學(xué)公式的上標(biāo)和下標(biāo)就 可能用到sub/super

line-height

行高,定義:兩行文字baseline之間的間距
baseline:小寫字母x底部的對(duì)齊線
設(shè)置值:

數(shù)字+px  具體像素值
數(shù)字  相對(duì)于font-size的比例
百分比  相對(duì)于font-size的比例
normal  瀏覽器自動(dòng)調(diào)整

注:
line-height設(shè)置的僅是最小行高,而不是最終行高,具體的行高可能會(huì)因?yàn)槠渌氐挠绊懚淖?,例如下面這個(gè)例子:

div {
  line-height: 20px;
}

<div>aaa<img src="xxx.jpg"></div>

如果圖片的高度大于20px,那么最終也會(huì)發(fā)現(xiàn)div的行高不止20px

letter-spacing/word-spacing

設(shè)置字符/單詞的間距

word-break

設(shè)置文本換行,有以下可選值:

normal  默認(rèn)
break-all  可在任意字符間斷行
keep-all  CJK 文本(CJK 指中文/日文/韓文) 不斷行。 Non-CJK 文本表現(xiàn)同 normal
break-word  以單詞為換行依據(jù)

參考:https://blog.csdn.net/pan_junbiao/article/details/7418102
https://developer.mozilla.org/en-US/docs/Web/CSS/word-break

text-transform

設(shè)置字母大小寫轉(zhuǎn)換,有以下可選值:

capitalize  每個(gè)單詞的首字母大寫
uppercase  每個(gè)單詞全部轉(zhuǎn)大寫
lowercase  每個(gè)單詞全部轉(zhuǎn)小寫
none  不進(jìn)行轉(zhuǎn)換處理,默認(rèn)
white-space

設(shè)置空白處理和換行規(guī)則,常用值如下:

normal  合并所有連續(xù)的空白,水平內(nèi)容超出時(shí)自動(dòng)換行
nowrap  合并所有連續(xù)空白,不允許自動(dòng)換行
pre  不合并所有連續(xù)空白,不允許自動(dòng)給換行
pre-wrap  不合并所有空白,允許自動(dòng)換行
pre-line  合并所有連續(xù)空白(除了換行),允許自動(dòng)換行

注:
可以看出<pre>標(biāo)簽就是通過設(shè)置white-space: pre;實(shí)現(xiàn)的

text-overflow

控制文字溢出時(shí)的行為,常用值如下:

clip  溢出部分剪掉
ellipsis  溢出部分用省略號(hào)表示

注:
使用text-overflow的前提是overflow部分不允許可視,例如:overflow: hidden;,我們可以結(jié)合該屬性實(shí)現(xiàn)多余內(nèi)容用省略號(hào)展示,舉例:

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-decoration

文本樣式,舉例:

text-decoration: none; /* 去除下劃線 */
text-shadow

文本陰影,和盒子陰影用法差不多

text-stroke

字體邊框,舉例:

color: transparent;
-webkit-text-stroke: 2px green;
-moz-text-stroke: 2px green;
/* 字體透明,邊框綠色的鏤空文字,該屬性需要設(shè)置兼容性 */
變形相關(guān)
transform

可以設(shè)置各種變形樣式,其中有很多的屬性,可以多個(gè)組合使用,下面會(huì)介紹這些屬性

translateX/translateY/translateZ/translate/translate3d

沿x軸/y軸/z軸/x+y軸/x+y+z軸移動(dòng)一定距離,舉例:

transform: translate(20%, 100px);
rotateX/rotateY/rotateZ/rotate/rotate3d

沿x軸/y軸/z軸/x+y軸/x+y+z軸旋轉(zhuǎn),舉例:

transform: rotate(45deg);
perspective

透視,一般和旋轉(zhuǎn)組合使用,舉例:

transform: perspective(300px) rotateY(45deg);
scaleX/scaleY/scaleZ/scale/scale3d

沿x軸/y軸/z軸/x+y軸/x+y+z軸縮放,舉例:

transform: scale(2);
skewX/skewY/skewZ/skew/skew3d

沿x軸/y軸/z軸/x+y軸/x+y+z軸傾斜,舉例:

transform: skew(45deg);
transform-origin

設(shè)置變形參考點(diǎn)(以哪個(gè)點(diǎn)為基準(zhǔn)進(jìn)行運(yùn)動(dòng),默認(rèn)是中心點(diǎn)),舉例:

transform-origin: 0% 100%;
/* 以左下角為參考點(diǎn) */
transform: rotate(45deg);

注:
設(shè)置3d參考點(diǎn),則直接加第三個(gè)參數(shù)即可,但必須用固定的像素值(因?yàn)閦軸沒有可參考的比例,只有0~∞),舉例:

transform-origin: left top -500px;
transform-style

設(shè)置變形呈現(xiàn)的樣式,常用值如下:

flat  平面展示
preserve-3d  3d展示
backface-visibility

元素背面是否可視,常用值如下:

visible  可視,此時(shí)將以鏡像方式展示元素正面的內(nèi)容
hidden  隱藏,背面直接變成透明
過渡動(dòng)畫相關(guān)

參考:http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html

transition

從一種樣式到另一種樣式的過渡時(shí)間,最好不要放在hover之類的偽類里,那樣一離開對(duì)應(yīng)狀態(tài)就沒有過渡時(shí)間了,直接放在元素本身里,這樣比較好,舉例:

<head>
    <style>
        .a1 {
            height: 100px;
            width: 100px;
            position: relative;
            background: blue;
            transform: perspective(500px) rotatey(45deg);
        }
        .a1-1 {
            height: 100%;
            width: 100%;
            background: green;
            transition: 2s;
            /* 不要放在hover里 */
        }
        .a1-1:hover {
            transform: rotateY(180deg);
        }
    </style>
</head>

<body>
    <div class="a1">
        <div class="a1-1">div</div>
    </div>
</body>
transition-property

指定參與過渡的屬性(默認(rèn)是全部屬性),舉例:

transition-property: width, height;
transition-duration

設(shè)置各個(gè)屬性的過渡時(shí)間:

transition-property: width, height;
transition-duration: 1s, 2s;
/* 寬度變化進(jìn)行1秒,高度變化進(jìn)行2秒 */

注:
當(dāng)設(shè)置的時(shí)間和屬性數(shù)量不匹配時(shí),會(huì)循環(huán)賦值,例如有4個(gè)參與過渡的屬性,設(shè)置了3個(gè)過渡時(shí)間,那么第四個(gè)屬性的過渡時(shí)間就參照第一個(gè)的

transition-timing-funciton

設(shè)置過渡的運(yùn)動(dòng)軌跡(例如先變很快然后再慢、勻速等),舉例:

transition-timing-funciton: linear;
/* 勻速變化 */
transition-timing-funciton: steps(3, start);
/* 分3步變化,從初始樣式開始,適合時(shí)鐘那樣按幀數(shù)變化的場景 */
transition-delay

延遲觸發(fā),舉例:

transition-delay: 1s;

適合場景:例如某些樣式不希望鼠標(biāo)一到上面就觸發(fā),可能只是鼠標(biāo)不小心劃過,如果想要觸發(fā),就需要鼠標(biāo)停在上面一會(huì)兒

幀動(dòng)畫相關(guān)
使用步驟
  1. 通過@keyframes 動(dòng)畫名{}定義動(dòng)畫,可以通過fromto定義初始和結(jié)束狀態(tài),也可以通過xx%百分比來定義不同時(shí)段的狀態(tài)
  2. 通過animation屬性來使用動(dòng)畫,傳入的值依次為:動(dòng)畫名 動(dòng)畫時(shí)間 延遲執(zhí)行時(shí)間 執(zhí)行次數(shù) 變化效果 是否循環(huán)

舉例:

@keyframes change-color {
    0%, 50% {
        background: black;
    }
    25% {
        background: green;
    }
    100% {
        background: white;
    }
}
div {
    height: 100px;
    width: 100px;
    animation: change-color 4s 1s infinite linear alternate;
    /*使用change-color動(dòng)畫,執(zhí)行4s,延遲1s才開始,無限循環(huán),線性變換,
    動(dòng)畫一次周期結(jié)束后逆向播放(即變換樣式是:1->2->3->4->3->2->1->2->...)*/
}
animation-name

指定定義的幀動(dòng)畫名,可以指定多個(gè)

animation-duration

一次幀動(dòng)畫執(zhí)行的時(shí)間

animation-iteration-count

幀動(dòng)畫循環(huán)執(zhí)行多少次,對(duì)多個(gè)動(dòng)畫可以分別指定次數(shù),無限循環(huán)則設(shè)置infinite

animation-direction

幀動(dòng)畫執(zhí)行方向

animation-fill-mode

幀動(dòng)畫填充模式

animation-timing-function

分步執(zhí)行幀動(dòng)畫,舉例:

animation-timing-function: steps(3, start);
animation

前面樣式的組合寫法,舉例:

animation: changeColor forwards 2s;
svg樣式
fill

圖標(biāo)的填充顏色,舉例:

svg {
  fill: currentColor;
}

參考:http://www.itdecent.cn/p/c731edd7d66d

其他樣式
cursor

鼠標(biāo)光標(biāo)在元素上的顯示樣式,常用值如下:

auto  瀏覽器根據(jù)上下文自己決定
default  默認(rèn)是一個(gè)小箭頭
pointer  一個(gè)手指
text  編輯樣式
none  沒有鼠標(biāo)光標(biāo)顯示

注:
cursor還可以設(shè)置圖片,以及在圖片上的偏移位置,舉例:

cursor: url("xxx.png") 0 0, pointer;
/* 使用圖片來代替光標(biāo),其中在圖片上水平和垂直方向向上偏移為0,當(dāng)圖片不存在時(shí)使用pointer代替 */
list-style

li標(biāo)簽樣式,舉例:

list-style: none;  /* 不顯示前面的符號(hào) */
outline

設(shè)置元素的外輪廓,主要用于設(shè)置a/input元素focus時(shí)的輪廓效果,其不占用空間,默認(rèn)顯示在border外部,相關(guān)屬性:

outline-width  寬度
outline-style  樣式,如:solid/dotted
outline-color
ouline  上面3個(gè)的簡寫,和border用法差不多
outline-offset  outline和border的間距

例如focus效果去除,舉例:

:focus {
  outline: none;
}
visibility

控制元素是否可視,常用值如下:

visible  顯示元素
hidden  隱藏元素

注:
visibility: hidden/display: none區(qū)別:前者雖然隱藏了,但元素的寬高位置還是會(huì)占著,可以理解為"透明"了;后者則不但隱藏了,連寬高都沒了,可以理解為"完全消失"了

overflow

控制內(nèi)容溢出時(shí)的行為,常用值如下:

visible  溢出照樣可見
hidden  溢出隱藏
scroll  溢出可通過滾動(dòng)條查看,但不論是否溢出都會(huì)顯示滾動(dòng)條
auto  當(dāng)內(nèi)容溢出時(shí)則顯示滾動(dòng)條

注:
還有overflow-x/overflow-y屬性分別用于設(shè)置水平和垂直方向的溢出行為

filter

設(shè)置元素顯示樣式,舉例:

filter: blur(10px);
/* 圖片模糊展示 */
user-select

控制元素是否可被選中,常用值如下:

text  可以選中,也就是變藍(lán)色(默認(rèn))
none  文本不可被選中
all  當(dāng)雙擊子元素或者上下文時(shí),最頂層也同時(shí)被選中
contain  只能在當(dāng)前元素內(nèi)部選擇

參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/user-select

object-fit

指定替換元素的寬高適配方式,常用值如下:

fill  填充并拉伸
contain  保持寬高比縮放
cover  保持寬高比填充
none  保持原來尺寸
scale-down  選擇none和contain中更小的尺寸

參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit

object-position

指定替換元素在內(nèi)容框中的位置,舉例:

object-position: 50% 50%;
object-position: left top;
object-position: 50px 100px;
pointer-events

指定元素的鼠標(biāo)事件觸發(fā)機(jī)制,舉例:

// 不觸發(fā)點(diǎn)擊事件
pointer-events: none;

參考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/pointer-events

函數(shù)

var

可以使用定義的變量,舉例:

:root {
  --theme-color: blue;  // 定義變量--theme-color
}

body {
  background-color: var(--theme-color);  // 通過var獲取對(duì)應(yīng)變量
}

參考:
http://www.ruanyifeng.com/blog/2017/05/css-variables.html
https://developer.mozilla.org/zh-CN/docs/Web/CSS/--*
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties

calc

可以進(jìn)行不同單位之間的運(yùn)算,舉例:

width: calc(100% - 50px);  // 注意運(yùn)算符兩端要有空格

關(guān)鍵字

顏色相關(guān)
currentColor

用于指代當(dāng)前的顏色(color值,可以繼承自父元素),一般情況下可以理解成color: inherit;,但是對(duì)于其他顏色屬性(如:background-color/fill/...)想要保持和color值一致是,可以使用該關(guān)鍵字替代,舉例:

svg {
  fill: currentColor;
}

參考:
https://www.zhangxinxu.com/wordpress/2014/10/currentcolor-css3-powerful-css-keyword/
https://developer.mozilla.org/zh-CN/docs/Web/CSS/color_value

https://blog.csdn.net/weixin_30642305/article/details/99194229
https://blog.csdn.net/crper/article/details/52772817

居中方案

水平居中
行內(nèi)元素

對(duì)于塊級(jí)元素中的行內(nèi)元素如果希望居中,可以直接設(shè)置text-align: center;實(shí)現(xiàn)

塊級(jí)元素

如果是沒有脫標(biāo)的塊級(jí)元素,可以使用如下方案:

  • 對(duì)塊級(jí)元素本身通過設(shè)置margin: 0 auto;實(shí)現(xiàn)(如果沒成功,最好看看塊級(jí)元素的寬度是否本身占滿一行)
  • 對(duì)父元素使用彈性布局設(shè)置:
display: flex; 
justify-content: center;

如果是絕對(duì)定位元素,可以定位如下:

position: absolute; 
width: 寬度; 
left: 50%; 
margin-left: -寬度的一半;

即:左邊移動(dòng)到中間,然后再左移寬度的一半,這樣就能實(shí)現(xiàn)居中的效果
在不知道高度的情況下,絕對(duì)定位元素水平居中還可以實(shí)現(xiàn)如下:

position: absolute; 
left: 50%;
transform: translateX(-50%);

即:往右移動(dòng)一半,在通過transform往左移動(dòng)當(dāng)前位置的一半

垂直居中
行內(nèi)元素

對(duì)于塊級(jí)元素中的行內(nèi)元素如果希望居中,可以直接設(shè)置line-height: 父元素高度;實(shí)現(xiàn)

塊級(jí)元素

如果是沒有脫標(biāo)的塊級(jí)元素,可以對(duì)父元素使用彈性布局設(shè)置:

display: flex; 
flex-direction: column; 
justify-content: center;

如果是絕對(duì)定位元素,可以定位如下:

position: absolute; 
height: 寬度; 
top: 50%; 
margin-top: -高度的一半;

即:上邊移動(dòng)到中間,然后再往上移高度的一半,這樣就能實(shí)現(xiàn)居中的效果
在不知道高度的情況下,絕對(duì)定位元素垂直居中還可以實(shí)現(xiàn)如下:

position: absolute; 
top: 50%;
transform: translateY(-50%);

注:
絕對(duì)定位元素整體居中可以直接合并成下面這樣:

position: absolute; 
margin: auto;
left: 0;
right: 0;
top: 0;
bottom: 0;

原理:由于元素width = margin-left + left + 內(nèi)容width + right +margin-right,所以將left/right置0以后,再設(shè)置margin: auto使得margin-left/margin-right平分元素width減去內(nèi)容width的部分,就實(shí)現(xiàn)居中了

樣式參考

頁面呈灰白
html {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
}
滾動(dòng)條樣式

舉例:

::placeholder {
  color: rgba(0, 0, 0, 0.54);
  opacity: 1;
}

參考:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/::placeholder
https://www.cnblogs.com/sherryweb/p/11023311.html
https://developer.mozilla.org/zh-CN/docs/Web/CSS/::-webkit-scrollbar

簡單遮罩效果

首先設(shè)計(jì)一個(gè)display樣式將需要遮罩的部分覆蓋,并將其設(shè)為不可見(none),當(dāng)需要遮罩時(shí),再將其設(shè)置為block塊覆蓋顯示,代碼示例如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        .cover {
            position: fixed;
            top: 0;
            left: 0;
            height: 100%;
            width: 100%;
            background-color: rgba(0, 0, 0, 0.1);
            display: none;
            z-index: 1000;
        }
    </style>
</head>
<body>
    <button id="coverAll">點(diǎn)擊開啟遮罩</button>
<div class="cover">
    <div align="center" style="height: 100%; width: 100%; line-height: 500px; ">遮罩效果</div>
</div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script type="text/javascript">
    $("#coverAll").click(function () {
        $(".cover").css("display", "block");
        setTimeout(function () {
            $(".cover").css("display", "none");
        }, 5000)
    })
</script>
</html>

注意點(diǎn)

元素空格間隔問題

對(duì)于行內(nèi)級(jí)、inline-block的元素,如果代碼間有空格,則會(huì)導(dǎo)致元素間存在空格,因此有以下解決方式:

  • 代碼之間不要留空格
  • 用注釋來填中間的空格,例如:<span>aaa</span><span>bbb</span>
  • 設(shè)置font-size為0(內(nèi)部的元素可以再設(shè)置自己的font-size),但該方式在safari瀏覽器中無效
    注:
    img標(biāo)簽底下存在4px空隙問題:也是因?yàn)榭崭褚?,此時(shí)可以設(shè)置display: block;,或者設(shè)置font-size為0來解決問題
margin傳遞問題

margin-top傳遞:如果塊級(jí)元素的頂部線與其塊級(jí)父元素的頂部線重疊,那么這個(gè)塊級(jí)元素的margin-top會(huì)傳遞給父元素
margin-bottom傳遞:如果塊級(jí)元素的底部線與其塊級(jí)父元素的底部線重疊,那么這個(gè)塊級(jí)元素的margin-bottom會(huì)傳遞給父元素
解決方式:

  • 給父元素設(shè)置padding-top/padding-bottom
  • 給父元素設(shè)置border
  • 給父元素或者子元素設(shè)置display: inline-block
    建議:
  • margin一般是用來設(shè)置兄弟元素間的間距
  • padding一般是用來設(shè)置父子元素間的間距
margin折疊問題

垂直方向相鄰的兩個(gè)marginmargin-top/margin-bottom)可能會(huì)合并成一個(gè)margin,而水平方向上的margin則沒有這種問題
折疊后的最終結(jié)果:
如果都是正數(shù)或者都是負(fù)數(shù),都是取絕對(duì)值最大的那個(gè);如果有正有負(fù),那么取最大正數(shù)和最小負(fù)數(shù)相加
解決方式:

  • 只設(shè)置其中一個(gè)元素的margin
  • 使用padding替代margin
float元素高度坍塌問題

因?yàn)閒loat元素脫離了標(biāo)準(zhǔn)流,所以假如父元素當(dāng)中有float元素,那么會(huì)導(dǎo)致父元素認(rèn)為float元素沒有高度,從而造成高度坍塌問題(父元素當(dāng)中不存在高度)
解決方式:可以通過偽元素after添加高度,舉例:

div::after {
  content: "";
  display: "block"l
  clear: both;
  /* height: 0; */
  /* visibility: hidden; */
  /* 兼容低版本瀏覽器 */
}
邊框重疊變粗問題

參考:https://blog.csdn.net/YWB88888888/article/details/102944435

JS操作偽元素樣式問題

由于偽元素是無法直接通過JS進(jìn)行操作的,但我們可以通過操作偽元素對(duì)應(yīng)的標(biāo)簽樣式,從而實(shí)現(xiàn)偽元素樣式的操作,例如下面的代碼:

<html>
  <head>
    <meta charset="utf-8" />
    <title>test</title>
    <style>
      .test {
        position: relative;
        width: 100px;
        height: 100px;
        background: red;
        visibility: hidden; /* 設(shè)置標(biāo)簽不可見 */
      }
      .test::before {
        content: "";
        position: absolute;
        top: 100%;
        left: 0;
        width: inherit;
        height: inherit;
        background: inherit;
        visibility: visible;  /* 設(shè)置偽元素可見 */
      }
    </style>
  </head>
  <body>
    <div class="test"></div>
  </body>
  <script>
    document.querySelector(".test").addEventListener("click", (e) => {
      // 偽元素繼承標(biāo)簽元素樣式,通過修改標(biāo)簽元素樣式來修改偽元素樣式
      e.target.style.background = "#" + parseInt(Math.random() * (10 ** 6));
    });
  </script>
</html>

我們通過將原本的標(biāo)簽隱藏,只讓偽元素顯示,而偽元素的樣式則繼承于標(biāo)簽,當(dāng)改變標(biāo)簽樣式時(shí),偽元素樣式也會(huì)一同改變,從而實(shí)現(xiàn)動(dòng)態(tài)改變偽元素樣式的效果

注:
這里通過visibility: hidden;樣式設(shè)置標(biāo)簽隱藏,但不能用display: none;來設(shè)置,否則該標(biāo)簽實(shí)際上就相當(dāng)于不存在,而對(duì)應(yīng)的偽元素也就無法顯示了

img標(biāo)簽和background-image對(duì)比
  • img標(biāo)簽:html元素;占用具體空間;右鍵能查看圖片鏈接;能被搜索引擎收錄;優(yōu)先加載
  • background-image:css樣式;不占用空間;支持雪碧圖;等html加載完以后才開始加載
選擇
  • 網(wǎng)頁中重要部分使用img標(biāo)簽
  • 影響不大的圖片使用background-image
瀏覽器兼容

由于在不同的瀏覽器內(nèi)核里規(guī)定的標(biāo)準(zhǔn)不同,所以相同的代碼可能在不同的瀏覽器里顯示也就不同,因此往往需要設(shè)置對(duì)應(yīng)的兼容性,這里介紹幾個(gè)常見的內(nèi)核以及對(duì)應(yīng)添加兼容的前綴:

  • Webkit:safari、chrome、搜狗、360等瀏覽器的內(nèi)核,前綴為:-webkit-
  • Gecko:firefox的內(nèi)核,前綴為:-moz-
  • Trident:ie的內(nèi)核,前綴為:-ms-
  • Presto:opera的內(nèi)核,前綴為:-o-

因此要設(shè)置樣式兼容性的話,一般在該樣式前面加上對(duì)應(yīng)瀏覽器內(nèi)核的前綴即可

其他

瀏覽器私有前綴
-o/-xv-  opera
-ms-/mso-  IE
-moz-  firefox
-webkit-  safari/chrome
瀏覽器重置樣式

由于標(biāo)簽往往有默認(rèn)樣式,并且在不同的瀏覽器當(dāng)中可能展示的不同,所以為了避免樣式差異以及去除一些不喜歡的默認(rèn)樣式,可以重置一些標(biāo)簽的初始樣式,例如body去除邊框、a去除下劃線、li去除前面的修飾符

參考:css reset

編碼規(guī)范
  • 絕對(duì)值小于1的小數(shù)可以去掉前面的0,舉例:.5
  • 樣式編寫順序建議:定位、盒子模型、...
查看CSS瀏覽器兼容情況

caniuse.com

雪碧圖

將各種小圖片合到一張圖里,然后利用background-position來定位到對(duì)應(yīng)的圖片進(jìn)行展示

優(yōu)勢(shì)
  • 減少請(qǐng)求數(shù)量(只需請(qǐng)求一張圖,而無需對(duì)每個(gè)小圖都進(jìn)行請(qǐng)求),減輕服務(wù)器壓力
  • 減小圖片總的大小
  • 無需為每個(gè)圖片單獨(dú)命名
    雪碧圖生成網(wǎng)站:https://www.toptal.com/developers/css/sprite-generator/
官方文檔閱讀

MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS

文檔字段
name  屬性名
value  屬性可選值
initial  默認(rèn)值
applies to  適用于元素(all elements-所有元素;block-level elements-塊級(jí)元素)
inherited  是否可繼承
percentages  是否可用百分比
media  媒體組
computed value  如何計(jì)算值
animatable  是否可動(dòng)畫
屬性取值參考
  • 并列(多個(gè)值用空格隔開):每個(gè)值都必須按順序?qū)?/li>
  • |:只能有一個(gè)
  • ||:可以有一個(gè)或多個(gè),且任意順序
  • &&:每個(gè)都必須出現(xiàn),且任意順序
  • []:分組,代表是一個(gè)整體
CSS繪圖參考

簡單圖形:http://www.itdecent.cn/p/1a920aa066ad
實(shí)際案例:https://segmentfault.com/u/lancer07

CSS預(yù)編譯語言
SCSS

是一種兼容CSS3,同時(shí)又有更加高級(jí)語法操作的語言,目前在前端開發(fā)中逐漸被廣泛應(yīng)用
參考:http://www.itdecent.cn/p/a99764ff3c41

Sass、SCSS和CSS區(qū)別

參考:https://blog.csdn.net/lsy__lsy/article/details/80305593

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容