display属性和浮动

网页布局排版

标准文档流:指元素根据块元素或行内元素的特性按从上到下,从左到右的方式自然排列。这也是元素默认的排列方式。(未排版

标准文档流组成

块级元素(block)

<h1>…<h6>、<p>、<div>、列表

内联元素(inline)

<span>、<a>、<img/>、<strong>...

内联标签可以包含于块级标签中,成为它的子元素,而反过来则不成立

1229fcd5b34b67d25.png
排版后

在这里插入图片描述

display属性的使用

display属性用于指定HTML标签的显示方式,它的值有许多个,常用的有四个
说明
block 块级元素的默认值,元素会被显示为块级元素,该元素前后会带有换行符
inline 内联元素的默认值。元素会被显示为内联元素,该元素前后没有换行符
inline-block 行内块元素,元素既具有内联元素的特性,也具有块元素的特性
none 设置元素不会被显示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>display</title>
    <style>
        div{
     
     
            width: 100px;
            height: 100px;
            border: 1px solid red;
        }
        span{
     
     
            width: 100px;
            height: 100px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div>div块元素</div>
    <span>span块元素</span>
</body>
</html>

我们把div元素和span元素的宽高设置的都是100px,可以明显看到span元素小了很多,由于span元素是行内元素,所以有多少内容,它就会撑开多大,那我们要想让它想块元素那样怎么办呢?

dis.jpg

在我们span的样式里加入,可以把行内元素变成块元素

display: block;

在这里插入图片描述

这样两个元素的大小就一样啦!相反display: inline;可以把块元素变行内元素。

那么我们怎么把他们两个放在一行呢?如果把div和span设置成行内元素的话,那么我们设置宽高都会失效。这是行内元素的特点,内容撑开宽度。

dis4b961dab62538c867.jpg

在div和span的样式里都加入

/*既保持块元素的特征又可以写在一行*/
display: inline-block;

dis3.jpg

我们给div的样式加上display: none;
在这里插入图片描述

可以看到,div块直接消失了。


浮动

float属性
left:元素向左浮动
right:元素向右浮动
none:默认值,元素不会浮动,并会显示在其文本中出现的位置

什么是浮动?

  • 元素的浮动是指设置了浮动属性的元素会脱离标准文档流的控制,移动到其父元素中指定位置的过程。同时默认情况下,盒子不再伸展,而是根据盒子里面的内容和宽度来确定。
  • 也就是经常见到的float:left或者float:right,简单点来说,前者是左浮动(按照流式来浮动从左到右,放不下则换行),后者是右浮(往右飘)动。

浮动能干嘛?

  • 实现网页布局中的“左中右”或“左右”布局类型。还可以对网页的导航菜单、栏目标题、商品列表等内容进行排版。
<div id="father">
    <div class="layer01"><img src="images/photo-1.jpg" alt="日用品"/></div>
    <div class="layer02"><img src="images/photo-2.jpg" alt="图书"/></div>
    <div class="layer03"><img src="images/photo-3.jpg" alt="鞋子"/></div>
    <div class="layer04">
        浮动的盒子可以向左浮动,也可以向右浮动,直到它的外边缘碰到包含框或另一个浮动盒子为止。本网页中共有三个图片,分别代表日用品图片、图书图片和鞋子图片。这里使用这三个图片和本段文字来演示讲解浮动在网页中的应用,根据需要图片所在的div分别向左浮动、向右浮动,或者不浮动。
    </div>
</div>
div {
    
    
   margin:10px;
   padding:5px;
}
#father {
    
    
   border:1px #000 solid;
}
.layer01 {
    
    
   border:1px #F00 dashed;
}
.layer02 {
    
    
   border:1px #00F dashed;
}
.layer03 {
    
    
   border:1px #060 dashed;
}
.layer04 {
    
    
   border:1px #666 dashed;
   font-size:12px;
   line-height:23px;
}

先看到这个页面,这是没有浮动的

在这里插入图片描述

我们把书向左浮动,原本div块独占一行,也可以挨在一块了。床和书的左边框和上边框重合了,这是因为设置完左浮动的床已经脱离标准文档流,所以标准文档流的书顶到了原来床的位置,鞋也随着书的移动而向上移动。

  • 元素默认是根据标准文档流排列的。设置了浮动后会脱离文档流,浮起来。大家可以想象成空间上的元素从水平面上浮起来了,下面的内容还在标准文档流中,前面的位置空了,自然就顺序的往上移了。

在这里插入图片描述

把床、书、鞋都设置左浮动

在这里插入图片描述
把鞋右浮动,鞋子飘到文字右边了,都并到一排了
在这里插入图片描述

把床、书、鞋都设置右浮动,它们把文字挤到左边 来了

55.jpg

给文字设置了右浮动,文字并没有像我们希望的那样排在右面,而是排在了最下方。浮动的文字段落在没有设置宽度的时候会占满一行。
在这里插入图片描述

给文字的盒子设置宽度以后,文字如愿往右边靠了。

在这里插入图片描述

但我们又发现了一个新的问题,包裹这些元素的那个大边框缩上去了,包不住里面的子元素了。这个怎么解决呢?这个就需要设置清除浮动了。

clear清除浮动

在页面排版时会影响其他元素的位置。如果子元素全部浮动了,父级将包不住子元素造成边框塌陷。clear的作用就是消除浮动元素对其他元素的影响。

说明
left 在左侧不允许浮动元素
right 在右侧不允许浮动元素
both 在左、右两侧不允许浮动元素
none 默认值。允许浮动元素出现在两侧

解决父级边框塌陷问题

1.浮动元素后面加空div

<div id="father">
    <div class="layer01"><img src="images/photo-1.jpg" alt="日用品"/></div>
    <div class="layer02"><img src="images/photo-2.jpg" alt="图书"/></div>
    <div class="layer03"><img src="images/photo-3.jpg" alt="鞋子"/></div>
    <div class="layer04">
        浮动的盒子……
    </div>
    <div class="clear"></div>
</div>
.clear{
    
    
   clear: both;
   margin: 0;
   padding: 0;
}

2.设置父元素高度

height:400px;

3.父级元素添加overflow属性

overflow:hidden;
属性值 说明
visible 默认值。内容不会被修剪,会呈现在盒子之外
hidden 内容会被修剪,并且其余内容是不可见的
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余内容
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容

4.父级添加伪类after

<div id="father" class="clear">
    <div class="layer01"><img src="images/photo-1.jpg" alt="日用品"/></div>
    <div class="layer02"><img src="images/photo-2.jpg" alt="图书"/></div>
    <div class="layer03"><img src="images/photo-3.jpg" alt="鞋子"/></div>
    <div class="layer04">
        浮动的盒子……
    </div>
    <div class="clear"></div>
</div>
.clear:after{
    
    
	content:'';     	/*在clear类后面添加内容为空*/
	display:block;		/*把添加的内容转化为块元素*/
	clear:both;			/*清除这个元素两边的浮动*/
}

清除浮动,防止父级边框塌陷的四种方法:

  1. 浮动元素后面加空div。简单,空div会造成HTML代码冗余

  2. 设置父元素的高度,简单,元素固定高会降低扩展性

  3. 父级添加overflow属性,简单,下拉列表框的场景不能用

  4. 父级添加伪类after,写法比上面稍微复杂一点,但是没有副作用,推荐使用

inline-block和浮动的区别

  • display:inline-block
  1. 可以让元素排在一行,并且支持宽度和高度,代码实现起来方便

  2. 位置方向不可控制,会解析空格

  3. IE 6、IE 7上不支持

  • float
  1. 可以让元素排在一行并且支持宽度和高度,可以决定排列方向

  2. float 浮动以后元素脱离文档流,会对周围元素产生影响,必须在它的父级上添加清除浮动的样式

无论display:inline-block的方法还是float的方法都可以实现两栏三栏布局,他们各自有自己的优势和不足。

猜你喜欢

转载自blog.csdn.net/weixin_45277249/article/details/112132398