国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端筆記之CSS(下)浮動&BFC&定位&Hack

番茄西紅柿 / 3359人閱讀

摘要:并最終窗體自上而下分成一行行,并在每行中從左至右的順序排放元素。宋體清除浮動這是專業術語,其實就是需要我們解決浮動帶來的影響宋體父元素的高度塌陷宋體。相對定位的參考點是自身。

 

一、浮動

1.1 各個語言的主要知識點

HTML:標簽語義化(那么怎么樣布局才是合理的?沒有絕對的對和錯)

CSS

  樣式:

  布局:

    標準流(標準文檔流、普通文檔流):盒子模型(width/height+padding+border+margin)  塊元素行內元素

    浮動流:產生?影響?如何解決?

    定位流:靜態定位(不定位)  相對定位  絕對定位  固定定位

 

JavaScript(JS)

 

  ECMAScript:語法

 

  DOM

 

  BOM

 

1.2 浮動產生的背景?

背景:浮動產生的初衷是為了解決圖文排版

早期我們的網站中大量存在圖片和文字 沒有那么多絢麗的東西,比如輪播圖也是借助flash實現的。

早期的布局是通過table實現的,現在布局div+css

浮動一開始就是為了解決圖文排版的:

如左側就是給圖片加一個樣式img{float:left}.

 


 

1.3 標準流

又稱標準文檔流 普通文檔流

說白了就是一個“默認”css布局狀態。文檔流指的是元素排版布局過程中,元素會自動從左往右,從上往下的流式排列。并最終窗體自上而下分成一行行,并在每行中從左至右的順序排放元素。

在標準文檔流中父元素的高度可以由子元素撐開

標準文檔流:

塊元素:①獨自占一行(參考目標:父元素)

1.4 浮動的演變過程

①我想讓兩個li排列到一行 并且li都有寬度和高度(那么我們的處理方法把li設置為行內塊元素)

 

②但是由圖得知 設置完行內塊元素后 會出現間隙(在圖中的紅色區域)

③經過分析得知 紅色區域的間隙 是由代碼中li標簽換行導致的 所以我們把li放到一行

 

④但是我們知道 代碼在一行 不利于我們開發和后期的維護

⑤浮動橫空出世

 


 

1.5 浮動屬性

 

 

left左浮動:那么該元素會緊貼著父元素的左邊,如果左邊已經有浮動的元素 那么他會依次向后排列

right右浮動:那么該元素會緊貼著父元素的右邊,如果右邊已經有浮動的元素 那么他會依次向后排列

 

.one{
        /*height: 100px;*/
        /*width: 100px;*/
        /*浮動屬性*/
                
        float: left;
        background-color: green;
}
.two{
        float: right;
        background-color: blue;
}     


1.6 浮動帶來的影響

對自身:無論行內元素還是塊元素都可以設置寬高,已經破壞了該元素在標準文檔流里面的屬性

對父元素:會造成父元素的高度塌陷(在標準文檔流里面父元素高度由子元素撐開 浮動完父元素高度就不能被子元素撐開了)

 


 

1.7 清除浮動

清除浮動就是:解決父元素高度塌陷的問題。

清除浮動這是專業術語,其實就是需要我們解決浮動帶來的影響(父元素的高度塌陷)

 

1.7.1 給父元素加高度

ul{
    /*清除浮動方案1*/
    height: 200px;
    border: 5px solid #000;
}

 

1.7.2 clear:both;

 

由1.7.1得知使用這種方法清除浮動前提是:必須知道子元素的高度

用法:在浮動元素的緊后面添加一個空標簽給該標簽設置css樣式為clear:both;

 

<ul>
    <li class="one">111li>
    <li class="two">222li>
    
    <div style="clear: both;">div>
ul>
測試文本

1.7.3 利用偽元素

利用clear:both;清除浮動帶來的影響,是我們之前的主流寫法。但是隨著咱們科技的進步,公司越來越對SEO優化愈加重視。搜索引擎爬取是會認為這是一個廢標簽(搜索引擎會不開心 她不開心就會導致你的頁面質量下降)

所以現在主流的清除浮動是利用偽類清除 寫一個清除浮動的類 然后把這個類加給浮動元素的父元素。

