CSS浮動(二)---Float

重新認識float

2.1.??? 誤解和“誤用”

  既然提到“誤用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“誤用”加了引號,就說明這樣的使用并不是真正的誤用,而是誤打誤撞使用之后,帶來了真正的效果。

  這樣一問大家,我想絕大多數用float都是為了——橫向排版、或者多列布局。這樣的使用是正確的,大部分人都這樣使用,bootstrap的柵格系統也是使用了float來實現的,并且在css3被普及之前,多列布局的最佳解決方案也是使用float——要不然你就用table。

  但是,這樣使用確實是對float的一種誤解和“誤用”,因為float被設計出來的初衷是用于——文字環繞效果。即,一個圖片一段文字,圖片float:left之后,文字會環繞圖片。

  

  但是,當時的多列布局和橫向排版主要是依靠table實現,后來人們見見的發現,使用table將導致代碼量大、混亂、不利于SEO,然后發現float+div是一個很不錯的排版解決方案,于是乎——過去幾年“css+div”頁面排版一直是一個熱門話題,也是各種高大上的面試題必考的一項。

  初學float的同學,你如果沒有從最基礎的知識入手,而是從網絡的零散之后或者同事同學的零散代碼學起的話,你可能只知道float是用來排版的,但是你卻不知道float的許多個特性,這就導致了你在使用float時的許多問題。不信請看下文。

2.2.??? 破壞性

  首先大家來看兩個demo,如下圖。第一個demo是一個簡單不過的例子,顯示效果也很正常。第二個demo,唯一的區別就在于<img>加了float:left,上層的<div>卻出現了“坍塌”現象。

  

  不過,這就是float的“破壞性”——float破壞了父標簽的原本結構,使得父標簽出現了坍塌現象。導致這一現象的最根本原因在于:被設置了float的元素會脫離文檔流。

  初次接觸“脫離文檔流”的朋友可以這樣理解:div是父親,img是它的兒子,原本好好的父子關系,原本爺倆可以體面的展示一個包含關系的效果。直到有一天,img被設置了float。老天爺(瀏覽器)規定,任何float元素都不允許再呆在自己的家族中,于是img被逐出家門,斷絕和div父子關系。于是乎,div沒有了img兒子,也就不能再展示這種父子的包含關系,于是兩者就各過各的,互不相干。——這樣一說,容易理解了吧?

  但是,永遠都不要忘記float被設計的初衷——實現文字環繞效果。當div中有文字時,文字還是會環繞在img周圍的。如下圖:

  

??????

  好了,大家現在已經知道了float具有破壞性,可能也有很多朋友之前就知道這一特性,但是你有沒有思考一下:float為什么會被設計成具有破壞性,為什么會脫離文檔流?這一點非常重要!其實原因非常簡單——為了要實現文字的環繞效果?

  有人可能會問:啊?你剛才不是說了float的初衷就是實現文字環繞效果嗎?和破壞性有啥關系?

  這時我會反問你:如果float不讓父元素坍塌,能實現文字環繞效果嗎?給你兩個圖看看你就知道了。看不明白的可以給我留言討論。

  

2.3.??? 包裹性

  “包裹性”也是float的一個非常重要的特性,大家用float時一定要熟知這一特性。咱們還是先從一個小例子看起:

  

  如上圖,普通的div如果沒有設置寬度,它會撐滿整個屏幕,在之前的盒子模式那一節也講到過。而如果給div增加float:left之后,它突然變得緊湊了,寬度發生了變化,把內容“王福朋”三個字包裹了——這就是包裹性。div設置了float之后,其寬度會自動調整為包裹住內容寬度,而不是撐滿整個父容器。

  注意,此時div雖然體現了包裹性,但是它的display樣式是沒有變化的,還是block。

  

  說道這里咱們回顧一下,在之前的博客中,也提到了“包裹性”,是哪些樣式?你可以在此思考一下,我會在博客的評論中給出答案?。

  

  知道了包裹性之后,我們還是繼續思考:float為什么要具有包裹性?其實答案還得從float的設計初衷來尋找,float是被設計用于實現文字環繞效果的。文字環繞圖片比較好理解,但是如果想要讓文字環繞一個div呢?此時div不被“包裹”起來,那么如何去實現環繞效果?

  道理很簡單,你也可能是那種一點即通的聰明人,但是關鍵在于思考

