CSS—浮動(dòng)(內(nèi)容多圖,建議wifi下打開)


浮動(dòng)是一個(gè)很有用的屬性,對于網(wǎng)頁布局,特殊效果的實(shí)現(xiàn)都很有用。

  • float的基本原理
    float:left;//元素向左浮動(dòng)
    float:right;//元素向右浮動(dòng)

為div1設(shè)置 float:left之后

div為塊級元素,所以每次新建都會(huì)另起一行。我們想象一下,這些未設(shè)置浮動(dòng)的div盒子是在一個(gè)文檔流內(nèi)(假想一個(gè)平面內(nèi)),當(dāng)設(shè)置div1為左浮動(dòng)后,他就在另一個(gè)高于原文檔流的文檔流內(nèi)(假想,在高于原來平面的一個(gè)平面內(nèi)),但是div1已經(jīng)在最左側(cè),所以左浮動(dòng),對于他沒有表現(xiàn)上的改變,div2的改變才是需要關(guān)注的,這么復(fù)雜的原理,瀏覽器肯定也會(huì)出現(xiàn)兼容性的問題。
IE7(包括IE7以前)

現(xiàn)代瀏覽器及IE7以后

【個(gè)人情緒】為什么一提到兼容性,IE6.7就出來。。因?yàn)槟菐啄?,IE懈怠了,以為自己唯我獨(dú)尊,所以不更新內(nèi)核,渲染出什么來了???。?br> 明顯,IE6、7是不按照我上面寫的浮動(dòng)機(jī)制渲染的,IE7以后及現(xiàn)代瀏覽器,都是按照我上面寫的浮動(dòng)機(jī)制來的。
div1脫離文檔流,div2占據(jù)div1原有文檔流的位置。
細(xì)心一下,可以發(fā)現(xiàn),div2上的文本內(nèi)容被div1擠下去了,對于這種顯現(xiàn),我假象了一下,文本內(nèi)容與文本內(nèi)容的父元素不是在一個(gè)文檔流內(nèi),而是高于父元素的文檔流,這樣就可以看到文本div2與浮動(dòng)的div1在一個(gè)文檔流內(nèi)。

div1與div2分別設(shè)置左浮動(dòng)后的效果

div1與div2均設(shè)置左浮動(dòng)后,二者就在一個(gè)文檔流內(nèi),所以就一個(gè)接著一個(gè)排著了。
div1左浮動(dòng),div2右浮動(dòng)

【11月22日補(bǔ)充】
初始

將第二個(gè)設(shè)為浮動(dòng)后,第三個(gè)在原來第二個(gè)的位置

可見,元素div2設(shè)置浮動(dòng)后,并沒有跑到div1的地方,是我以前誤以為設(shè)置浮動(dòng)后,就會(huì)浮動(dòng)于另一層,div2應(yīng)該也可以浮動(dòng)到div1的上面,其實(shí)不是,只是浮動(dòng)到他所在的這一行的最左面。

  • float的應(yīng)用

  • 關(guān)于網(wǎng)頁布局
    #box{
    /height: 150px;/
    width: 205px;
    margin: 0 auto;
    border: 5px solid green;
    }
    #qq{
    height: 100px;
    width: 100px;
    background: red;
    float: left;
    }
    #aa{
    height: 100px;
    width: 100px;
    background: blue;
    float: right;

         }
         #gg{
             clear: both;       //清除浮動(dòng)
             height: 50px;
             width: 205px;
             background: yellow; 
         }
     //以上是<style></style>內(nèi)的設(shè)置
     <div id="box">
         <div id="qq">div1</div>
         <div id="aa">div2</div>
         <div id="gg">div3</div>             
     </div>
    

效果

上圖是參照上面的代碼,最后生成的效果,div1與div2在box內(nèi)分別左浮動(dòng)與右浮動(dòng),box分別設(shè)置了寬度與高度,并且作了居中處理。div3也可以正常的在div1與div2之下。是我們希望的樣子。
但是下圖是在這樣的代碼下的效果
<style type="text/css">
#box{
border: 5px solid green;
}
#qq{
height: 100px;
width: 100px;
background: red;
float: left;
}
#aa{
height: 100px;
width: 100px;
background: blue;
float: right;

        }
        #gg{
            height: 50px;
            width: 205px;
            background: yellow; 
        }
    </style>
效果

由于div1與div2均設(shè)置浮動(dòng),脫離文檔流后,div3占據(jù)了他們原來的位置。
父元素box沒有設(shè)置寬度,所以與body同寬,橫跨了整個(gè)頁面。因?yàn)槔锩嬗袃?nèi)容div3所以其高度同div3的高度。這也是未采取任何拯救措施的樣子。

現(xiàn)在,就來拯救一下,網(wǎng)頁布局