<style type="text/css">
    /*before  after*/
.clearfix:after{
                    content: "";
                    clear: both    ;
                    display: block;
}
.clearfix{
                *zoom: 1;/*兼容IE67*/
}
style>

<body>
<ul class="clearfix">
    <li class="one">111li>
    <li class="two">222li>
ul>
測試文本-利用偽類
body>
                

 

1.7.4 overflow:hidden;

當然第三種解決方案已經很完美了。咱們現在說的這種是利用的另一種機制(BFC-塊級格式化上下文)實現的。

實現:給浮動元素的父元素設置以下css{overflow:hidden}.

ul{
    overflow: hidden;/*BFC機制的觸發條件之一*/
    border: 5px solid #000;
}

2.1 BFC

2.1.1 概念

在講 BFC 之前,我們先來了解一下常見的定位方案,定位方案是控制元素的布局,有三種常見方案:

普通流 (normal flow)

在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個過程中,行內元素水平排列,直到當行被占滿然后換行,塊級元素則會被渲染為完整的一個新行,除非另外指定,否則所有元素默認都是普通流定位,也可以說,普通流中元素的位置由該元素在 HTML 文檔中的位置決定。

浮動流 (float)

在浮動布局中,元素首先按照普通流的位置出現,然后根據浮動的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環繞相似。

 定位流(position)

在絕對/固定定位布局中,元素會整體脫離普通流,因此絕對定位元素不會對其兄弟元素造成影響,而元素具體的位置由絕對定位的坐標決定。

什么是BFC呢?Formatting context(格式化上下文) W3C CSS2.1 規范中的一個概念。它是頁面中的一塊渲染區域,并且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關系和相互作用。這個css布局的一種機制。具有 BFC 特性的元素可以看作是隔離了的獨立容器,容器里面的元素不會在布局上影響到外面的元素,并且 BFC 具有普通容器所沒有的一些特性。

通俗一點來講,可以把 BFC 理解為一個封閉的大箱子,箱子內部的元素無論如何翻江倒海,都不會影響到外部。


2.1.1 滿足條件

滿足下列CSS聲明之一的元素便會生成BFC

1、根元素或其它包含它的元素

2float的值不為none

3overflow的值不為visible

4position的值不為static

5display的值為inline-blocktable-celltable-caption

6flex boxes (元素的display: flexinline-flex)

注:也有人認為display: table能生成BFC,我認為最主要原因是table會默認生成一個匿名的table-cell,正是這個匿名的table-cell生成了BFC

條件

根元素/根節點

html

float

leftright

overfloow

hidden

display

inline-blocktable-celltable-caption

position

fixedabsoult

2.1.3BFC 特性及應用

  1. 同一個 BFC 下外邊距會發生折疊-后面詳細闡述
  2. BFC 可以包含浮動的元素-清除浮動   
  3. 3.BFC 可以阻止元素被浮動元素覆蓋-后續課程深入

三、定位

定位的基本思想很簡單,它允許你定義元素框相對于其正常位置應該出現的位置,或者相對于父元素、另一個元素甚至瀏覽器窗口本身的位置。顯然,這個功能非常強大,也很讓人吃驚。

定位屬性的值:

屬性

屬性值

含義

position

static

靜態定位(不定位|默認值)

position

relative

相對定位

position

absoult

絕對定位

position

fixed

固定定位

 

無論是哪種定位都具有5個屬性:

屬性

備注

單位

left

px,%

top

px,%

right

px,%

bottom

px,%

z-index

層級

 

如果有人同時寫了left和right,那么以left為準;同時寫了top和bottom那么以top為準。


3.1固定定位fixed

固定定位是定位屬性的一種,他的參照物可視窗口(可以看的的窗口)

圖中藍色框框住的地方就是咱們俗稱的可視窗口

 

3.1.1應用場景

 我們常見的比如:右側固定導航、京東樓梯導航、返回頂部···這些都是利用的固定定位(IE6固定定位不兼容)。

3.1.2原理講解

固定定位會脫離標準流,固定定位的參考點,是瀏覽器,固定定位無法以某個盒子作為參考點。

作用:實現盒子固定在瀏覽器可視窗口內

