前端之盒模型

盒模型

在这里插入图片描述

在 CSS 中,所有HTML元素都可以看作盒子,由内而外表示为——内容 内边距 边框 外边距。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

块级盒子 和 内联盒子

用display 属性的进行设置,比如 inline(内联盒子) 或者 block(块级盒子)。

块级盒子(Block box)

  1. Block box会扩展并占据父容器的所有空间,所以在绝大数的情况下盒子会和父容器一样宽
  2. 每个盒子都会换行
  3. 可以使用width 和 height 属性指定盒子宽高。
  4. 水平方向的内边距、外边距以及边框会被应用且会将其他元素推开。
    默认块级元素(block),例如:元素h1 p ul

内联盒子(Inline box)

  1. 内联盒子不会产生换行。
  2. width 和 height 属性将不起作用。
  3. 垂直方向的内边距、外边距以及边框会被应用但是不会把其他内联盒子推开。
  4. 水平方向的内边距、外边距以及边框会被应用且会把其他处于 inline 状态的盒子推开。

默认内联元素(inline),例如:元素 a span em strong

弹性布局 flex

<style>
	display:flex;
</style>

弹性子元素通常在弹性盒子内一行显示。默认情况每个容器只有一行。

样式一:

<style>
/* container
-------------------------------------------------- */

.container h2,
.container p,
.container ul {
    border: 2px solid black;
    padding: 0.5em;
}

.container ul li,
.container .block {
    border: 2px solid blue;
    padding: .5em;
    margin-right: .5em;
}


/* 将ul元素定义为弹性盒子,内部子元素会排成一列 */

.container ul {
    display: flex;
    list-style: none;
}

.container p .block {
    display: block;
}
</style>
    <div class="container">
        <h2>不同显示类型的例子1</h2>
        <p>I am a paragraph. A short one.</p>
        <ul>
            <li>Item One</li>
            <li>Item Two</li>
            <li>Item Three</li>
        </ul>
        <p>I am another paragraph. Some of the <span class="block">words</span> have been wrapped in a <span>span element</span>.</p>
    </div>

在这里插入图片描述

样式二:

<style>
/* .container2
-------------------------------------------------- */


/* 给每个元素一个边框 */

.container2 h2,
.container2 p,
.container2 ul {
    border: 2px solid blue;
    padding: .5em;
}

.container2 ul {
    margin-top: .2em;
    margin-bottom: .2em;
}

.container2 span {
    border: 2px solid blue;
}

.container2 ul li {
    list-style: none;
    border: 2px solid black;
    padding: .5em;
    margin-right: .5em;
}


/* 将ul设置为弹性盒子,且内部子元素排列在一行 */

.container2 ul {
    display: inline-flex;
}


/* 变为内联元素 */

.container2 .inline {
    display: inline;
}
</style>
  <div class="container2">
        <h2>不同显示类型的例子2</h2>

        <p>
            I am a paragraph. Some of the
            <span>words</span> have been wrapped in a
            <span>span element</span>.
        </p>
        <ul>
            <li>Item One</li>
            <li>Item Two</li>
            <li>Item Three</li>
        </ul>
        <p class="inline">I am a paragraph. A short one.</p>
        <p class="inline">I am another paragraph. Also a short one.</p>
    </div>

在这里插入图片描述
width 和 height是设置内容的尺寸。

网页实例

box-sizing: border-box;

box-sizing属性用于更改用于计算元素的宽度和高度默认的CSS盒子模型,可以使用此属性来模拟不正确支持CSS盒子模型规范的游览器行为。

前提: 每个HTML元素都是一个盒子

未使用box-sizing: border-box:
width 和 height 是指内容的尺寸

使用box-sizing: border-box后:
width 和 height 是指 内容+内边距+边框 的尺寸

此时:

<style>
.container3 .box {
    border: 5px solid rebeccapurple;
    background-color: lightgray;
    padding: 40px;
    margin: 40px;
    width: 300px;
    height: 150px;
}

.container3 .alternate {
    box-sizing: border-box;
}
</style>
    <div class="container3">
        <h2>不同显示类型的例子3</h2>
        <div class="box">I use the standard box model.</div>
        <div class="box alternate">I use the alternate box model.</div>
    </div>

在这里插入图片描述

改成:

<style>
.container3 .alternate {
    box-sizing: border-box;
    width: 390px;
    height: 240px;
}
</style>

将宽高重新设定
由于之前的内边距和边框分别是40px 5px
于是,将宽高都加上(40+5)* 2就可以了。
在这里插入图片描述

外边距 margin

用百分数作为内外边距的值时,都是根据元素水平宽度的百分比计算的。

