那些年我們一起清除過的浮動

這篇文章極好,以至于讓我受益良多,就一字沒有改動的轉發(fā)過來一絲冰涼老師的文章

那些年我們一起清除過的浮動
【一絲冰涼】 /2012-05-07/已有52394人看過/層疊之美

清除浮動banner.jpg

浮動(float)帖蔓,一個我們即愛又恨的屬性殿怜。愛揪惦,因為通過浮動,我們能很方便地布局; 恨甜熔,浮動之后遺留下來太多的問題需要解決,特別是IE6-7(以下無特殊說明均指 windows 平臺的 IE瀏覽器)突倍。也許很多人都有這樣的疑問腔稀,浮動從何而來?我們?yōu)楹我宄佑鹄壳宄拥脑硎鞘裁矗?/strong>本文將一步一步地深入剖析其中的奧秘焊虏,讓浮動使用起來更加得心應手。
一秕磷、清除浮動 還是 閉合浮動 (Enclosing float or Clearing float)诵闭?
很多人都已經(jīng)習慣稱之為清除浮動,以前我也一直這么叫著跳夭,但是確切地來說是不準確的涂圆。我們應該用嚴謹?shù)膽B(tài)度來對待代碼,也能更好地幫助我們理解開頭的三個問題币叹。
1)清除浮動:清除對應的單詞是 clear润歉,對應CSS中的屬性是 clear:left | right | both | none;
2)閉合浮動:更確切的含義是使浮動元素閉合颈抚,從而減少浮動帶來的影響踩衩。
兩者的區(qū)別 請看優(yōu)雅的 Demo
通過以上實例發(fā)現(xiàn),其實我們想要達到的效果更確切地說是閉合浮動贩汉,而不是單純的清除浮動驱富,在footer上設置clear:both清除浮動并不能解決wrap高度塌陷的問題。
結論:用閉合浮動比清除浮動更加嚴謹匹舞,所以后文中統(tǒng)一稱之為:閉合浮動褐鸥。
二、為何要閉合浮動赐稽?
要解答這個問題叫榕,我們得先說說CSS中的定位機制:普通流,浮動姊舵,絕對定位 (其中"position:fixed" 是 "position:absolute" 的一個子類)晰绎。
1)普通流:很多人或者文章稱之為文檔流或者普通文檔流,其實標準里根本就沒有這個詞括丁。如果把文檔流直譯為英文就是 document flow 荞下,但標準里只有另一個詞,叫做 **普通流 **(normal flow),或者稱之為常規(guī)流尖昏。但似乎大家更習慣文檔流的稱呼仰税,因為很多中文翻譯的書就是這么來的。比如《CSS Mastery》抽诉,英文原書中至始至終都只有普通流 normal flow(普通流) 這一詞肖卧,從來沒出現(xiàn)過document flow (文檔流)
2)浮動:浮動的框可以左右移動,直至它的外邊緣遇到包含框或者另一個浮動框的邊緣掸鹅。浮動框不屬于文檔中的普通流,當一個元素浮動之后拦赠,不會影響到塊級框的布局而只會影響內聯(lián)框(通常是文本)的排列巍沙,文檔中的普通流就會表現(xiàn)得和浮動框不存在一樣,當浮動框高度超出包含框的時候荷鼠,也就會出現(xiàn)包含框不會自動伸高來閉合浮動元素(“高度塌陷”現(xiàn)象)句携。顧名思義,就是漂浮于普通流之上允乐,像浮云一樣矮嫉,但是只能左右浮動。
正是因為浮動的這種特性牍疏,導致本屬于普通流中的元素浮動之后蠢笋,包含框內部由于不存在其他普通流元素了,也就表現(xiàn)出高度為0(高度塌陷)鳞陨。在實際布局中昨寞,往往這并不是我們所希望的,所以需要閉合浮動元素厦滤,使其包含框表現(xiàn)出正常的高度援岩。
絕對定位就不多說了,不在本文討論范圍之內掏导,下回分解享怀。
三、閉合浮動的原理——了解 hasLayout 和 Block formatting contexts
先看一下清理浮動的各種方法:
1)添加額外標簽
這是在學校老師就告訴我們的 一種方法趟咆,通過在浮動元素末尾添加一個空的標簽例如 <div style=”clear:both”></div>添瓷,其他標簽br等亦可。
<div class="wrap" id="float1">
<h2>1)添加額外標簽</h2>
<div class="main left">.main{float:left;}</div>
<div class="side left">.side{float:right;}</div>
<div style="clear:both;"></div>
</div>
<div class="footer">.footer</div>
** 優(yōu)雅的 Demo
優(yōu)點:通俗易懂忍啸,容易掌握
缺點:可以想象通過此方法仰坦,會添加多少無意義的空標簽,有違結構與表現(xiàn)的分離计雌,在后期維護中將是噩夢悄晃,這是堅決不能忍受的,所以你看了這篇文章之后還是建議不要用了吧。
** 2)使用 br標簽和其自身的 html屬性

