css基礎

css

1、盒模型

頁面渲染時,dom元素纔有的 佈局模型。可以通過 box-sizing 進行設置。根據計算寬高的區域可分爲:

  • content-box(W3C標準盒模型)
  • border-box(IE盒模型 width包含padding和border)
  • padding-box (padding計算入width內)

ie8+瀏覽器支持content-box和border-box;
ff則支持全部三個值。
-webkit-box-sizing: 100px; // for ios-safari, android
-moz-box-sizing:100px; //for ff
box-sizing:100px; //for other

<style type="text/css">
    .content-box{
        box-sizing:content-box;
        -moz-box-sizing:content-box;
        width: 100px;
        height: 100px;
        padding: 20px;
        border: 5px solid #E6A43F;
        background: blue;
    }
    .padding-box{
        box-sizing:padding-box;
        -moz-box-sizing:padding-box;
        width: 100px;
        height: 100px;
        padding: 20px;
        border: 5px solid #186645;
        background: red;                
    }
    .border-box{
        box-sizing:border-box;
        -moz-box-sizing:border-box;
        width: 100px;
        height: 100px;
        padding: 20px;
        border: 5px solid #3DA3EF;
        background: yellow;
    }
</style>

clipboard.png

2、BFC

塊兒級格式化上下文,是一個獨立的渲染區域,讓處於BFC內部的元素與外部的元素相互隔離,使內外元素的定位不會相互影響

IE下爲Layout,可通過zoom:1觸發

功能

  • 使 BFC 內部浮動元素不會到處亂跑;
  • 和浮動元素產生邊界。
    方法:

    • overflow: auto 讓浮動的內容和周圍的內容登高
    • overflow: hidden 外邊距塌陷
    • display: flow-root 它可以創建無副作用的BFC
`給 <div> display: flow-root 屬性後,<div> 中的所有內容都會參與BFC,浮動的內容不會從底部溢出。`

觸發條件:

  • 根元素(<html>)
  • 浮動元素(元素的 float 不是 none)
  • 絕對定位元素(元素的 position 爲 absolute 或 fixed)
  • 行內塊元素(元素的 display 爲 inline-block)
  • 表格單元格(元素的 display爲 table-cell,HTML表格單元格默認爲該值)
  • 表格標題(元素的 display 爲 table-caption,HTML表格標題默認爲該值)
  • 匿名錶格單元格元素(元素的 display爲 table、table-row、 table-row-group、table-header-group、table-
  • footer-group(分別是HTML table、row、tbody、thead、tfoot的默認屬性)或 inline-table)
  • overflow 值不爲 visible 的塊元素
  • display 值爲 flow-root 的元素
  • contain 值爲 layout、content或 paint 的元素
  • 彈性元素(display爲 flex 或 inline-flex元素的直接子元素)
  • 網格元素(display爲 grid 或 inline-grid 元素的直接子元素)
  • 多列容器(元素的 column-count 或 column-width 不爲 auto,包括 column-count 爲 1)
  • column-span 爲 all 的元素始終會創建一個新的BFC,即使該元素沒有包裹在一個多列容器中(標準變更,Chrome bug)。

html
float!=none
position = absolute || fixed
display = inline-block || flow-root || table、table-row、 table-row-group、table-header-group、table-

應用場景

  • 阻止margin重疊
  • 可以包含浮動元素 —— 清除內部浮動(清除浮動的原理是兩個div都位於同一個 BFC 區域之中)
  • 自適應兩欄佈局
  • 可以阻止元素被浮動元素覆蓋

層疊上下文

層疊上下文
層疊等級
層疊順序
z-index

  • 普通元素的層疊等級優先由其所在的層疊上下文決定。
  • 層疊等級的比較只有在當前層疊上下文元素中才有意義。不同層疊上下文中比較層疊等級是沒有意義的。