<style>
    margin: -40px 30px 40px 4em;

    /* margin: -40px 30px 40px 4em; */
    margin-top: -40px;
    margin-right: 30px;
    margin-bottom: 40px;
    margin-left: 4em;
</style>
    <div class="container4">
        <h2>不同显示类型的例子4</h2>
        <div class="box">Change my margin.</div>
    </div>

外边距为负会导致盒元素向负的方向偏移。

网页实例

外边距折叠?

如果你有两个外边距相接的元素,这些外边距将合并为一个外边距,即最大的单个外边距的大小。

两个盒子的外边距在竖直方向会进行计算。

<style>
.container5 .box1 {
    border: 1px solid black;
}

.container5 .one {
    margin-bottom: 50px;
}

.container5 .two {
    margin-top: -30px;
}
</style>
    <div class="container5">
        <h2>不同显示类型的例子5</h2>
        <div class="box1">
            <p class="one">I am paragraph one.</p>
            <p class="two">I am paragraph two.</p>
        </div>
    </div>

在这里插入图片描述
在这里插入图片描述
都正,不是相加,而是取最大值。


<style>
.container5 .two {
    margin-top: -30px;
}
</style>

在这里插入图片描述
在这里插入图片描述
一正一负,绝对值相减就是结果。

边框 border

在这里插入图片描述

网页实例

盒子模型和内联盒子

内联块(display: inline-block)

添加display: inline-block后,它是通过内边距推开其他元素。

<style>
/* container6
-------------------------------------------------- */

.container6 p span {
    margin: 20px;
    padding: 20px;
    width: 80px;
    height: 50px;
    background-color: lightblue;
    border: 2px solid blue;
}
</style>
    <div class="container6">
        <h2>不同显示类型的例子6</h2>
        <p>
            I am a paragraph and this is a <span>span</span> inside that paragraph. A span is an inline element and so does not respect width and height.
        </p>
    </div>

在这里插入图片描述
span内联盒子的外边距、内边距和边框是生效,但改变不了块内容与它的关系。

<style>
/* container6
-------------------------------------------------- */

.container6 p span {
    margin: 20px;
    padding: 20px;
    width: 80px;
    height: 50px;
    background-color: lightblue;
    border: 2px solid blue;
	display: inline-block;
}
</style>

在这里插入图片描述
添加display: inline-block后,它是通过内边距推开其他元素。

导航栏用 (display: inline-block)

<style>
/* .container7
-------------------------------------------------- */

/* 设置导航的背景 字体颜色 去掉链接下划线 设置链接内边距*/
.container7 nav .links-list a {
    background-color: rgb(179, 57, 81);
    color: #fff;
    text-decoration: none;
    padding: 1em 2em;
}

/* 去掉ul的默认样式(前面的黑点) */
.container7 ul {
    list-style: none;
}
/* 每个li都会通过内边距推开其他元素 */
.container7 ul li {
    display: inline-block;
}

/* 鼠标在链接上时的样式 */
.container7 nav .links-list a:hover {
    background-color: rgb(66, 28, 40);
    color: #fff;
}
</style>
    <div class="container7">
        <h2>不同显示类型的例子7</h2>
        <nav>
            <ul class="links-list">
                <li><a href="">Link one</a></li>
                <li><a href="">Link two</a></li>
                <li><a href="">Link three</a></li>
            </ul>
        </nav>
    </div>

在这里插入图片描述
网页实例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端开发过程中,可以通过CSS3来设置盒子模型。盒子模型是CSS中布局的基础,可以控制元素的尺寸、边距、填充和边框。 首先,可以使用CSS的`width`和`height`属性来设置盒子的宽度和高度。通过指定一个固定的像素值、百分比或者其他单位,可以精确地定义盒子的尺寸。 其次,可以使用`margin`属性来设置盒子的外边距。外边距可以控制盒子与周围元素之间的间距。可以分别设置上、右、下、左四个方向的外边距,也可以直接设置一个值来统一设置四个方向的外边距。 接着,`padding`属性可以用来设置盒子的内边距。内边距指的是盒子内容与盒子边框之间的距离。同样,可以分别设置四个方向的内边距,或者使用一个值来统一设置。 还可以使用`border`属性来设置盒子的边框。可以指定边框的宽度、样式和颜色。边框样式可以是实线、虚线、点线等,颜色可以是具体的颜色值或者预定义的颜色关键字。 除此之外,CSS3还引入了更多的盒子模型属性,比如`box-shadow`可以设置盒子的阴影效果,`border-radius`可以设置盒子的圆角,`background`可以设置盒子的背景样式等。 总结来说,CSS3盒子模型的设置包括宽度和高度的调整、外边距和内边距的控制、边框样式的定义以及一些附加效果的设置。这些属性的灵活使用可以让前端开发者更好地控制和布局网页中的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值