博客列表 >CSS基础之盒模型-PHP培训九期线上班

CSS基础之盒模型-PHP培训九期线上班

丝丝心动的博客
丝丝心动的博客原创
2019年11月03日 14:14:54541浏览

    

       页面中, 由块级框和行内框围起来封闭区域,在用户看来就像是一个个盒子,所以页面中的元素我们也可以用一个个不同类型的盒子来表示。对应不同的框类型, 盒子也可以行为块级盒子和行内盒子,研究盒模型主要是用来布局, 而行内盒子无法设置大小,所以只研究块级盒子。

       盒模型的基本属性:width: 宽度   height: 高度   background: 背景    padding: 内边距    border: 边框    margin: 外边距  ,这些属性中部分作用在盒子的不同位置又有不同的效果,下面用一张图来直观的描述:

1572604947897290.jpeg

            由上图可知,padding,border,margin具有方向性,方向遵循: 上、右、下、 左的顺序,即顺时针旋转,每个方向上有对应的盒模型属性,以padding举例:  padding-top: 上内边距   padding-right: 右内边距   padding-bottom: 下内边距    padding-left: 左内边距

            注意:padding和margin,即内外边距默认是透明的,所以只需要设置宽度即可,而border即边框不透明,除可以设置宽度外还可以设置样式与前景色,即每个方向上都可以设置width,style,color三个特征

           下面介绍盒子重要的几个点:

            1、盒子 ' box-sizing '  解决了什么问题, 不用它应该如何处理 ?

             box-sizing: border-box;设置盒子宽高定位到边框级别,即大小包括了边框与内边距,可以清除内边距(padding)和 边框(border)对盒子大小的影响。不用它 可以设置 盒子的宽高 = 原盒子宽高 - padding宽高 - border宽高,来保持盒子宽高和原来一样大小。更形象直观感知如下图:

1572606595601523.jpeg

            2、 盒子外边距之的合并以及 嵌套盒子之间内边距与外边距的表现

               a  同级盒子之间:添加外边距后出现了外边距的合并, 也叫外边距的塌陷 ,二个盒子之间的间距, 最终由以较大值确定

               b  嵌套盒子之间:子盒子外边距会传递到父盒子,通过给父盒子添加内边距或边框来解决,外边距在水平方向取值auto时, 可以实现子盒子的水平居中显示效果

             具体案例如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>外边距对盒子位置的影响</title>
    <link rel="stylesheet" href="static/css/style2.css">
</head>
<body>
<!--页面中多个个盒子之间的关系有同级和嵌套二种-->
<!--同级关系: 外边距合并-->
<div class="box1"></div>
<div class="box2"></div>
<hr>
<!--嵌套关系: -->
<!--1. 外边距由内向外传递-->
<div class="box3">
    <div class="box4"></div>
</div>
<hr>
<!--2. 子盒子在父盒子中的居中显示-->
<div class="box5">
    <div class="box6"></div>
</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

/*外边距对盒子位置的影响*/

/*清除内边距与边框对盒大小的影响*/
div {
    box-sizing: border-box;
}
.box1 {
    width: 100px;
    height: 100px;
    background-color: lightblue;
}
.box2 {
    width: 100px;
    height: 100px;
    background-color: lightgreen;
}
/*上面盒子下外边距20px*/
.box1 {
    margin-bottom: 20px;
}
/*下面盒子上外边距30px*/
.box2 {
    margin-top: 30px;
}
.box3 {
    width: 200px;
    height: 200px;
    background-color: lightblue;
}
.box4 {
    width: 150px;
    height: 150px;
    background-color: lightgreen;
}
/*子盒子设置外边距*/
.box4 {
    margin-top: 30px;
}
/*其实,给子盒子添加外边距,对于父盒子来说就是添加内边距*/
/*解决方案1: 父盒子添加内边距*/
.box3 {
    /*padding-top: 30px;*/
}
/*边框具有封闭盒子空间, 拦截内边距padding扩展的作用*/
/*解决方案2: 父盒子添加边框*/
.box3 {
    border: 1px solid rgba(0,0,0,0);
}
.box5 {
    border: 2px solid gray;
}
.box6 {
    width: 300px;
    height: 150px;
    background-color: lightgreen;
}
/*左右挤压的结果, 就会使子盒子水平居中显示在父盒子中, 可以简写为:*/
.box6 {
    margin: auto;
}
/*第一个参数是设置上下margin*/
.box6 {
    margin: 10px auto;
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

运行效果如下:

盒子.png

手写代码:

1572761581441220.jpg

1572761618267481.jpg

          3、盒子的背景颜色的线性渐变和背景图片大小与位置关系

           a .背景色的控制,主要有裁切和渐变二类

               background-color: 设置背景色,支持单词,16进制,rgb()/rgba()

               background-clip: 设置背景色应用范围(裁切),支持内容,内边距和边框三级

               background: linear-gradient(): 线性渐变

               background: radial-gradient(): 径向渐变

           b .背景图片设置涉及图片的位置,大小, 是否重复等

               background-image: url(): 设置背景图片

               background-position: 设置背景图片显示位置

               background-size: 设置背景图片显示大小

               background-repeat: 设置背景图片是否重复

               background-attachment: 设置背景图片是否随滚动条滚动

具体案例如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>背景控制</title>
    <link rel="stylesheet" href="static/css/style3.css">
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

.box1,.box2 {
    width: 450px;
    height: 500px;
    box-sizing: border-box;
    border: 2px solid blueviolet;
    box-shadow: 5px 5px 2px #888;
    float: left;
}
.box2{
    margin-left: 30px;
}

/*1. 背景色*/
.box1 {
    background-color: lightblue;
}
/*通过边框间隙,可以看到背景色会自动延伸到内边距, 边框*/

/*背景裁切: 设置背景的覆盖范围, 也适用于背景图片*/
.box1 {
    /*内容区*/
    background-clip: content-box;
}

/*背景色渐变*/
/*线性渐变*/
.box1 {
    /*可连续设置多种颜色的渐变效果*/
    background: linear-gradient(red, green, blue, white);
}

/*径向渐变*/
.box1 {
    /*向左上径向渐变, ,模拟日照效果, 注意方向词是"at", 不是"to"*/
    background: radial-gradient(at left top, white, coral, yellow);
}

/*2. 背景图片 */

.box2 {
    /*设置背景图片*/
    background-image: url("../images/gril.jpg");

    /*设置背景重复: repeat, no-repeat, repeat-x, repeat-y*/
    background-repeat: no-repeat;

    /*设置背景图片的位置: 水平, 垂直*/
    /*支持关键字设置*/
    /*background-position: center center;*/
    /*支持数值或百分比*/
    background-position: 50% 50%;

    /*设置背景图片的大小*/
    /*图片拉伸等比例填充,完全覆盖盒子,比例不同可能会有部分图片内容被隐藏*/
    background-size: cover;
    /*图片完全填充, 比例不同,盒子可能会出现空白区域*/
    /*background-size: contain;*/
}

/*以上设置可以使用组合设置来简化:*/
/*.box2 {*/
/*    background: lightblue url("../images/gril.jpg") no-repeat 50% 50%;*/
/*    background-size: cover;*/
/*}*/

运行实例 »

点击 "运行实例" 按钮查看在线实例

运行效果展示:

1572621569352295.jpg

手写代码:

1572761653209094.jpg



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议