CSS盒模型布局规则

目录

一、水平布局:

二、垂直布局:

三、垂直外边距的重叠:

解决父子外边距重叠的问题

四、内联元素(行内元素)的盒子:

五、默认样式:

面试题:目前常用的重置样式表有哪些?他们的区别是什么

六、盒子的大小:


一、水平布局:

过度约束:浏览器的一种渲染机制,一种规则

元素水平方向七个值:margin-left border-left padding-left width padding-rigt border-right margin-right相加,必须等于其父元素内容区的宽度,如果不相等,浏览器就会强制调整7个值中某些值(margin、width),实现全等。

浏览器如何调整呢?

满足以下条件:

七个值中,有margin-left width margin-right可以被设置为auto

1、如果这七个值里面没有设置为auto的,那么浏览器默认margin-right为auto,增加margin-right值使这七个值相加等于父元素内容区宽度。

2、如果给width(默认就是子元素内容区宽度)设置auto,由于它的优先级最高,不管其它值有没有设置auto,都是给它调整大小。

3、如果单独给margin-left或margin-right设置auto,那么设谁auto就改谁,都设auto就平分,使盒子居中。


二、垂直布局:

一般情况下,我们是不给外层框架,设置固定高度,让其被内容撑开,随着子元素的变化而变化

如果设置了高度,内容就可能会溢出,可以用overflow样式设置

可选值:

visible 文本正常显示,不生成滚动条

hidden 裁剪多余

scroll 生成两侧滚动条

auto 根据实际内容大小自动生成滚动条

有滚动效果,但不希望有滚动槽: scrollbar-width: none;


现在我在div里面加了个p,给div设置了宽高和背景色,文字就溢出了,会影响下面的盒子,这时候可以使用overflow:hidden;来裁剪多余

css 复制代码
.box1 {
  width: 200px;
  height: 200px;
  background-color: #bfa;
  margin: 50px auto 0px;/*这里是上边距50px,左右自动使box1居中,底部为0 */
  overflow: hidden;/*hidden属性值就是裁剪多余*/
  /* 去除滚动槽 */
  /* scrollbar-width: none; */
}
p {
  /* width: 400px; */
  height: 400px;
}
 


三、垂直外边距的重叠:

兄弟元素:

兄的下外边距和弟的上外边距重叠在一起了

1、如果都是正值,以较大的为准

2、如果都是负值,以绝对值较大的为准

3、如果一正一负,两者相加

兄弟元素的外边距,一般不需要做额外处理

父子元素

如果父子元素的垂直外边距相邻了,则子元素的外边距会传递给父元素,导致父元素位置发生改变

解决父子外边距重叠的问题

1、overflow:非visble默认值即可,

因为它开启了BFC(块级格式化),是标签的隐藏属性,会使这个标签

成为一个独立的区块,不受其他标签样式影响

2、设置透明的边框线,隔开父子元素

3、定义一个单独的类名,哪里需要,在哪里添加这个类名

css 复制代码
.clearfix::before {
  /* 增加空内容 */
  content: "";
  /* 将空内容转换类型为空表格 */
  display: table;
}
 

四、内联元素(行内元素)的盒子:

内容区:不可以被设置大小,是被内容撑开

内边距/边框 :可以设置,而且垂直方向不会挤其他元素,让其他元素位置发生变化,只会覆盖其他元素

外边距:水平方向可以设置,水平方向的外边距会叠加(设右外边距会动,不同于块元素没反应)

垂直方向设置不生效


五、默认样式:

浏览器为了在页面中没有样式时,也可以有一个比较好的显示效果,所以为很多的元素都设置了一些默认的margin和padding,而它的这些默认样式,正常情况下我们是不需要使用的。

所以我们往往在编写样式之前需要将浏览器中的默认的margin和padding统统的去掉

html 复制代码
<head>
  <!-- 重置样式表 -->
  <link rel="stylesheet" href="./reset.css" />
  <!-- 自己的样式 -->
  <link rel="stylesheet" href="./index.css" />
</head>
 

注意:自己的样式要写在重置样式表下面,不然会被覆盖


面试题:目前常用的重置样式表有哪些?他们的区别是什么

reset.css/Normalize.css

都可以解决浏览器对默认样式的兼容性问题

reset.css解决方案是,将默认样式都去除掉,需要什么样式,程序员自己写

Normalize.css解决方案是:不去除默认样式,而是解决你不同浏览器对默认样式解析不一样的问题


六、盒子的大小:

默认情况下:盒子可见宽的大小由内容区,内边距,边框共同决定

box-sizing 用来设置盒子尺寸的计算方式 即width/height 指的是谁

可选值:

content-box 内容区 默认值

border-box 宽度和高度用来设置整个盒子可见框的大小,包括边框,padding,内容区

css 复制代码
.box {
  width: 100px;
  height: 100px;
  background-color: red;
  border: 10px solid yellowgreen;
  box-sizing: border-box;
  /* 设置border-box后,上面的width和height就是我整个盒子的大小,即内容区加边框等于100 10+80+10 */
}
 
相关推荐
willow1 分钟前
JavaScript数据类型整理1
javascript
LeeYaMaster2 分钟前
15个例子熟练异步框架 Zone.js
前端·angular.js
evelynlab5 分钟前
打包原理
前端
LeeYaMaster7 分钟前
20个例子掌握RxJS——第十一章实现 WebSocket 消息节流
javascript·angular.js
拳打南山敬老院1 小时前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
用户3076752811271 小时前
💡 从"傻等"到"流淌":我在AI项目中实现流式输出的血泪史(附真实代码+深度解析)
前端
bluceli1 小时前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
UIUV1 小时前
RAG技术学习笔记(含实操解析)
javascript·langchain·llm
SuperEugene1 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
没想好d1 小时前
通用管理后台组件库-9-高级表格组件
前端