通過設置偏移量進行控制移動的位置,定位偏移量屬性:

 

就是說無論頁面怎么滾動他就是根據可視窗口定位的雷打不動。如圖:雖然滾動條滾動了但是div的位置依然不動,就是這么神奇。網頁中右側固定導航欄、返回頂部,都是利用這個特性實現的。

div {
            width: 50px;
            height: 50px;
            background-color: red;
            /*固定定位-可視窗口*/
            position: fixed;
            left: 50px;
            top: 50px;
        }

3.2相對定位relative

相對定位的元素,會在原來的位置“留坑”,不管這個盒子被移動到什么地方,這個坑永遠存在,并且盒子的margin會影響別人,“形影分離”。

相對定位的參考點是自身。

 

注意事項:

 ①相對定位不會破壞標準文檔流,占標準流的位置,并且不能改變盒子顯示模式

 ②那么①的意思是說:相對定位會在原有位置留下一個”坑”(占著茅坑不拉屎)

 ③相對定位的參考點:以自身為參考物(起點),就是相對于原來自己所在的位置進行移動

 ④定位偏移屬性最好是一對,從上下位移屬性選其一,從左右位移屬性選其一。

 

應用場景:相對定位一般不使用,它經常會配合絕對定位使用。

 


3.3絕對定位absoult

絕對定位的參考點:有定位屬性(relative,absult,fixed)的祖先元素(包括父元素、父元素的父元素、父元素的父元素的父元素···),如果說找到最外層都沒有發現定位屬性,那么它參考body(頁面)。

如果bottom定位,就是瀏覽器首屏的左下角或右下角。

 


 

3.4層級屬性z-index

3.4.1 基本原理

 

層級屬性只有定位元素才具備,他是用來提升層級的。

z-index他的取值是數值,數值越大層級越高。默認是0.

 

 

.mask {
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.5);
            position: fixed;
            left: 0;
            top: 0;

            /*數值越大層級越高*/
            /*z-index: 99;*/
        }

        a {
            z-index: -99;
        }

3.4.2z-index堆疊規則

在堆疊上下文(stacking context)中 ,子元素的堆疊順序還是按照上述規則。重點是,子元素的z-index值只在父元素范圍內有效。子堆疊上下文被看做是父堆疊上下文中一個獨立的模塊,相鄰的堆疊上下文完全沒關系。

總結幾句:

渲染的時候,先確定小的stacking context中的順序,一個小的stacking context確定了以后再將其放在父stacking context中堆疊。有種由內而外,由小及大的感覺。

 如圖紅色盒子z-index:99綠色盒子z-index:9,span1z-index:-999,span2z-index9999。但是span2還是被span1壓著因為父元素已經絕對他們自身的層級了。


3.5 盒子居中

 

·方法一:

 

    

div {
            width: 300px;
            height: 200px;
            background-color: red;

            position: absolute;
            left: 50%;
            top: 50%;
            /* left: -150px; */
            margin-left: -150px;
            margin-top: -100px;
        }

top:50%;指的是元素的上邊線是50%的位置

left:50;指的是元素的左邊線是50%的位置

所以要往回拉一半自身的寬度和高度。

 


 

·方法二:

div {
            width: 312px;
            height: 275px;
            background-color: red;

            /* 下面這種盒子居中的方案 很完美可以不受盒子寬高的限制 但是不好理解 */
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            margin: auto;
            /* 五馬分尸 */
        }

四、Hack

Hack,別被名字嚇到了! Hack就是針對不同的瀏覽器去寫不同的HTML、CSS樣式,從而讓各瀏覽器能達到一致的渲染效果。

Hack分為兩大類: HTML hack 和 CSS hack

HTML HACK:

 

CSS HACK又分為兩類: 值Hack 和 選擇器Hack

值Hack:
    /* IE 6 */ 
    .selector { _color: blue; }    
    .selector { -color: blue; } 

    /* IE 6/7 - any combination of these characters:    
    ! $ & * ( ) = % + @ , . / ` [ ] # ~ ? : < > | */ 
    .selector { !color: blue; }    
    .selector { $color: blue; }    
    .selector { &color: blue; }    
    .selector { *color: blue; } 

    /* IE 8/9 */ 
    .selector { color: blue