说明:之前有一点搞错了,就是float其实是浮动起来,其它元素会位于它的底层。


最近在系统地学习HTML5,感觉补上了好多缺失的知识。

例如:

锚点定位其实可以通过 id 来实现;

CSS 使用 !important 来设置强优先级;

子元素只能继承父元素的字体、颜色等外观,但默认不能继承布局样式。如果必须要继承,需要让具体的属性设为inherit,如:border: inherit;

text-transformuppercaselowercasecapitalize等选项。

font-variant  有small-caps 这个选项,还可以normal 来复原。

displayfloat!!! -- 这是本文的主题。

首先,HTML 中有两类特别的元素:块级元素(block)内联元素(inline)。其实还有一种 内联-块级元素(inline-block)

区别在于:

块级元素(block)  可以有效地设置 width 和height,且自带换行。 如<div>。

内联元素(inline) 不能有效地设置 width 和height,且没有换行。  如<span>。

内联-块级元素(inline-block)。则可以有效地设置 width和height, 但没有换行。 如<img>。

举个例子:

 <html>

 <head>
<meta charset="utf-8">
<title>Demo for "block"/"inline"/"inline-block"</title> <style>
/*为div设置尺寸*/
div, span {
width: 200px;
height: 200px;
}
/*为div设置颜色:红黄绿*/
div#a {
background: red;
}
div#b {
background: orange;
}
div#c {
background: green;
}
/*为span设置颜色:灰*/
span {
background: grey;
}
</style>
</head> <body>
<div id="a">
我是div#a
</div>
<div id="b">
我是div#b
</div>
<div id="c">
我是div#c
</div> <span>我是SPAN 1,按说我的尺寸就是内容的尺寸</span>
<span>我是SPAN 2,按说我的尺寸就是内容的尺寸</span> </body> </html>

显示如下:

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

能够明显看到:块级元素div是有宽度和高度,且自带换行;而内联元素span的宽度和高度取决于其内容的宽度和高度,且没有换行。

至于 内联-块级元素img 就不示意了。

CSS 可以将块级元素 和 内联元素 互换!!! -- 具体是通过display 属性来实现的。

先看看如何将 块级元素 变为 内联元素

div#a {
/*其它设置省略*/
display: inline;
}

结果如下:

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

可以看到 div#a 的宽度和高度已经不是200px啦,但是仍然具备换行  -- 这个稍后说。

再来看看 span 如何变成 块级元素

span {
display: block;
width: 200px;
height: 200px;
}
 

结果如下:

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

可以看到 span已经变成了块级元素,能够设置宽度和高度,还自带换行了。

现在,再来说说 div 变成内联元素仍然换行的问题 -- 只说解决方案,因为我也不知道内部原理是怎么回事。

解决方案就是: float

我的理解,这货的作用就是:

如果设置了 float: left ,就是跑到下一个元素的左边,或者说把下一个元素拽到自己的右边;【错误的】

如果是 float: right, 就是跑到下一个元素的右边,而且贴近父元素的边界。【错误的】

就是漂浮起来,位居其它元素之上,不与它们争夺地盘!!! 但是,因为我们是俯视它们,所以漂浮起来的元素会遮挡住它下面的元素!!!

-- 变成浮动的,飘来飘去,虽然不再霸道的占据整行,但仍然有自己的尺寸。【错误的】

这里只示意一下(div恢复block,span恢复inline):

div#b {
background: green;
float: left; /*我的右边没有换行*/
}