如何產生層疊上下文

  • HTML中的根元素<html></html>本身j就具有層疊上下文,稱爲“根層疊上下文”。
  • 普通元素設置position屬性爲非static值並設置z-index屬性爲具體數值,產生層疊上下文。
  • CSS3中的新屬性也可以產生層疊上下文。

    • 父元素的display屬性值爲flex|inline-flex,子元素z-index屬性值不爲auto的時候,子元素爲層疊上下文元素;
    • 元素的opacity屬性值不是1;
    • 元素的transform屬性值不是none;
    • 元素mix-blend-mode屬性值不是normal`;
    • 元素的filter屬性值不是none;
    • 元素的isolation屬性值是isolate;
    • will-change指定的屬性值爲上面任意一個;
    • 元素的-webkit-overflow-scrolling屬性值設置爲touch。

clipboard.png

4、居中佈局

  • 水平居中

    • 行內元素:text-align: center
    • 塊兒級元素:margin:0 auto
    • absolute + transform

      • (1) 絕對定位元素的定位基準點是其有定位元素的祖先元素;
      • (2) translate要做偏移,是相對於自身的中心點而言,如果用百分比做單位,參考值就是本身元素的寬度。
    • flex + justify-cennter:cennter
  • 垂直居中

    • ling-heigth:height
    • absolute + transform
    • flex + align-item:center
.center {
          position:absolute;
           top:50%;
           left:50%;
           width:200px;
           height:200px;
           margin-top:-200/2px;
           margin-left:-200/2px;
}
.center {
           position:relative;
            top:50%;
            left:50%;
            width:200px;
            height:200px;
            background:red;
            transform:translate(-50%,-50%); /* 可以做很多動畫效果,不兼容 */
            transform-origin:50% 50%; /* 設置旋轉元素的基點位置 不兼容*/
}

flex佈局解決的一些問題

  • 將內容塊垂直居中於其父級內部。
  • 無論有多少寬度/高度,使容器的所有子容器佔用相同數量的可用寬度/高度。
  • 使多列布局中的所有列採用相同的高度,即使它們包含不同的內容量。
section {
  display: flex; /* 子元素在section 中水平平均分佈*/
}

clipboard.png
佈局方向

  • flex-direction: row(默認) || column排布方向
  • flex-wrap: wrap; 自動換行 子元素添加高度 flex: 200px;
flex-direction: row;
flex-wrap: wrap;

等價於
flex-flow: row wrap;

clipboard.png

還有好多。。。

5、選擇器優先級

  • !important > 行內樣式>ID選擇器 > 類選擇器 > 標籤 > 通配符 > 繼承 > 瀏覽器默認屬性
  • 選擇器從右向左解析

6、清浮動,防止父級塌陷

  • 通過增加尾元素清除浮動

    • :after/ <br/>:clear:both
  • 創建父級BFC 如:display: flow-root
  • 父級設置高度

link與@import的區別

  • link是XHTML標籤
  • link標籤除了可以加載css外,還可以做很多其他的事情,如定義RSS,定義rel連接屬性等,@import只能加載CSS。
  • 加載順序的差別:當一個頁面被加載的時候,link引用的CSS會同時被加載,而@import引用的CSS會等到頁面全部被下載完再加載。所以有時候瀏覽@import加載CSS的頁面時會沒有樣式(就是閃爍),網速慢的時候還挺明顯。
  • 使用dom控制樣式時的差別。當時用JavaScript控制dom去改變樣式的時候,只能使用link標籤,因爲@import不是dom可以控制的
  • @import可以在css中再次引入其他樣式表

8、css預處理器(sass/less/postcss)

css預處理器的原理:是將類css語言通過webpack編譯 轉換成瀏覽器可讀的真正css,在這層編譯之上,便可賦予css更多強大的功能,常用功能:

  • 嵌套
  • 定義變量
  • 循環語句
  • 條件語句
  • 自動前綴
  • 單位轉換
  • minxin複用

css動畫

  • transition:過渡動畫

    • transition-property:屬性
    • transition-duration:間隔
    • transition-timing-function:曲線
    • transition-delay:延遲
  • animation/keyframes

    • animation-name:動畫名稱,對應@keyframes
    • animation-timing-function:曲線
    • animation-delay:延遲
    • animation-iteration-count:次數

      • infinite:循環動畫
    • animation-direction:方向

      • alternate:反向播放
    • animation-fill-mode:靜止模式

      • forwards:停止時保留最後一幀
      • backwards:停止時回到第一幀
      • both:同時運用
    • 常用鉤子:animationend
  • 動畫屬性:儘可能的使用動畫屬性進行動畫,能擁有較好的性能表現

    • translate
    • scale
    • rotate
    • skew
    • opacity
    • color
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章