CSS基础知识三

知识点导航

* 浮动的性质
   + 脱标
   + 贴边
   + 字围
   + 收缩
* 浮动的清除
   + 方法一:给浮动元素的祖先元素加高度
   + 方法二:clear: both;
   + 方法三:隔墙法
   + 方法四:overflow: hidden;
* margin
   + margin 的塌陷现象
   + margin: 0 auto; (居中)
   + margin IE6兼容问题
   + 善用父亲的padding,而不是儿子的margin 

浮动<p>

浮动是css里面布局用的最多的属性

下面两个元素并排并且可以设置宽高,这在标准流中是实现不了的


左浮动

要想学好 css ,一定要知道以下几个性质:

浮动的元素脱标<p>
如图所示

一个浮动的 span 标签不需要转成块级元素就能设置宽高,换句话说也就是,一旦一个元素浮动了,那么它将能够并排,能够设置宽高,它将不再是块级元素或者行内元素,也就是所谓的脱离标准流


浮动的元素互相贴靠<p>
图片 1
图片 2
图片 3

如上如所示:
如果有足够的空间,那么 3 就会靠着 2 哥;如果没有足够的空间,那么会靠着 1 号大哥;如果没有足够的空间靠着 1 号大哥,那么自己就会去贴左墙


浮动元素有 “字围” 效果<p>
包含图片的 div 浮动, 包含文字的 p 不浮动

浮动尽量要遵守一个原则:
浮动都是一起浮动,永远不是一个东西单独浮动


浮动的清除<p>

<div>
  <ul>
    <li>HTML</li>
    <li>CSS</li>
    <li>JS</li>
    <li>HTML5</li>
    <li>设计模式</li>
  </ul>
</div>

<div>
  <ul>
    <li>学习方法</li>
    <li>英语水平</li>
    <li>面试技巧</li>
  </ul>
</div>

<style type="text/css">
  li {
    float:left;
  }
</style>

问题:本来以为上面中的 li 会分为两排,但是第二组中的第一个 li 去贴靠第一组中的最后一个 li 了

代码实际效果图

原因就是 div 没有高度,不能给自己浮动的子标签一个容器


清除浮动方法一:给浮动元素的祖先元素加高度(用的少)<p>

如果一个元素要浮动,那么它的祖先元素一定要有高度,有高度的盒子才能 关住浮动

div 添加高度后效果图

只要浮动在一个有高度的盒子中,那个这个浮动就不会影响后面的浮动元素,因此就清除了浮动带来的影响

div 没有高度导致的贴边

清除浮动方法二:clear: both;<p>

网页制作中,高度 height 很少出现,因为能被内容撑高,所以方法一用的很少

<div>
  <ul>
    <li>HTML</li>
    <li>CSS</li>
    <li>JS</li>
    <li>HTML5</li>
    <li>设计模式</li>
  </ul>
</div>

<div class="box2">  //给这个 div 写一个 clear:both; 属性
  <ul>
    <li>学习方法</li>
    <li>英语水平</li>
    <li>面试技巧</li>
  </ul>
</div>

<style type="text/css">
  .box2 {
    clear: both;
  }
</style>

clear 为清除,both 指的是 左浮动 和 有浮动,完整的意思就是 清除别人对我的影响

致命问题:margin 失效了


清除浮动方法三:隔墙法<p>

隔墙法
<div class="box1">
  <ul>
    <li>HTML</li>
    <li>CSS</li>
    <li>JS</li>
    <li>HTML5</li>
    <li>设计模式</li>
  </ul>
</div>

<div class="cl h16"></div> //中间加面墙

<div class="box2">  
  <ul>
    <li>学习方法</li>
    <li>英语水平</li>
    <li>面试技巧</li>
  </ul>
</div>

<style type="text/css">
  cl {
    clear: both;
  }
  h16 {
    height: 16px;
  }
</style>

近些年,又演化出了 “内墙法”

内墙法

清除浮动方法四:overflow: hidden;<p>

overflow: hidden 表示溢出隐藏,即溢出边框的内容,都要隐藏掉