這個方法有些小眾妈橄,br 有 clear=“all | left | right | none” 屬性
<div class="wrap" id="float2">
<h2>2)使用 br標簽和其自身的 html屬性</h2>
<div class="main left">.main{float:left;}</div>
<div class="side left">.side{float:right;}</div>
<br clear="all" />
</div>
<div class="footer">.footer</div>
** 優(yōu)雅的 Demo
優(yōu)點:比空標簽方式語義稍強庶近,代碼量較少
缺點:同樣有違結構與表現(xiàn)的分離,不推薦使用
** 3)父元素設置 overflow:hidden

通過設置父元素overflow值設置為hidden眷蚓;在IE6中還需要觸發(fā) hasLayout 鼻种,例如 zoom:1;
<div class="wrap" id="float3" style="overflow:hidden; *zoom:1;">
<h2>3)父元素設置 overflow </h2>
<div class="main left">.main{float:left;}</div>
<div class="side left">.side{float:right;}</div>
</div>
<div class="footer">.footer</div>
** **優(yōu)雅的 Demo
優(yōu)點:不存在結構和語義化問題沙热,代碼量極少
缺點:內容增多時候容易造成不會自動換行導致內容被隱藏掉叉钥,無法顯示需要溢出的元素;04年POPO就發(fā)現(xiàn)overflow:hidden會導致中鍵失效篙贸,這是我作為一個多標簽瀏覽控所不能接受的投队。所以還是不要使用了
4)父元素設置 overflow:auto 屬性
同樣IE6需要觸發(fā)hasLayout,演示和3差不多
優(yōu)點:不存在結構和語義化問題爵川,代碼量極少
缺點:多個嵌套后敷鸦,firefox某些情況會造成內容全選;IE中 mouseover 造成寬度改變時會出現(xiàn)最外層模塊有滾動條等寝贡,firefox早期版本會無故產生focus等, 請看 嗷嗷的 Demo ,不要使用
5)父元素也設置浮動
優(yōu)點:不存在結構和語義化問題扒披,代碼量極少
缺點:使得與父元素相鄰的元素的布局會受到影響,不可能一直浮動到body圃泡,不推薦使用
6)父元素設置display:table
** *優(yōu)雅的 Demo
優(yōu)點:結構語義化完全正確碟案,代碼量極少
缺點:盒模型屬性已經(jīng)改變,由此造成的一系列問題洞焙,得不償失蟆淀,不推薦使用
7)使用:after 偽元素
需要注意的是 :after是偽元素(Pseudo-Element),不是偽類(某些CSS手冊里面稱之為“偽對象”)澡匪,很多閉合浮動大全之類的文章都稱之為偽類熔任,不過csser要嚴謹一點,這是一種態(tài)度唁情。
由于IE6-7不支持:after疑苔,使用 zoom:1觸發(fā) hasLayout。
該方法源自于: How To Clear Floats Without Structural Markup
原文全部代碼如下:
<style type="text/css"> .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .clearfix {display: inline-block;} /
for IE/Mac */ </style> 鑒于 IE/Mac的市場占有率極低,我們直接忽略掉,最后精簡的代碼如下:
.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; }
** 優(yōu)雅的 Demo
優(yōu)點:結構和語義化完全正確,代碼量居中
缺點:復用方式不當會造成代碼量增加
** 小結

通過對比甸鸟,我們不難發(fā)現(xiàn)惦费,其實以上列舉的方法,無非有兩類:
其一抢韭,通過在浮動元素的末尾添加一個空元素薪贫,設置 clear:both屬性,after偽元素其實也是通過 content 在元素的后面生成了內容為一個點的塊級元素刻恭;
其二瞧省,通過設置父元素 overflow 或者display:table 屬性來閉合浮動扯夭,我們來探討一下這里面的原理。
在CSS2.1里面有一個很重要的概念鞍匾,但是國內的技術博客介紹到的比較少交洗,那就是 Block formatting contexts (塊級格式化上下文),以下簡稱 BFC橡淑。
CSS3里面對這個規(guī)范做了改動构拳,稱之為:flow root,并且對觸發(fā)條件進行了進一步說明梁棠。
那么如何觸發(fā)BFC呢置森?
float 除了none以外的值
overflow 除了visible 以外的值(hidden,auto符糊,scroll )
display (table-cell暇藏,table-caption,inline-block)
position(absolute濒蒋,fixed)
fieldset元素

