单开一篇来讲一个大点的话题——清浮动

   来看下例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
</div>
</body>
</html

运行效果图:

可见,父级元素<div class="box"></div>并没有包裹住子集元素<div class="div"></div>

   接下来我们讲解怎么清浮动?

   ①给父级也加浮动,如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
float: left;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
</div>
</body>
</html>

运行效果如下图:

发现问题:页面中所有元素都要加浮动,margin左右自动失效(floats bad !),所以此方法不建议使用。

②给父级加display: inline-block;,不脱离文档流(应该是不让子集元素脱离文档流)。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
display: inline-block;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
</div>
</body>
</html>

运行效果图如下:

发现问题:margin左右自动失效。

③在浮动元素下加<div class="clear"></div>,在添加如下样式:.clear { height: 0px; clear: both; font-size: 0; },但在IE6下还有问题!到底是什么问题呢?我在后面会讲,现在又接触了一个新的属性——clear

clear属性有如下值:

  1. right
  2. left
  3. both
  4. none
  5. inherit

clear是指元素的某个方向上不能有浮动元素,而clear: both是指元素左右两侧均不允许有浮动元素。了解以上知识后,来看一个示例:

1、当clear为right时,

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
font-size: 20px;
}
.box1 {
width: 100px;
height: 100px;
background: red;
float: left;
}
.box2 {
width: 200px;
height: 200px;
background: blue;
clear: right;
}
</style>
</head>
<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
</body>
</html>

从上图可看出元素<div class="box2">box2</div>才不会管你左边有没有浮动元素呢,它只管它右边有没有浮动元素。

2、当clear为left时,代码略过,直接看运行效果图:

同上,不赘述。

3、当clear为both,同上,不赘述。

至此,我们来看第③方法怎么清浮动。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
.clear {
height: 0px;
clear: both;
font-size: 0;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
<div class="clear"></div>
</div>
</body>
</html>

我们说过此方法在IE6下还有问题!到底是什么问题呢?来看IE6下最小高度问题。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body {
margin: 0;
background: #000;
}
.box {
height: 5px;
background: red;
font-size: 0;
}
/*
在IE6下高度小于19px的元素,高度会被当作19px处理
解决办法:font-size: 0;
但font-size只能处理最小2个像素的高度
*/
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>

在chrome浏览器中是没有任何问题的,但在IE6下有问题,在IE6下高度小于19px的元素,高度会被当作19px处理。解决办法:font-size: 0,但font-size只能处理最小2个像素的高度(也即解决后IE6下还有2px偏差,怎么解决呢?也是一个疑问)。

④在浮动元素下加<br clear="all" /> clear: left/right/all(both)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
/*display: inline-block;/* 不脱离文档流 */
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
<br clear="all" />
</div>
</body>
</html>

发现问题:不符合工作中:结构、样式、行为,三者分离的要求。

在讲解第⑤种方法时,我们需要了解几个概念。

1、after伪类,如下例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
p {
width: 200px;
border: 1px solid #000;
}
p:after {
content: "!!!!!!!!";
background: red;
display: block;
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<p>妙味课堂</p>
</body>
</html>

after伪类:元素内部末尾添加内容。语法:

:after{content"添加的内容";}

注意:在IE6、7下是不兼容的!

2、haslayout

haslayout是Windows Internet Explorer渲染引擎(?)的一个内部组成部分。在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了haslayout的属性,属性值可以为true或false。当一个元素的haslayout属性值为true时,我们说这个元素有一个布局(layout)。

所以,haslayout根据元素内容的大小,或者父级的大小来重新计算元素的宽高。

就目前所学来说,使用以下样式可以触发IE下haslayout=true。

display inline-block
height (任何值除了auto)
float (left或right)
width 任何值除了auto
zoom 除normal外任意值

3、zoom,缩放

zoom: 1;时,保持原样

zoom: 2;时,放大到2倍

zoom: 0.5;时,缩小到一半

最后,来看第⑤种方法怎么清浮动。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
.clear:after {
content: "";
display: block;
clear: both;/* 只有在块元素有效,但在IE6、7下不支持after伪类 */
}
</style>
</head>
<body>
<div class="box clear">
<div class="div"></div>
</div>
</body>
</html>

注意:clear属性只有在块元素时才有效。

发现在IE6、7下也无任何异常,因为在IE6、7下浮动元素的父级有宽度(width),就不用清浮动。但是没有设置width时,怎么办,这是可以使用zoom属性。如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
margin: 0 auto;
border: 10px solid #000;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
.clear {
zoom:;
}
.clear:after {
content: "";
display: block;
clear: both;/* 只有在块元素有效,但在IE6、7下不支持after伪类 */
}
</style>
</head>
<body>
<div class="box clear">
<div class="div"></div>
</div>
</body>
</html>

所以,⑤给浮动元素父级加{ zoom: 1;},:after { content: ""; display: block; clear: both; },此方法是目前最常用的清浮动的方法。

接下来,来讲解第⑥种清浮动的方法,不过我们首先要了解overflow(溢出)属性。

overflow属性值有:

  1. auto,溢出显示滚动条
  2. scroll,默认就显示滚动条
  3. hidden,溢出隐藏

举例来说明:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
height: 300px;
border: 1px solid #000;
font-size: 12px;
line-height: 30px;
overflow: auto;
}
h3 {
width: 100px;
height: 30px;
background: red;
margin: 0;
}
</style>
</head>
<body>
<div class="box">
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout)
要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清楚的概念。大多IE下的显示错误,就是源于 haslayout。如果它设置成了true,它就不得不去渲染它自己,因此元素不得不扩展去包含它的流出的内容。例如浮动或者很长很长的没有截断的单词,如果haslayout没有被设置成true,那么元素得依靠某个祖先元素来渲染它。这就是很多的ie bugs诞生的地方。
</div>
<h3>妙味课堂</h3>
</body>
</html>