内容太多,溢出了盒子

overflow: hidden 溢出盒子边框的内容隐藏了

一个父元素不能被自己浮动的子元素撑出高度,但是只要给父元素加上 overflow: hidden; 那么父元素就能被子元素撑出高度(并且 margin 能正常设置)。!!! 这是一个偏方

正常情况下
父元素加了overflow: hidden;后

浏览器兼容问题<p>

1. 微型盒子问题

IE6不支持小于 12px 的盒子,任何小于 12px 的盒子,在 IE6 中看着都比较大。解决方法:

height: 4px;
font-size: 0px; //增加这一行

设置盒子的字号小于盒子的高度即可

浏览器 hack
就是使用浏览器提供的后门,针对某一种浏览器做兼容。比如,IE6就留了一个后门,只要在CSS属性之前加上下划线,这个属性就是IE6的专有属性

IE6专有属性

所以,解决微型盒子的正确写法是:

height: 10px;
_font-size: 0; //加下划线表示IE6专属
2. IE6不支持overflow: hidden;来清除浮动<p>

overflow: hidden;的本意是溢出盒子border的东西要隐藏,这个功能IE6是兼容的;不兼容的是使用overflow: hidden; 来清除浮动。解决方法:

overflow: hidden;
_zoom: 1;

原因是 _zoom: 1; 能够出发了浏览器的 hasLayout 机制

以上两个IE6 的兼容问题都是通过多写一条 hack 来解决的,这个被称为伴生属性。

margin<p>

1. margin 额塌陷现象

标准文档流中,竖直方向 的 margin 不叠加,以较大的为准。

标准流中

如果不在标准流中,两个盒子之间是没有塌陷现象的

脱标后

2. 盒子居中 margin: 0 auto;<p>

margin 的值可以为 auto,表示自动。当left、right两个方向都是 auto 的时候,盒子居中了:

margin-left: auto;
margin-right: auto;

简写为:

margin: 0 auto;

注意:

1. 使用 margin: 0 auto; 的盒子,必须有明确的 width
2. 只有标准流的盒子,才能使用 margin: 0 auto; 居中。也就是说,当一个盒子浮动了,绝对定位了,固定定位了,都不能使用 margin: 0 auto;
3. margin: 0 auto; 是在居中盒子,不是居中文本。文本的居中要使用 text-align: center;

3. 善用父元素的 padding,而不是子元素的 margin<p>

如果父元素没有 border,那么子元素的 margin 实际上踹的是 “流”,踹的是这 “行 ”,所以父元素整体也掉下来了

父元素无 border
父元素有 border

margin 这个属性,本质上描述的是兄弟和兄弟之间的距离;最好不要用这个 margin 表达父子之间的距离。因此要善用父元素的 padding 而不是 子元素的 margin。

4. 关于 margin 的IE6兼容问题<p>

IE6 的双倍 margin bug<p>

当出现连续浮动的元素,携带和浮动方向相同的 margin 时,队首的元素会双倍 margin。

double margin bug ( IE6 )

解决方案:

第一种:使浮动的方向和 margin 的方向相反

float: left;
margin-right: 40px;

第二种:单独给队首的元素写一半的 margin

<li class="no1"></li>
ul li.no1 {
  _margin-left: 20px;
}

IE6的 3px bug<p>

3px bug ( IE6 )

解决方案:
代码写的不规范,重新写,哈哈哈!!!善用父元素的padding

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 块级元素和行内元素分别有哪些?动手测试并列出4条以上的特性区别 块级元素:div h1 h2 h3 h4 h5 h...
    DCbryant阅读 239评论 0 0
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,803评论 0 6
  • 1.行内元素和块级元素?img算什么?行内元素怎么转化为块级元素? 行内元素:和有他元素都在一行上,高度、行高及外...
    极乐君阅读 2,400评论 0 20
  • ――――――当一个人被痛苦折磨得近乎麻木的时候,一种固执的忧郁症就会慢慢地生根,痛苦也就变得并不是那么难以忍受了。...
    Unlion_a6ad阅读 275评论 0 0