结果如下(div#b 浮空了,div#c就跑它下面去了,所以看不见啦 -- 但文字跑不过去,就与SPAN-1的重合了):

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

我们可以改变一下div#b的宽度和高度,将其设为100px,然后就能看到没有被遮住的div#c啦:

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

其实float 有个特性:如果前一个元素也是float的,那二者会水平并列(除非一行装不下,那会换行);如果前一个元素不是float的,那float的会位于前一个元素的下面。

那么,当多个div都浮动的时候,会发生什么?--彼此连接的同时覆盖后面的非float元素!!!

但这未必是我们想要的。

拿上一个例子来说,如果我不想让div#b覆盖div#c,应该怎么做?

很简单, div#c 的clear设为right即可(只是用来演示,如果真要设置的话,b和c都设为float即可并列),效果如下:

我是div#a
我是div#b
我是div#c

我是SPAN 1,按说我的尺寸就是内容的尺寸 我是SPAN 2,按说我的尺寸就是内容的尺寸

这里有个关键:clear是作用于自身,就是说是决定自己某侧浮动与否

这有点像一些人的性格:不管外界如何,我坚持我的原则;如果我不认同你,我就离开,哪怕你很牛逼(float)。

CSS的块级元素和内联元素,以及float的更多相关文章

  1. Code笔记之:CSS块级元素、内联元素概念

    文档流 将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 内联元素也不 ...

  2. CSS文档流与块级元素和内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  3. CSS文档流与块级元素和内联元素(文档)

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不 少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指 南> ...

  4. CSS块级元素、内联元素概念

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  5. CSS的块级元素和内联元素的概念

    三生有幸,偶然之下知道了<CSS世界>这本书,让我产生了探究 CSS 的想法. 这里对 CSS 中的块级元素和内联元素的概念做一个简单的整理. 可能对于我们前端开发人员来讲,一般接触到的元 ...

  6. css中块级元素、内联元素(行内元素、内嵌元素)

    Block element 块级元素    顾名思义就是以块显示的元素,高度宽度都是可以设置的.比如我们常用 的<div>.<p>.<ul>默认状态下都是属于块级元 ...

  7. CSS 块级元素、内联元素概念

    p.h1.或div等元素常常称为块级元素,这些元素显示为一块内容:Strong.span等元素称为行内元素,它们的内容显示在行中,即“行内框”.(可以使用display=block将行内元素转换成块元 ...

  8. CSS文档流、块级元素、内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  9. CSS块级元素、内联元素概念[转]

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

随机推荐

  1. RVM切换ruby版本号

    RVM是Ruby Version Manager的缩写,是一个命令行工具,它能够让你轻松地安装,管理和使用多个版本号的Ruby.不同的rails项目使用等ruby和rails版本号不一样的时候.能够使 ...

  2. c++11新增的一些便利的算法

    c++11新增加了一些便利的算法,这些新增的算法使我们的代码写起来更简洁方便,这里仅仅列举一些常用的新增算法,算是做个总结,更多的新增算法读者可以参考http://en.cppreference.co ...

  3. python(45)内置函数:os.system() 和 os.popen()

    os.system() 和 os.popen() 概述 os.popen() 方法用于从一个命令打开一个管道. 在Unix,Windows中有效 语法 popen()方法语法格式如下: os.pope ...

  4. Openfire注册流程代码分析

    Openfire注册流程代码分析 一.客户端/服务端注册用户流程 经过主机连接消息确认后,客户端共发送俩条XML完成注册过程.服务器返回两条XML. 注:IQ消息节点用于处理用户的注册.好友.分组.获 ...

  5. adb install使用说明

    [时间:2016-08] [状态:Open] [关键词:android, apk,adb install] 将apk安装到模拟器或者手机上. Pushes an Android application ...

  6. 【机器学习】Softmax 和Logistic Regression回归Sigmod

    二分类问题Sigmod 在 logistic 回归中,我们的训练集由  个已标记的样本构成: ,其中输入特征.(我们对符号的约定如下:特征向量  的维度为 ,其中  对应截距项 .) 由于 logis ...

  7. Docker考前突击

    dockerfile 介绍 镜像(Image)     容器(Container)     仓库(Repository)

  8. 不要问我有多懒,写个脚本跑django

    写django的都知道,要跑起django测试环境,只需要 python manage.py runserver 就可以了,但是时间一长,就觉得敲这个命令太浪费时间了,而我又是个懒人. 同事用的是ct ...

  9. django 部署,gunicorn、virtualenv、nginx

    声明: 1.本篇文章是我边写命令边写的,请尊重我的劳动成果,转载请加上链接. 2.我既然公开写出来,是希望大家遇到问题的时候有个参考,所以,大家可以免费转载,使用该文章 3.但是,如果你要用这篇文章来 ...

  10. Android Studio SVN使用

    昨天弄了一天的Android Studio svn,感觉没有eclipse的svn好装,中间遇到很多的麻烦问题.这里来记录下吧 上传比较简单,就直接贴我看我别的的上传教程. https://blog. ...