2.4.??? 清空格

  float還有一個大家可能不是很熟悉的特性——清空格。按照管理,咱還是先舉例子說明。

  

  上圖中。第一個例子,正常的img中間是會有空格的,因為多個<img>標簽會有換行,而瀏覽器識別換行為空格,這也是很正常的。第二個例子中,img增加了float:left的樣式,這就使得img之間沒有了空格,四個img緊緊挨著。

  如果大家之前沒注意,現在想想之前寫過的程序,是不是有這個特性。為什么float適合用于網頁排版(俗稱“砌磚頭”)?就是因為float排版出來的網頁嚴絲合縫,中間連個蒼蠅都飛不進去。

  “清空格”這一特性的根本原因是由于float會導致節點脫離文檔流結構。它都不屬于文檔流結構了,那么它身邊的什么換行、空格就都和它沒關系的,它就盡量的往一邊去靠攏,能靠多近就靠多近,這就是清空格的本質。

轉載于:https://www.cnblogs.com/moxuexiaotong/p/10071294.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hadoop0.20.2版本在Ubuntu下安裝和配置

1、安裝JDK   &#xff08;1&#xff09;下載安裝JDK&#xff1a;確保計算機聯網之后命令行輸入下面命令安裝JDK   sudo apt-get install sun-java6-jdk   &#xff08;2&#xff09;配置計算機Java環境&#xff1a;打開/etc/profile&#xff0c;在文件最后輸入下面內容 …

云原生生態周報 Vol. 2

業界要聞 Kubernetes External Secrets 近日&#xff0c;世界上最大的域名托管公司 Godaddy公司&#xff0c;正式宣布并詳細解讀了其開源的K8s外部 Secrets 管理項目&#xff1a; Kubernetes External Secrets&#xff0c;簡稱KES。這個項目定義了ExternalSecrets API&#xff…

centos 7新機使用前操作

關閉防火墻 systemctl stop firewalld&#xff08;停服務&#xff09; systemctl status firewalld&#xff08;看狀態&#xff09; systemctl disable firewalld.service &#xff08;永久關閉&#xff09; selinux getenforce&#xff08;查狀態&#xff09; vi /etc/selinux…

ubuntu10.04+hadoop0.20.2平臺配置(完全分布式模式)

配置環境及有關工具&#xff1a;ubuntu10.04 、hadoop0.20.2 、 jdk1.6.0_29 我們的機器有三臺&#xff0c;一臺當作namenode、兩臺當作datanode&#xff1a; namenode&#xff1a;IP:192.168.0.25、機器名&#xff1a;kiddenzj &#xff08;這里的機器名要注意&#xff1a;機…

成佛、遠不止渡滄海

地之及東南&#xff0c;有一海&#xff0c;稱為“滄海”。滄海對面&#xff0c;就是仙家佛地。凡是能渡過滄海到達彼岸的人&#xff0c;就能立地成佛&#xff0c;修成正果。 于是&#xff0c;許許多多的人千里迢迢趕來&#xff0c;或乘帆船&#xff0c;或乘木筏&#xff0c;紛紛…

軟件架構演進

傳統架構到分布式架構詳解 軟件架構演進軟件架構的發展經歷了從單體架構、垂直架構、SOA架構到微服務架構的過程&#xff0c;博客里寫到了這四種架構的特點以及優缺點分析&#xff0c;個人學習之用&#xff0c;僅供參考&#xff01; 1.1.1 單體架構 特點&#xff1a;1、所有的…

hadoop0.20.0第一個例子

這是Hadoop學習全程記錄第2篇&#xff0c;在這篇里我將介紹一下如何在Eclipse下寫第一個MapReduce程序。 新說明一下我的開發環境&#xff1a; 操作系統&#xff1a;在windows下使用wubi安裝了ubuntu 10.10 hadoop版本&#xff1a;hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的訪問路徑