当overflow为auto,内容溢出,显示滚动条。

当overflow为scroll,默认就显示滚动条。

当overflow为hidden,内容溢出隐藏。

当不使用overflow时,内容溢出,就会成这个鸟样:

再看下例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
height: 300px;
border: 1px solid #000;
overflow: auto;/* 证明可以包着浮动元素 */
}
.div1 {
width: 260px;
height: 400px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div1"></div>
</div>
</body>
</html>

可以看出,使用overflow属性的父级元素可以包着浮动元素。

所以,第⑥种清浮动的方法为:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
width: 300px;
margin: 0 auto;
border: 10px solid #000;
overflow: auto/hidden;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
</div>
</body>
</html>

配合width兼容IE6、7。

但是,更常用的是配合zoom兼容IE6、7。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.box {
margin: 0 auto;
border: 10px solid #000;
overflow: auto/hidden;
zoom: 1;
}
.div {
width: 200px;
height: 200px;
background: red;
float: left;
}
</style>
</head>
<body>
<div class="box">
<div class="div"></div>
</div>
</body>
</html>

至此,第⑥种清浮动的方法:给浮动元素的父级加overflow: auto/hidden; 一定要配合zoom: 1;。

妙味课堂——HTML+CSS(第四课)(二)的更多相关文章

  1. 妙味课堂——HTML+CSS(第四课)(一)

    这一课学的东西真是太多了,还不赶快记下来,留待以后慢慢回味! 首先我们回顾一下inline-block的特性: 使块元素在一行显示 使内嵌支持宽高 换行被解析了(问题) 不设置宽度的时候,宽度由内容撑 ...

  2. 妙味课堂——HTML+CSS(第三课)

    常见标签我已经在上一篇文章中提及,我们做前端设计时,主要也是用这些标签(最常用的). 然而有一个问题,就是有的标签都有自己的默认样式.试通过如下代码来说明: <!DOCTYPE html> ...

  3. 妙味课堂——HTML+CSS(第一课)

    一句话,还记忆不如烂笔头,何况还这么笨,记下笔记,也是记录这一路学习的过程. 妙味课堂第一课并未一味地先讲HTML,而是穿插着CSS讲解,这一点不同于一些其他视频,这一点挺特别的!所以这一课涉及到HT ...

  4. 妙味课堂——HTML+CSS基础笔记

    妙味课堂的课程讲得非常的清楚,受益匪浅.先把HTML和CSS基础课程部分视频的学习笔记记录如下: padding #PS基础 ##前端需要的PS技能 - PS技能(前端需要):切图.修图.测量 - P ...

  5. 妙味课堂:JavaScript初级--第11课:字符串、查找高亮显示

    1.数字字母 Unicode 编码 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content- ...

  6. 妙味课堂——HTML+CSS(第二课)

    常见标签——img标签 <img src="图片地址" alt="图片名"/> alt属性是图片名字,是给百度搜索引擎抓取使用的.也有当图片地址不正 ...

  7. 妙味课堂:JavaScript初级--第12课:json与数组

    1.json数据格式及json语法 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  8. 妙味课堂史上最全的javascript视频教程,前端开发人员必备知识点,新手易学,拔高必备!!!

    妙味课堂是北京妙味趣学信息技术有限公司旗下的IT前端培训品牌, 妙味课堂是一支独具特色的IT培训团队,妙味反对传统IT教育枯燥乏味的教学模式,妙味提供一种全新的快乐学习方法! 妙味js视教第一部分  ...

  9. 妙味课堂——JavaScript基础课程笔记

    集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...

随机推荐

  1. js 与或运算符 || && 妙用(转)

    原文转自:http://www.jb51.net/article/21339.htm 首先出个题: 假设对成长速度显示规定如下: 成长速度为5显示1个箭头: 成长速度为10显示2个箭头: 成长速度为1 ...

  2. iOS中MVC设计模式

    在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...

  3. 从零开始学ios开发(一):准备起航

    首先介绍一下自己的背景,本人09年研究生毕业,大学就不介绍了,反正是上海的一所211大学,学的是计算机科学与技术专业,学生时代,从事过ACM,没有什么太大的成就,中国的牛人是在太多,我的水平,估计连高 ...

  4. 条款24:若所有的函数参数可能都需要发生类型转换才能使用,请采用non-member函数

    假设有一个有理数类Rational,有一个计算有理数乘法的成员函数operator*,示例如下: #include <iostream> class Rational { public: ...

  5. 将商户后台_门店管理后台_平台后台管理v1.0 Axure RP项目上传到svn服务器步骤

  6. ubuntu14.04建立交叉编译环境, 注意事项

    ubuntu14.04建立交叉编译环境, 注意事项 ~$ arm-linux-gcc/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: e ...

  7. EF4.1之贪婪加载和延迟加载

    默认情况下,EF4.1是只查询到涉及到的数据对象,但是EF4.1支持两种方法进行控制其加载: 1.贪婪加载 2.延迟加载 使用的表还是上次使用的Order 和 OrderDetails两张表来举例说明 ...

  8. PHP错误The server encountered an internal error or misconfiguration and was unable to complete your re

    我的笔记本电脑上的环境安装了很多次,但是运行项目时总是会报The server encountered an internal error or misconfiguration and was un ...

  9. jQuery实现模拟滚动条效果;

    滚动条在web开发中,很常见,原生的HTML滚动条很难看,因此很多网站借助JS来模拟实现滚动条效果: 滚动条的实现原理其实比较简单,拿垂直滚动条来说: 1),最外层容器需要设置overflow:hid ...

  10. 1491: [NOI2007]社交网络 - BZOJ

    Description Input Output输出文件包括n 行,每行一个实数,精确到小数点后3 位.第i 行的实数表 示结点i 在社交网络中的重要程度.Sample Input4 41 2 12 ...