需要注意的是,display:table 本身并不會創(chuàng)建BFC把兔,但是它會產生匿名框(anonymous boxes)沪伙,而匿名框中的display:table-cell可以創(chuàng)建新的BFC,換句話說县好,觸發(fā)塊級格式化上下文的是匿名框围橡,而不是display:table。所以通過display:table和display:table-cell創(chuàng)建的BFC效果是不一樣的缕贡。
fieldset 元素在www.w3.org里目前沒有任何有關這個觸發(fā)行為的信息翁授,直到HTML5標準里才出現(xiàn)。有些瀏覽器bugs(Webkit晾咪,Mozilla)提到過這個觸發(fā)行為收擦,但是沒有任何官方聲明。實際上谍倦,即使fieldset在大多數(shù)的瀏覽器上都能創(chuàng)建新的塊級格式化上下文塞赂,開發(fā)者也不應該把這當做是理所當然的。CSS 2.1沒有定義哪種屬性適用于表單控件昼蛀,也沒有定義如何使用CSS來給它們添加樣式宴猾。用戶代理可能會給這些屬性應用CSS屬性,建議開發(fā)者們把這種支持當做實驗性質的叼旋,更高版本的CSS可能會進一步規(guī)范這個误褪。

BFC的特性:
1)塊級格式化上下文會阻止外邊距疊加
當兩個相鄰的塊框在同一個塊級格式化上下文中時回论,它們之間垂直方向的外邊距會發(fā)生疊加。換句話說,如果這兩個相鄰的塊框不屬于同一個塊級格式化上下文咒程,那么它們的外邊距就不會疊加祝辣。
2)塊級格式化上下文不會重疊浮動元素
根據(jù)規(guī)定,一個塊級格式化上下文的邊框不能和它里面的元素的外邊距重疊。這就意味著瀏覽器將會給塊級格式化上下文創(chuàng)建隱式的外邊距來阻止它和浮動元素的外邊距疊加撞羽。由于這個原因,當給一個挨著浮動的塊級格式化上下文添加負的外邊距時將會不起作用(Webkit和IE6在這點上有一個問題——可以看這個測試用例)衫冻。
3)塊級格式化上下文通尘魑桑可以包含浮動
詳見: W3C CSS2.1 - 10.6.7 'Auto' heights for block formatting context roots
通俗地來說:創(chuàng)建了 BFC的元素就是一個獨立的盒子,里面的子元素不會在布局上影響外面的元素隅俘,反之亦然邻奠,同時BFC任然屬于文檔中的普通流。
至此为居,您或許明白了為什么 overflow:hidden或者auto可以閉合浮動了碌宴,真是因為父元素創(chuàng)建了新的BFC。對于張鑫旭在對《overflow與zoom”清除浮動”的一些認識 》一文中對于用包裹來解釋閉合浮動的原理蒙畴,我覺得是不夠嚴謹?shù)姆×停覜]有依據(jù)。并且說道“Firefox等瀏覽器并沒有haslayout的概念”膳凝,那么現(xiàn)代瀏覽器是有BFC的碑隆,從表現(xiàn)上來說,hasLayout 可以等同于 BFC蹬音。
IE6-7的顯示引擎使用的是一個稱為布局(layout)的內部概念上煤,由于這個顯示引擎自身存在很多的缺陷,直接導致了IE6-7的很多顯示bug著淆。當我們說一個元素“得到 layout”劫狠,或者說一個元素“擁有 layout” 的時候,我們的意思是指它的微軟專有屬性 hasLayout http://msdn.microsoft.com/worksh ... rties/haslayout.asp 為此被設為了 true 永部。IE6-7使用布局的概念來控制元素的尺寸和定位独泞,那些擁有布局(have layout)的元素負責本身及其子元素的尺寸設置和定位。如果一個元素的 hasLayout 為false苔埋,那么它的尺寸和位置由最近擁有布局的祖先元素控制阐肤。
觸發(fā)hasLayout的條件:
position: absolute
float: left|right
display: inline-block
width: 除 “auto” 外的任意值
height: 除 “auto” 外的任意值 (例如很多人閉合浮動會用到 height: 1% )
zoom: 除 “normal” 外的任意值 (MSDN) http://msdn.microsoft.com/worksh ... properties/zoom.asp
writing-mode: tb-rl (MSDN) http://msdn.microsoft.com/worksh ... ies/writingmode.asp

