前言
事情还要回答一个月前,当时寒冬老师搞了一道position的面试题,我当时有幸给看到了,而且正是我要去外地的那天。
于是我那天上午便开始入魔了,写完了博客才急急忙忙上飞机:
各位周末结束后都累了吧,那我们一起来看看【寒冬】的面试题吧(据说阿里的哟)
当时只是草草的回答了那道题,却没想到今天会再拿出来说事!对的,我还是搞不懂为什么float会导致元素坍塌!!!!
近期状况
我CSS的名师是:张鑫旭(自认入门的)
最近引导者:寒冬
我CSS方面的东西除了之前的积累,基本来源于此两人,各位可以关注下。
多数知识来源于张鑫旭,寒冬让我把整个知识串了起来,虽然素不相识,在此谢过了。
引出问题
我最近一直在思考float实现的原理。
我最开始根据各种学习后产生了一个认识,float破坏了行内框inline boxes
从而导致块级元素坍塌,因为块级元素的高是line-height撑起来的,而line-height又来源于line boxes。
但是最近学习了BFC后,知道float触发了bfc,导致其独立了出来,所以元素被包裹了,这也是overflow清楚浮动的原理。
那么float到底做了些什么事情呢???
虽然我昨天病了,这个问题却在脑中挥之不去,所以今天搞完js后,觉得还是有必要深究一下。
不研究就算了,一研究又发现一个高手,好像是前端观察,只不过我不认识罢了。。。我这里也不管他是谁了,开始今天的学习吧。
clear:none=>闭合浮动
关于这个问题,我其实也必将迷糊的,因为我在用自己形成的CSS世界观解释问题时候一说到清楚浮动就感觉奇怪!
clear对应属性:left, right, both, none
按道理说clear: none才是清除浮动啦
所以我们这里为他取名闭合浮动较为合理。而且他也解释了为什么overflow可以导致坍陷消失。
haslayout与block formatting contexts
IE7以下特有的layout以及BFC再次光临了,我都不知道最近有多少次提到他了。
通过之前我们的学习(清除浮动的具体例子我这里就不管了),想要解决高度塌陷的问题无非两种方案:
① 在浮动元素末尾加上clear: both 属性,强制其闭合元素
② 设置overflow或者display: table属性触发BFC(这里寒冬老师有不同的认识,他认为对名词触发不合适),从而解决坍塌问题。
关于BFC(现在他换了个马甲叫做flow root),大家应该相对熟悉了。
我的理解是所有normal flow的元素皆处于同一BFC,float元素处于一个BFC,每个绝对定位单独一个BFC
PS:此处有误请提出来。
我们的BFC可以解决上外边距叠加,可以强制包含float元素,通俗点说:
BFC就是一个独立的盒子,里面的子元素不会再布局上影响外面元素,BFC依然属于普通流
overflow闭合浮动的真相便是:
父级元素拥有了新的BFC,具有BFC的块级元素可以包含浮动!
以上好像是官方定义了,再往下面挖就没意思了。
IE6/7中没有BFC这个概念,其自身实现的haslayout基本等同于BFC。
所以我们在IE6/7中闭合浮动时候要加上一句,zoom: 1的属性触发haslayout
真相到此为止?
以上就是追寻后得到的真相,虽然我还是不太满意,虽然我还有点迷迷糊糊但是暂时这样吧,在今后一段时间里面,我还会再回来回看这个问题。
届时,我希望自己能找到自己想要的答案。
意外之喜
此次找寻答案过程中虽然没有完全得到我想要的答案,却意外得到了其它东西,他的名字便是inline-block。
对的,你没有看错,我要说的就是inline-block!
其实我们还是很喜欢人云亦云的,比如说我就一直认为IE7之前没有inline-block这个属性,其实这是大错特错的!
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title></title>
4 <style type="text/css">
5 span { height: 100px; border: 1px solid black; }
6 .ib { display: inline-block; }
7 </style>
8 </head>
9 <body>
10 <span class="ib">叶小钗</span> <span>叶小钗</span> <span class="ib">叶小钗</span>
11 </body>
12 </html>

以上是标准浏览器,我们来看看我们的IE7:

大家看到了,虽然中间那块有问题,但是我们的inline-block是没有问题的!!!
其中中间那个家伙的底边没有了,大家知道是为什么的(layout)。
以上是行内元素,我们来看看块级元素的表现。
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title></title>
4 <style type="text/css">
5 div { height: 100px; border: 1px solid black; *zoom: 1 }
6 .ib { display: inline-block; }
7 </style>
8 </head>
9 <body>
10 <div class="ib">
11 叶小钗</div>
12 <div class="ib">
13 叶小钗</div>
14 <div>
15 叶小钗</div>
16 </body>
17 </html>

我们来看看IE7的表现:
这家伙直接没有理我啊!!!所以说,并不是inline-block没有,而只是对块级元素的支持有问题罢了,所以我们对于块级元素需要这么干:
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title></title>
4 <style type="text/css">
5 div { height: 100px; border: 1px solid black; }
6 .ib { display: inline-block; *zoom: 1; *display: inline; }
7 </style>
8 </head>
9 <body>
10 <div class="ib">
11 叶小钗</div>
12 <div class="ib">
13 叶小钗</div>
14 <div>
15 叶小钗</div>
16 </body>
17 </html>

虽然他们之间的间隔却没有了,却达到了我们的目标。问题又来了:
inline-block为什么会有莫名的间隔?
注意看图的朋友应该看到了,inline-block元素在现代浏览器中有间隔,我搞了很久查询确实是有!
这是因为默认情况下inline元素之间就有间隔(IE7不会有间隔)!
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title></title>
4 <style type="text/css">
5 div { height: 100px; border: 1px solid black; margin: 0; display: inline; }
6 </style>
7 </head>
8 <body>
9 <div class="ib">
10 叶小钗</div>
11 <div class="ib">
12 叶小钗</div>
13 <div>
14 叶小钗</div>
15 </body>
16 </html>

