HTML&CSS常见问题解决

一、解决img图片底部空白问题

1、出现问题的效果

在写网页的时候,在div中插入一张img图片,发现与下面有背景的div之间有白色空隙,虽然可以把下面div向上移动直到空隙消失,但这并不是最好的解决方式,所以来探索其中真正的原因。
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style type="text/css">
		.top{
      
      
			width: 250px;
			margin: 0 auto;
		}
		.top img{
      
      
			width: 250px;
			height: 150px;
		}
		.middle{
      
      
			width: 250px;
			height: 100px;
			margin: 0 auto;
			background-color:#00FFFF;
		}
	</style>
	<body>
		<div class="top">
				<img src="640.jpg" >
		</div>
		<div class="middle">
			
		</div>
	</body>
</html>

2、原理

img标签的display属性的默认值是inline

img没有基线(baseline),这意味着,当在一个行内格式的上下文中使用vertical-align: baseline时,图像的底部将会与容器的文字基线对齐。这就造成了空隙的问题

什么是基线?在字体设计时,有top,text top(顶线),super(上基线),baseline(基线),sup(下基线),text bottom(底线),bottom这几条线组成

在这里插入图片描述

3、解决方式

3.1、将图片变为盒子

在这里插入图片描述

	img{
    
    
		display: block;
	}

不单单是img元素,凡是行内元素都具有这样的特性,在HTML代码格式化后,行内元素之间的换行,空格等都会被浏览器解析成一个空格,就出现了空隙

3.2、处理基线

	img{
    
    
		vertical-align: middle;
	}

3.3、把上级元素的字体大小改成0像素

	body{
    
    
		font-size: 0;
	}

出现留白的原因是因为垂直对齐的方式所导致的,所以可以修改父元素的font-size,把父元素的字体大小改为0,所以就没什么垂直对齐,但是会影响该标签内的元素,不建议使用

二、解决给子元素设置margin-top父子盒子都向下移动问题

1、出现问题的效果

给子元素设置了margin-top:20px;结果父元素也跟着一起向下移动了20px
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style type="text/css">
		.top{
      
      
			width: 250px;
			margin: 0 auto;
		}
		.top img{
      
      
			width: 250px;
			height: 150px;
			display: block;
		}
		.middle{
      
      
			width: 250px;
			height: 100px;
			margin: 0 auto;
			background-color:#00FFFF;
		}
		.center{
      
      
			width: 200px;
			height: 30px;
			background-color: bisque;
			margin-top: 20px;
		}
	</style>
	<body>
		<div class="top">
				<img src="640.jpg" >
		</div>
		<div class="middle">
			<div class="center">
				<span>我是子元素</span>
			</div>
		</div>
	</body>
</html>

2、原理

标准文档流内块级元素的top与bottom外边距有时会合并(塌陷)为单个外边距(合并后最大的外边距),这样的现象称之为外边距塌陷(margin collapsing)

造成这个现象的原因是:
1.当一个元素包含另一个元素时(父元素没有边框),它们的顶和/或底边界会发生叠加。
2.只有标准文档流中块级元素垂直边界才会发生边界叠加(塌陷)。行内元素、浮动元素或绝对定位元素之间的边界不会叠加。

3、解决方式

3.1、给父元素设置边框

		border: 1px solid black;

给父元素设置边框后,边界就不贴合了
在这里插入图片描述

3.2、给父元素设置overflow属性

		overflow: hidden;

在这里插入图片描述

+ overflow:hidden的特点

overflow:hidden 超出该元素部分隐藏

了解BCF机制,BFC(Block Formatting Context)全称是块级格式化上下文,用于对块级元素排版,如果一个块级元素设置overflow:hidden,就会为这个块级元素生产一个独立的块级上下文,使这个块级元素内部的排版完全独立。

如果相邻元素中至少有一个元素位于不同的 BFC 中,那么它们的外边距就不会发生重叠

应用:

  1. overflow:hidden超出部分隐藏,一般情况下,在页面中,一般溢出后会显示省略号
  2. overflow:hidden 清除浮动:一般而言,父级元素不设置高度时,高度由随内容增加自适应高度
  3. overflow:hidden 解决外边距塌陷:父级元素内部有子元素,如果给子元素添加margin-top样式,那么父级元素也会跟着下来,造成外边距塌陷。

3.3、给父元素设置padding-top属性

		padding-top: 10px;

在这里插入图片描述

三、解决padding把盒子撑大问题

1、出现问题的效果

给蓝盒子设置padding:10px后我们所想的粉盒子居中显示,结果父盒子也随之改变
在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style type="text/css">
		.father{
      
      
			width: 220px;
			height: 220px;
			background-color: #00FFFF;
			padding: 10px;
		}
		.son{
      
      
			width: 200px;
			height: 200px;
			background-color: #FFC0CB;
		}
	</style>
	<body>
		<div class="father">
			<div class="son">
				
			</div>
		</div>
	</body>
</html>

2、原理

这里我们需要了解两种盒子模型

2.1、标准盒子模型(W3c标准盒子模型)

在标准模型中,一个块的总宽度= width + margin(左右) + padding(左右) + border(左右)

box-sizing属性默认为content-box,所以我们常见的都为标准盒子

		box-sizing: content-box;

在这里插入图片描述
上面案例中父盒子width=220px,padding=20px,border=0px,margin=0px
所以父盒子的总宽度为240px

2.2、怪异盒子模型(IE标准盒子模型)

在怪异模型中,一个块的总宽度= width + margin(左右)(即width已经包含了padding和border值)

给父元素添加box-sizing:border-box,变为怪异盒子,就可以实现内缩的效果

		box-sizing: border-box;

在这里插入图片描述
父盒子width=220px,padding=20px,border=0px,margin=0px,因为with已经包含了padding的值,所以父盒子总宽度为220px

3、更改盒子类型

将标准盒子模型更改为怪异盒子模型即可
在父盒子中添加属性

		box-sizing: border-box;

粉盒子成功居中显示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52108058/article/details/129250359