在 IE7 中,overflow 也變成了一個 layout 觸發(fā)器:
overflow: hidden|scroll|auto ( 這個屬性在IE之前版本中沒有觸發(fā) layout 的功能讲坎。 )
overflow-x|-y: hidden|scroll|auto (CSS3 盒模型中的屬性孕惜,尚未得到瀏覽器的廣泛支持。他們在之前IE版本中同樣沒有觸發(fā) layout 的功能)

hasLayout更詳細的解釋請參見 old9翻譯的 大名鼎鼎的 《On having layout》一文(英文原文:http://www.satzansatz.de/cssd/onhavinglayout.htm)晨炕,由于old9博客被墻衫画,中文版地址:
IE8使用了全新的渲染引擎,刪除了 hasLayout 原本的功能瓮栗,因此徹底杜絕了很多深惡痛絕的 bug削罩,但 IE8~IE11 通過「document.documentElement.currentStyle.hasLayout」依然可以獲得 hasLayout 的標志瞄勾,我寫了一個測試 Demo(IE8 中 zoom:1 返回 false),更詳細的請看《IE8 haslayout = true》

IE8-11獲取 hasLayout

綜上所述:
在支持BFC的瀏覽器(IE8+弥激,firefox进陡,chrome,safari)通過創(chuàng)建新的BFC閉合浮動微服;
在不支持 BFC的瀏覽器 (IE6-7)趾疚,通過觸發(fā) hasLayout 閉合浮動。

四以蕴、閉合浮動方法——精益求精
上面已經(jīng)列舉了7種閉合浮動的方法糙麦,通過第三節(jié)分析的原理,我們發(fā)現(xiàn)其實更多的:display:table-cell丛肮,display:inline-block等只要觸發(fā)了BFC的屬性值都可以閉合浮動赡磅。從各個方面比較,after偽元素閉合浮動無疑是相對比較好的解決方案了宝与,下面詳細說說該方法焚廊。
.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; }

  1. display:block 使生成的元素以塊級元素顯示,占滿剩余空間;
  2. height:0 避免生成內容破壞原有布局的高度。
  3. visibility:hidden 使生成的內容不可見习劫,并允許可能被生成內容蓋住的內容可以進行點擊和交互;
    4)通過 content:"."生成內容作為最后一個元素节值,至于content里面是點還是其他都是可以的,例如oocss里面就有經(jīng)典的 content:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",有些版本可能content 里面內容為空,一絲冰涼是不推薦這樣做的,firefox直到7.0 content:”" 仍然會產生額外的空隙榜聂;
    5)zoom:1 觸發(fā)IE hasLayout。
    通過分析發(fā)現(xiàn)嗓蘑,除了clear:both用來閉合浮動的须肆,其他代碼無非都是為了隱藏掉content生成的內容,這也就是其他版本的閉合浮動為什么會有font-size:0桩皿,line-height:0豌汇。

精益求精方案一:
相對于空標簽閉合浮動的方法代碼似乎還是有些冗余,通過查詢發(fā)現(xiàn)Unicode字符里有一個“零寬度空格”泄隔,也就是U+200B 拒贱,這個字符本身是不可見的,所以我們完全可以省略掉 visibility:hidden了
.clearfix:after {content:"200B"; display:block; height:0; clear:both; }
.clearfix { zoom:1; }.
精益求精方案二:
由Nicolas Gallagher 大濕提出來的,原文:A new micro clearfix hack佛嬉,該方法也不存在firefox中空隙的問題逻澳。
/
For modern browsers /
.cf:before,.cf:after {
content:"";
display:table;
}
.cf:after { clear:both; }/
For IE 6/7 (trigger hasLayout) /
.cf { zoom:1; }
** 需要注意的是:
*
上面的方法用到了 :before偽元素,很多人對這個有些迷惑暖呕,到底我什么時候需要用before呢斜做?為什么方案一沒有呢?其實它是用來處理margin邊距重疊的湾揽,由于內部元素 float 創(chuàng)建了BFC瓤逼,導致內部元素的margin-top和 上一個盒子的margin-bottom 發(fā)生疊加笼吟。如果這不是你所希望的,那么就可以加上before霸旗,如果只是單純的閉合浮動贷帮,after就夠了!并不是如同大漠《Clear Float》一文所說的:但只使用clearfix:after時在跨瀏覽器兼容問題會存在一個垂直邊距疊加的bug诱告,這不是bug撵枢,是BFC應該有的特性。

