块级元素与行内元素,怎么用CSS控制它们、以及如何合理的使用它们
它们的定义
1.块级元素:每个块级元素默认占一行高度,若有块级元素则同行无法再添加其他元素(float浮动除外)
特点:
高度行高以及外边距内边距都可控制
宽度默认100%
可以容纳内联元素及块元素
2.行内元素:可以和其他元素都在一行上.
特点:
宽度就是它的文本或图片的宽度,不可改变
内联元素只能容纳文本或者其他的内联元素
设置宽度width无效
设置高度height无效,可通过line-height来设置
设置margin只有左右有效,上下无效
设置padding只有左右padding有效,上下无效
3.行内块状元素:综合了行内元素与块状元素的特性,但是各有取舍
特点:
不自动换行
能够识别宽高
默认排列方式从左到右
4.块级元素有哪些:
div | dl(定义列表) | h1(h开头系列) | hr | menu | ol | p | table | ul
5.行内元素有哪些:
a | b | br | em | i | img | input | label | select | span | strong
sub | textarea | u
6.行内块状元素有哪些:
button | del | iframe | ins | map | object
浮动元素:怎么使用它们、它们有什么问题以及怎么解决这些问题通俗讲解
1.首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也是传说中的流
由此可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后面,显然标准流已
经法满足需求,这就要用到浮动
浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。
假设上图中的div2浮动,那么它将脱离标准流,但是div1,div3,div4仍然在标准流当中所以div3会自动向上移动,占据div2的位置,重新组成一个流。
从图中可以看出,div2不再属于标准流,div3自动上移顶替div2的位置,div1,div3,div4依次排列,成为新的流,又因为浮动是漂浮在标准流上面的,所以div2挡住了一部分的div3,所以div3看起来变矮了。
如果把div2右浮动,我们看的是这个效果:
下面我们把div2和div3都加上左浮动,效果如图:
同理,由于div2,div3浮动之后,div3会跟随在div2之后,但是从以上的每个例子中,div2都是浮动的,但是却没有跟在div1之后,因此可以得到一个重要结论:
div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(若是一行放不下的情况,则会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部是和上一个元素的底部对齐。
假如我们把div2,和div4左浮动,效果图如下:
结论依然是:div2,div4浮动,脱离了标准流,因此div3将会自动上移,与div1组成标准流。div2发现上一个元素是标准流的元素,因此div2相对垂直位置不变,与div1底部对刘。div4发现上一个元素div3也是标准流中的元素,因此div4的顶部与div3的底部对齐。
恭喜你已经掌握了添加浮动.
现在我们来聊一下清除浮动,有上边的基础清除浮动非常理解
语法:clear: none | left | right | both
none:允许两边都有可以有浮动对象
left:不允许左边有浮动对象
right:不允许右边有浮动对象
both:不允许有浮动对象
根据上边的基础,假如页面中只有两个元素div1,div2,他们都是左浮动,场景如下:
这时候使用清除浮动,根据官方定义,读者可能会尝试这样写,在div1中的样式中添加clear:right,理解为不允许div1的右边有浮动元素,由于div2是浮动元素,因此会自动下移一行来满足规则。
其实这种理解是不正确的,这样做没有任何效果。
对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。
怎么理解呢?就拿上边的例子来说,我们是想让div2移动,但我们却是在div1元素的CSS样式中使用了清除浮动,试图通过清除div1右边的浮动元素 (clear:right;)来强迫div2下移,这是不可行的,因为这个清除浮动是在div1中调用的,它只能影响div1,不能影响div2。
根据定论,要想让div2下移,就必须在div2的CSS样式中使用浮动。本例中div2的左边有浮动元素div1,因此只要在div2的CSS样式中使用clear:left;来指定div2元素左边不允许出现浮动元素,这样div2就被迫下移一行。
对于右浮动也亦是如此。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。