第一步、去除浮動(dòng)
#gg{clear: both;}//both:為左右浮動(dòng)都去。同理可以去除左浮動(dòng)left,右浮動(dòng)right

效果

發(fā)現(xiàn)去除掉div1與div2的浮動(dòng)后,div3則排在了div1與div2那一行的下面。而且外層div(即box)也將高度擴(kuò)大了。
第二步、設(shè)置外層div的寬度
#box{width: 205px;}
效果

發(fā)現(xiàn)已經(jīng)初步達(dá)到,我們預(yù)期的效果。也證實(shí)了,子元素浮動(dòng)的邊界是父元素。
第三步、居中
text-line
body標(biāo)簽內(nèi)進(jìn)行text-align=center只會(huì)使body內(nèi)所有有文本的盒子呢,文本內(nèi)容居中。所以達(dá)不到,我們想要的效果。
效果

margin
是盒子的外邊界,關(guān)于css盒子的概念,我會(huì)另寫一篇的。
#box{margin: 0 auto;}//前提設(shè)置了寬度width
效果

  • 首字符浮動(dòng)
    這是對文本內(nèi)容的布局,我習(xí)慣在文本內(nèi)容布局之前,對文本內(nèi)容的padding與magin均清零。對段落p的行高,字體進(jìn)行聲明,避免瀏覽器默認(rèn)效果的不同,導(dǎo)致網(wǎng)頁不兼容。而且有時(shí)候,文本內(nèi)容選擇的字體也會(huì)導(dǎo)致瀏覽器不兼容。
    p{
    margin: 0;
    padding: 0;
    height: 1rem;
    line-height: 1.5rem;
    }//默認(rèn)標(biāo)準(zhǔn)化設(shè)置,你面瀏覽器的默認(rèn)效果
    #sap
    {
    padding: 0 15px;
    float:left;
    font-size: 4.5rem;
    font-weight: bold;
    line-height:4.45rem;
    }
    //html結(jié)構(gòu)設(shè)置
    <p>
    <span id="sap">T</span>This is some text. This is some text.
    This is some text. This is some text. This is some text.
    This is some text.……This is some text.
    </p>
    我們希望的樣子

    藍(lán)色部分是我標(biāo)注的,每一個(gè)元素的設(shè)置都是有拿捏的。
    來看一下失敗的例子。
  • 未對p進(jìn)行初始標(biāo)準(zhǔn)化設(shè)置
    導(dǎo)致網(wǎng)頁效果的差異性


    左面谷歌,右面IE
  • 使用了特殊字體
    IE對該字體不是很兼容,發(fā)現(xiàn)該字體并沒有居中


    左火狐,右IE

    剛才我并沒有對字體進(jìn)行標(biāo)準(zhǔn)化設(shè)置,網(wǎng)頁也會(huì)出現(xiàn)不一樣的效果,所以對字體也應(yīng)該盡量的同一。

  • line-height的設(shè)置
    左:line-height:4.6rem,右:line-height:4.5rem

    為什么會(huì)出現(xiàn)僅因?yàn)?.1rem的差距,就有這樣的差距呢?
    首先,需要知道span標(biāo)簽,為行內(nèi)元素,不具備高寬的設(shè)置,其高是由內(nèi)容決定。在單行,文本情況下,line-height的高度決定了其高度。而這樣也恰巧滿足了line-height=height。導(dǎo)致文本內(nèi)容居中。然后在看下圖就明白了。
    QQ截圖20141120133114.png

    浮動(dòng)元素右面的段落每一個(gè)的line-height為1.5rem,三行,為4.5rem。當(dāng)浮動(dòng)元素設(shè)置為4.6rem時(shí)必然會(huì)占用右面下一個(gè)段落的位置,導(dǎo)致左面出現(xiàn)空白。
    歡迎補(bǔ)充與指正
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,109評論 1 92
  • 本課來自http://www.imooc.com/learn/9請不要用作商業(yè)用途。 HTML5 HTML介紹 H...
    PYLON閱讀 3,447評論 0 5
  • 本文以div元素布局為例。教程開始:首先要知道,div是塊級元素(div與span),在頁面中獨(dú)占一行,自上而下排...
    TW妖妖閱讀 426評論 0 1
  • 本文為轉(zhuǎn)載文章,轉(zhuǎn)載地址:經(jīng)驗(yàn)分享:CSS浮動(dòng)(float 寫在前面的話: 如果讀者理解CSS盒子模型,但對于浮動(dòng)...
    翻炒吧蛋滾飯閱讀 1,117評論 1 14
  • CSS浮動(dòng) 首先div是塊級元素,在頁面中獨(dú)占一行,自 上而下排列。 以上可以看出,即使div1de寬度很小,頁...
    xf0128閱讀 418評論 0 1

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