邊距疊加測試.jpg

請看優(yōu)雅的Demo
進一步了解請看: 《clearfix改良及overflow:hidden詳解【譯】》
在實際開發(fā)中蔬啡,改進方案一由于存在Unicode字符不適合內嵌CSS的GB2312編碼的頁面诲侮,使用方案7完全可以解決我們的需求了,改進方案二等待大家的進一步實踐箱蟆。方案3沟绪、4通過overflow閉合浮動,實際上已經(jīng)創(chuàng)建了新的 塊級格式化上下文空猜,這將導致其布局和相對于浮動的行為等發(fā)生一系列的變化绽慈,閉合浮動只不過是一系列變化中的一個作用而已。所以為了閉合浮動去改變全局特性辈毯,這是不明智的坝疼,帶來的風險就是一系列的bug,比如firefox 早期版本產生 focus谆沃,截斷絕對定位的層等等钝凶。始終要明白,如果單單只是需要閉合浮動唁影,overflow就不要使用耕陷,而不是某些文章所說的“慎用”。
前前后后花了三天寫完了這篇文章据沈。如果覺得本文對您有幫助哟沫,您的留言就是對我最大的支持,同時由于精力有限锌介,歡迎指出文中錯誤與不足嗜诀,共勉之!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末孔祸,一起剝皮案震驚了整個濱河市隆敢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崔慧,老刑警劉巖筑公,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尊浪,居然都是意外死亡匣屡,警方通過查閱死者的電腦和手機封救,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捣作,“玉大人誉结,你說我怎么就攤上這事∪辏” “怎么了惩坑?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長也拜。 經(jīng)常有香客問我以舒,道長,這世上最難降的妖魔是什么慢哈? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任蔓钟,我火速辦了婚禮,結果婚禮上卵贱,老公的妹妹穿的比我還像新娘滥沫。我一直安慰自己,他們只是感情好键俱,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布兰绣。 她就那樣靜靜地躺著,像睡著了一般编振。 火紅的嫁衣襯著肌膚如雪缀辩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天踪央,我揣著相機與錄音臀玄,去河邊找鬼。 笑死杯瞻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的炫掐。 我是一名探鬼主播魁莉,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼募胃!你這毒婦竟也來了旗唁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤痹束,失蹤者是張志新(化名)和其女友劉穎检疫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祷嘶,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡屎媳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年夺溢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烛谊。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡风响,死狀恐怖,靈堂內的尸體忽然破棺而出丹禀,到底是詐尸還是另有隱情状勤,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布双泪,位于F島的核電站持搜,受9級特大地震影響,放射性物質發(fā)生泄漏焙矛。R本人自食惡果不足惜葫盼,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薄扁。 院中可真熱鬧剪返,春花似錦、人聲如沸邓梅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽日缨。三九已至钱反,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匣距,已是汗流浹背面哥。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毅待,地道東北人尚卫。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像尸红,于是被迫代替她去往敵國和親吱涉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案外里? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,728評論 1 92
  • 浮動怎爵,從誕生那天起,它就是個特別的屬性——既為網(wǎng)頁布局帶來新的方法盅蝗,卻又隨之產生一系列的問題鳖链。當然,隨著時間的推移...
    郝特么冷閱讀 830評論 0 6
  • 我們在日常開發(fā)布局中經(jīng)常會使用到流體布局题山,流體布局用到的一個最重要的屬性就是浮動兰粉,今天就來看看浮動的相關知識。 1...
    一木_qintb閱讀 1,081評論 0 2
  • 建議在PC端閱讀本文面向對象:對標題中的概念基本不了解或僅僅聽說過名字的人。如果已有一定了解請直接拉到最下看推薦閱...
    粉腸w閱讀 577評論 0 0
  • 一直以來都是社交的模式慨菱,混跡于各種活動場所焰络,奇怪的是總有地方可以混,總有人會拉著我符喝,最近在一個老師的工作室玩闪彼,每天...
    竺子閱讀 194評論 0 0