IE7
这个问题你抓破头发都不会知道原因!!!
因为块级元素搞成inline的时候,在编辑器中换号了,浏览器认为换行就是一个空格,所以将他们写到一起吧!囧
此处我不再纠结下去了,附上抄来的解决空隙的代码:
1 .dib-wrap {
2 font-size:0;/* 所有浏览器 */
3 *word-spacing:-1px;/* IE6、7 */
4 }
5 .dib-wrap .dib{
6 font-size: 12px;
7 letter-spacing: normal;
8 word-spacing: normal;
9 vertical-align:top;
10 }
11 @media screen and (-webkit-min-device-pixel-ratio:0){
12 /* firefox 中 letter-spacing 会导致脱离普通流的元素水平位移 */
13 .dib-wrap{
14 letter-spacing:-5px;/* Safari 等不支持字体大小为 0 的浏览器, N 根据父级字体调节*/
15 }
16 }
17 .dib {
18 display: inline-block;
19 *display:inline;
20 *zoom:1;
21 }
结语
咳咳,其实我病了。。。我养伤去了,刚刚求妹子顶就有个兄弟踩了我下,现在求兄弟顶好吧。。。。
分享到:
相关推荐
人教版初中道德与法治《正视发展挑战》说课稿.pdf
【标题】:“08.抛开偏见,正视保健品行业的投资机会”这一主题提示我们关注的是保健品行业在投资领域的潜力和挑战。保健品行业涵盖了众多领域,如营养补充剂、健康食品、传统中药等,是现代人追求健康生活的重要...
6.1正视发展挑战(PPT36页).ppt
【标题】:“61正视发展挑战PPT.doc”是一个文档,通常用于呈现关于面对和解决发展中遇到问题的讨论或教学材料。这个标题暗示了内容可能涵盖了如何识别、理解和克服在个人、组织或社会层面的发展过程中所遇到的障碍...
【正视项目组的技术“虚胖”】是一个关于团队中普遍存在的一种现象的讨论,即团队成员对于常用技术的理解仅停留在表面,缺乏深入理解和实践经验。这种现象可能导致在项目中出现质量问题,因为成员们往往依赖于复制...
### 国旗下正视挫折走向成功的讲话演讲稿回顾 #### 一、正视挫折的重要性 在演讲稿中,提到了正视挫折对于个人成长的重要意义。通过引用林肯总统的经历,演讲强调了即使面临多次失败,只要有坚韧不拔的精神,最终...
九年级道德与法治6.1《正视发展挑战》教学设计.pdf
《正视发展挑战》这一PPT优质教学课件,旨在深入探讨中国发展进程中所面临的重大问题,如人口与资源环境问题,并提供科学的视角与解决策略。该课件不仅是教育领域的优质素材,亦是公民了解国家发展现实的窗口。 在...
在当前教育体制改革的背景下,高中素质教育论文的撰写不仅是一个学术研究过程,更是对教育实践的深入剖析和反思。其中,如何正视“运动奖牌”与“面向全体”的关系,是高中体育教育改革不可回避的重要议题。 学校...
面对未来,我将坚定地秉承“乘胜前进、正视不足、严格自律”的工作态度,用更加积极的心态和踏实的行动,为公司的持续发展贡献自己的一份力量,不负上级的信任和期待。 总结我的试用期工作,我深刻体会到,学习和...
【应用实践】对于小强的情况,他应该明确个人目标,保持对未来的期待,同时要正视学习过程中遇到的困难,将挑战视为成长的机会。通过自我反思,了解自己在学习中的瓶颈,寻求改进方法。同时,积极倾听他人的建议,但...
【正视自我评价和他人评价的差异】 在个人发展和职业道路上,自我评价与他人评价之间的差异是一个重要的议题。自我评价通常基于个人的内心感受、价值观和能力的认知,而他人评价则是外部世界对我们行为和特质的反馈...
不要为已消尽之年华叹息,必须正视匆匆溜走的时光。 ——布莱希特 一. 简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。 解答: 数据:指能够被计算机识别、存储和...
【正视与名师的差距,将学习提高进行到底】 在教育领域,我们常常会遇到一些卓越的教师,他们以其深厚的学识、独特的教学方法和无尽的教育热情,深深影响着学生。对于基层教师,尤其是农村中学教师来说,与这些名师...
正视数字经济面临的挑战.pdf
为了让学生能够正视压力,并学会管理这些压力,南海中学分校高一(8)班开展了一场主题为“正视压力”的班会活动。本次班会活动的设计融入了心理学家拉萨鲁和福克曼在1984年提出的压力应对三部曲:初级评估、次级...
不敢正视相机的右脸庞.doc
在人生的旅途中,正视自己,意味着对自己的认知不仅仅停留在表象的层面,而是一种深入骨髓的了解和自我价值的肯定。2015届高考语文人生哲理篇的写作素材,便以“正视自己”为题,讲述了孤儿与高僧的故事,折射出自我...
【正视课改促进发展】 学校体育教学改革是中国教育领域的重要举措,旨在推动教育质量的提升,关注学生的全面发展。2003年启动的新一轮学校体育改革,标志着从单纯注重体能训练转向全面关注学生的身心健康。这一转变...
在学习和生活中,我们需要清楚地知道自己擅长什么,不擅长什么,这样才能制定出适合自己的学习策略。对于期中考试的结果,无论是好是坏,都应视为自我认识的一部分,用以反思和调整。 2. **克服骄傲与自满**:故事...