CSS布局

1,928次阅读
没有评论

共计 2140 个字符,预计需要花费 6 分钟才能阅读完成。

常见的布局属性

(1)display 确定元素的显示类型:

  • block:块级元素。

  • inline:行内元素。

  • inline-block:对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以设置宽高)。

(2)position 确定元素的位置:

  • static:默认属性值。

  • relative:相对定位。相对于元素本身进行偏移,不会改变它所占据的空间

  • absolute:绝对定位。相对于父元素中最近的 relative/absolute 进行偏移,会脱离文档流。音标:[ˈæbsəluːt]。

  • fixed:固定定位。相对于可视区域固定,会脱离文档流。

relativeabsolutefixed这三个属性,可以结合 z-index 来设置层级。

常见的布局方法

1、table 表格布局:早期使用的布局,如今用得很少。

2、float 浮动 + margin:为了兼容低版本的 IE 浏览器,很多网站(比如腾讯新闻、网易新闻、淘宝等)都会采用 float 布局。

3、inline-block 布局:对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以设置宽高)。

4、flex 布局:为布局而生,非常灵活,是最为推荐的布局写法。

唯一的缺点是兼容性问题:

CSS 布局

上图中可以看到,flex 布局不支持 IE9 及以下的版本。如果你的页面不需要处理 IE 浏览器的兼容性问题,则可以放心大胆地使用 flex 布局。

flex 是一种现代的布局方式,是 W3C 第一次提供真正用于布局的 CSS 规范。

5、响应式布局。

float 布局

是 CSS 中一种比较麻烦的属性,涉及到 BFC 和清除浮动(面试的重点)。

float 属性的特点

  • 元素浮动

  • 脱离文档流,但不脱离文本流

代码举例:

下面这两个并列的 div1div2,默认是在标准流中的:

CSS 布局

在此基础之上,如果给 div1 增加 float: left 属性后,效果如下:

CSS 布局

上图中,可以看到,div1设置为浮动后,会脱离文档流,不会对 div2 的布局造成影响;但是 div1 不会脱离文本流,它会影响 div2 中文字的排列。

其实,这正是 float 属性的作用。float 本身是用来做图文混排、文字环绕的效果。

float 所带来的影响

1、对自身的影响

  • 形成“块”(BFC)

  • 位置尽量靠上

  • 位置尽量靠左 / 右

下面这两个并列的 div1div2,设置为浮动之后的效果:(都是尽量靠左显示的)

CSS 布局

在上方代码的基础之上,增加 div2的宽度之后,会发现,div2掉下来了:

CSS 布局

2、对兄弟元素的影响

  • 不影响其他块级元素的位置

  • 影响其他块级元素的内部文本

3、对父级元素的影响

  • 从父级的布局中“消失”

  • 造成父级元素的高度塌陷:父级元素撑开 div1 之后(父级元素里没有其他元素的情况下),如果设置 div1 为 float 之后,,会让父级元素的高度变为 0。

inline-block 布局

对外的表现是行内元素(不会独占一行),对内的表现是块级元素(可以设置宽高)。

思路:像文本一样去排列 block 元素,没有清除浮动等问题。

存在的问题:需要处理间隙。代码举例如下:

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<style>
	.container{
		width: 300px;
		height: 300px;
		background: pink;
	}

	.div1{
		width: 100px;
		height: 100px;
		background: green;
		display: inline-block;
	}

	.div2{
		width: 100px;
		height: 100px;
		background: yellowgreen;
		display: inline-block;
	}

	.div3{background: yellow;}
</style>

<body>
	<div class="container">
		<div class="div1">div1 的 inline-block 属性 </div>
		<div class="div2">div2 的 inline-block 属性 </div>
		<div class="div3">
			琴棋书画不会,洗衣做饭嫌累。</div>
	</div>
</body>

</html>

CSS 布局

上面的代码,存在两个问题。

问题一 :如果设置div2 的宽度为 200px 之后,div2 掉下来。

问题二 div1div2设置为 inline-block 之后,这两个盒子之间存在了间隙。这是因为,此时的 div1div2 已经被当成文本了。文本和文本之间,本身就会存在间隙。

为了去掉这个间隙,可以有几种解决办法:

办法 1:设置父元素 container 的字体大小为 0,即 font-size: 0,然后设置子元素 div1div2 的字体font-size: 12px

办法 2:在写法上,去掉 div1div2之间的换行。改为:

<div class="div1">div1 的 inline-block 属性 </div><div class="div2">div2 的 inline-block 属性 </div>

响应式布局

移动端用得较多,本文暂时先不讲。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-10发表,共计2140字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)