問題描述 對于我這個剛剛使用IDEA不久的新手來說&#xff0c;能夠正常運行就不錯了,不過到了后面&#xff0c;可能會覺得IDEA給你分配的默認訪問路徑很不順手&#xff0c;比如訪問的時候需要通過: http://localhost:8080/web_war_exploded/ 來訪問&#xff0c;對于web_w…

防撞庫基本要求

專用安全要求 口令要求 設計要求說明 要求 是否滿足 密碼長度至少 8位字符&#xff0c;密碼復雜性要求至少包含以下4種類別中的2種&#xff1a;大寫字母、小寫字母、數字、特殊符號 必選 滿足 系統應具備對口令強度檢測的能力&#xff0c;并對用戶進行提示&#xff08;盡量不要…

odoo10 繼承(擴展)、模塊數據

一&#xff1a;繼承 在不改變底層對象的時候添加新的功能——這是通過繼承機制來實現的&#xff0c;作為在現有對象之上的修改層&#xff0c;這些修改可以發生在所有級別&#xff1a;模型&#xff0c;視圖和業務邏輯。不是直接修改現有模塊&#xff0c;而是創建一個新模塊以添加…

做一個vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

hadoop+hive-0.10.0完全分布式安裝方法

hadoophive-0.10.0完全分布式安裝方法 1、jdk版本&#xff1a;jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html 2、hive版本&#xff1a;hive-0.10.0.tar.gz https://archive.apache.org/dist/hive/hive-0…

關于gitgithub的操作

先馬克&#xff0c;回頭細看&#xff0c;然后整理一下 https://linux.cn/article-4292-1.html轉載于:https://www.cnblogs.com/mengjie1001/p/10076530.html

一種解決 MacBook 里的 App Store 無法登錄的問題

剛剛買回來的 2018 款帶有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安裝 app 時一直無法登錄成功&#xff08;網絡鏈接都是好的&#xff09;&#xff0c;導致軟件都無法更新&#xff0c;折騰了挺一會的。 后來發現是要退出設置里的 iCloud 登錄&#xff0c;然后重新登錄…

第二次沖刺

1、今日各個成員的問題 組員問題張晉誌對mui的API看得不是很懂&#xff0c;無法順利的使用袁慶杰基礎不牢,編寫困難周建峰eclipse沒法創建web項目&#xff0c;按照網上的方法&#xff0c;check for updates 和 install new software 之后也沒用許家燁給單一功能知道如何實現但項…

牌類游戲使用微服務重構筆記(八): 游戲網關服務器

網關服務器 所謂網關&#xff0c;其實就是維持玩家客戶端的連接&#xff0c;將玩家發的游戲請求轉發到具體后端服務的服務器&#xff0c;具有以下幾個功能點&#xff1a; 長期運行&#xff0c;必須具有較高的穩定性和性能對外開放&#xff0c;即客戶端需要知道網關的IP和端口&a…

配置獨立于系統的PYTHON環境

配置獨立于系統的PYTHON環境 python 當前用戶包 一種解決方案是在利用本機的python環境的基礎上&#xff0c;將python的包安裝在當前user的.local文件夾下 一共有兩種方式來實現pip的時候安裝到當前user 設置pip配置文件 pip.conf 一種是在~/.pip文件夾下的pip配置文件pip.conf…

好程序員技術教程分享JavaScript運動框架

好程序員技術教程分享JavaScript運動框架&#xff0c;有需要的朋友可以參考下。 JavaScript的運動&#xff0c;即讓某元素的某些屬性由一個值變到另一個值的過程。如讓div的width屬性由200px變到400px&#xff0c;opacity屬性由0.3變到1.0&#xff0c;就是一個運動過程。 實現運…

linux 下mysql等php的安裝 lnmp

訪問https://lnmp.org/install.html按照步驟安裝 當下載執行完 wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.shlnmp 要到.install.sh下改一下下載地址&#xff0c;把http直接更換成…

單純形法

單純形法 如果目標函數中所有系數都非正&#xff0c;那么顯然這些變量直接取0是最優的&#xff0c;所以此時答案為即為常數項。 我們要做的就是通過轉化把目標函數的系數全部搞成非負。 思路就是用非基變量替換基變量。 先找到一個目標函數中系數為正的變量&#xff0c;在所有限…