前端入门知识——css(4)

CSS盒子模型

CSS盒子模型介绍

盒子模型解释 
元素在页面中显示成一个方块,类似一个盒子,CSS盒子模型就是使用现实中盒子来做比喻,帮助我们设置元素对应的样式。

盒子模型示意图如下:

前端入门知识——css(4)

把元素叫做盒子,设置对应的样式分别为:盒子的边框(border)、盒子内的内容和边框之间的间距(padding)、盒子与盒子之间的间距(margin)。

设置边框

设置一边的边框,比如顶部边框,可以按如下设置:

border-top-color:red;   /* 设置顶部边框颜色为红色 */ 
border-top-width:10px;   /* 设置顶部边框粗细为10px */ 
border-top-style:solid;   /* 设置顶部边框的线性为实线,常用的有:solid(实线) dashed(虚线) dotted(点线); */

上面三句可以简写成一句:

border-top:10px solid red; /* 顺序随意 */

设置其它三个边的方法和上面一样,把上面的’top’换成’left’就是设置左边,换成’right’就是设置右边,换成’bottom’就是设置底边。
四个边如果设置一样,可以将四个边的设置合并成一句:

border:10px solid red;

设置内间距padding
设置盒子四边的内间距,可设置如下:

padding-top:20px; /* 设置顶部内间距20px */ 
padding-left:30px; /* 设置左边内间距30px */ 
padding-right:40px; /* 设置右边内间距40px */ 
padding-bottom:50px; /* 设置底部内间距50px */

上面的设置可以简写如下:

padding:20px 40px 50px 30px; /* 四个值按照顺时针方向,分别设置的是 上 右 下 左 四个方向(即顺时针)的内边距值。 */
padding后面还可以跟3个值,2个值和1个值,它们分别设置的项目如下:

padding:20px 40px 50px; /* 设置顶部内边距为20px,左右内边距为40px,底部内边距为50px */ 
padding:20px 40px; /* 设置上下内边距为20px,左右内边距为40px*/ 
padding:20px; /* 设置四边内边距为20px */

注意:当先设置好了盒子的宽高时,再添加padding,会给盒子增加宽高!

设置外间距margin
外边距的设置方法和padding的设置方法相同,将上面设置项中的’padding’换成’margin’就是外边距设置方法。

CSS盒子模型示例

盒子模型真实尺寸计算

盒子模型的尺寸
按照下面代码制作页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盒子模型演练示例</title>
    <style type="text/css">
        .box01{width:50px;height:50px;background-color:gold;}
        .box02{width:50px;height:50px;background-color:gold;border:50px
         solid #000}
        .box03{width:50px;height:50px;background-color:gold;border:50px
         solid #000;padding: 50px;}
    </style>
</head>
<body>
    <div class="box01">1</div>
    <br />
    <div class="box02">2</div>
    <br />
    <div class="box03">3</div>
</body>
</html>

通过上面的页面得出结论:盒子的width和height设置的是盒子内容的宽和高,不是盒子本身的宽和高。

盒子的真实尺寸计算公式如下:

盒子宽度 = width + padding左右 + border左右 盒子高度 = height + padding上下 + border上下

margin相关技巧
设置元素水平居中: margin:x auto;
margin负值让元素位移及边框合并。
01:将一个盒子居中;
auto只能用于宽度方向,不能用于高度方向;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让盒子居中</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d1 {
            width: 200px;
            height: 200px;
            background-color: aqua;
            /*margin: 50px 200px 100px 200px;  !* 不能让盒子居中 *!*/
            margin: 50px auto 100px;
        }
    </style>
</head>
<body>
<div class="d1"></div>
</body>
</html>

将一个盒子居中

02:margin使用技巧之使用负值去除边框重叠

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用负值去除边框重叠</title>
    <style>
        * {margin: 0;padding: 0;}
        .d1 {
            width: 202px;height: 156px;margin: 50px auto 0;
        }
        .d1 div {
            width: 200px;
            height: 30px;
            border: 1px solid black;
            background: yellow;
            margin-top: -1px;  /* 使用这一句的效果相当于下面的两句 */
            /*border-bottom: 0;*/
        }
        .d1 .last {border-bottom: 1px solid black;}
    </style>
</head>
<body>
<div class="d1">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div class="last"></div>
</div>

</body>
</html>

margin使用技巧之使用负值去除边框重叠

去除文字默认的行高,可以将行高设置成和字体大小一致即可;

外边距合并问题
外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
解决方法如下:

使用这种特性,即上下两边都设置margin,但其中一边取原本希望的两边之和;
只设置一边的外边距,一般设置margin-top;
将元素浮动或者定位。
只是垂直方向的合并,左右不会合并;
外边距合并时W3C故意为之,而元素溢出则是W3C的一个bug。

解决外边距合并示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>外边距合并</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d1 {
            width: 502px;
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .d1 div {
            /*margin-left: 20px;*/
            /*margin-right: 20px;*/
            /*margin-top: 20px;*/
            /*margin-bottom: 20px;*/
            margin: 20px;
        }
    </style>
</head>
<body>
<div class="d1">
    <div>外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。
        合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
    </div>
    <div>外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。
        合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
    </div>
    <div>外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。
        合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
    </div>
    <div>外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。
        合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
    </div>
</div>

</body>
</html>

解决外边距合并示例

margin-top 塌陷问题
margin-top 塌陷
在两个盒子嵌套时候,内部的盒子设置的margin-top会加到外边的盒子上,导致内部的盒子margin-top设置失败。
解决方法如下:

外部盒子设置一个边框;
外部盒子设置 overflow:hidden;(存在一定问题)
使用伪元素类:.clearfix:before{content: ‘’;display:table;}。

注意:margin-top塌陷只会出现在垂直方向,不会出现在水平方向。

使用margin-top出现问题的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin-top塌陷</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d_body {
            width: 300px;
            /*height: 200px;*/
            height: 300px;
            background: yellow;
            /*padding-top: 100px;*/
        }
        .d_con {
            width: 200px;
            height: 100px;
            background: gray;
            margin-top: 100px;
        }
    </style>
</head>
<body>
<div class="d_body">
    <div class="d_con"></div>
</div>
</body>
</html>

margin-top问题

解决margin-top的三种方法示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin-top塌陷</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d_body {
            width: 300px;
            /*height: 200px;*/
            height: 300px;
            background: yellow;
            /*padding-top: 100px;*/
            /*border: 1px solid #000;  !* 第一种解决margin-top的方法:给外部盒子设置一个边框 *!*/
            /*overflow: hidden;   !/*第二种解决margin-top的方法:给外部盒子设置 overflow:hidden*!/  */
        }
        .clearfix {content: "";display: table;}  /* 第三种解决margin-top的方法:使用伪元素类 */
        .d_con {
            width: 200px;
            height: 100px;
            background: gray;
        }
    </style>
</head>
<body>
<div class="d_body clearfix">
    <div class="d_con"></div>
</div>
</body>
</html>

解决margin-top的三种方法

元素溢出
css元素溢出
当子元素的尺寸超过父元素的尺寸时,就会出现元素溢出,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。

overflow的设置项:

visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 仅显示父元素尺寸内内容,超出的内容不可见;此属性还有清除浮动、清除margin-top塌陷的功能。
scroll 不管元素是否溢出,都以滚动条的形式显示。
auto 如果元素溢出,则以滚动条的形式显示。
inherit 从父元素继承 overflow 属性的值,很少用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素溢出</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d1 {
            width: 200px;
            height: 200px;
            /*margin: 50px auto 0;*/
            background-color: aqua;
            border: 1px solid black;
            /*overflow: hidden;*/
            overflow: auto;
        }
    </style>
</head>
<body>

<div class="d1">
    5.1图片
    1.gif图片:最大颜色数256,保存时采用无损压缩
    2.JPEG图片:可以包含1670万种颜色,保存时采用有损压缩,压缩率小的质量更高。
    为了避免图片因压缩率过高而导致的像素化,一般使用PS或Adobe
    Fireworks优化。 另一个优化的办法就是使用图片的缩小版本,成为缩略图,一般将缩略图配置成图片链接,点击可显示更大尺寸的图片
    3.PNG图片:“可移植网络图形”,结合了上面两者的优势,且支持无损压缩。
    4.WebP图片格式
</div>
</body>
</html>

元素溢出auto参数使用示例

块元素-内联元素-内联块元素
块元素、内联元素、内联块元素
元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。

块元素
块元素,也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1~h6、dl、dt、dd 等等都是块元素。
它在布局中的行为:

支持全部的样式
如果没有设置宽度,默认的宽度为父级宽度100%
盒子占据一行,即使设置了宽度;(这句话的理解是,即使设置了宽高,也独占一行,不会让其他的元素浮动过来共享一行)
内联元素
内联元素,也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等等都是内联元素。
它们在布局中的行为:

支持部分样式(不支持宽、高、margin上下、padding上下)
宽高由内容决定
盒子并在一行
代码换行,盒子之间会产生间距
子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式,用line-height属性值设置垂直对齐方式
解决内联元素间隙的方法

去掉内联元素之间的换行
将内联元素的父级设置font-size为0,内联元素自身再设置font-size
内联块元素/行内元素
内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类别的,img和input元素的行为类似这种元素,但是也归类于内联元素,
我们可以用display属性将块元素或者内联元素转化成这种元素。
它们在布局中表现的行为:

支持全部样式
如果没有设置宽高,宽高由内容决定
盒子并在一行
代码换行,盒子会产生间距
子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式,用line-height属性值设置子元素垂直对齐方式

这三种元素,可以通过display属性来相互转化,不过实际开发中,块元素用得比较多,所以我们经常把内联元素转化为块元素,
少量转化为内联块,而要使用内联元素时,直接使用内联元素,而不用块元素转化了。

display属性
display属性是用来设置元素的类型及隐藏的,常用的属性有:

none 元素隐藏且不占位置
block 元素以块元素显示
inline 元素以内联元素显示
inline-block 元素以内联块元素显示

display=none的应用
通过display=inline-block将div盒子放在一行;
通过display=none实现鼠标移动到文字上显示图形,移开不显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>经过文字显示界面</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        .d1_1 {
            width: 200px;
            height: 200px;
            background-color: yellow;
            display: none;
        }
        .d1:hover .d1_1 {
            display: block;
        }
    </style>
</head>
<body>
<div class="d1">
    <h2>数码产品</h2>
    <div class="d1_1"></div>
</div>
</body>
</html>

display=none实现鼠标移动到文字上显示图形,移开不显示

最后,给大家推荐一个前端学习进阶内推交流圈子前端资料分享),不管你在地球哪个方位,
不管你参加工作几年都欢迎你的入驻!(会定期免费提供一些收藏的免费学习书籍资料以及整理好的面试题和答案文档!)

如果您对这个文章有任何异议,那么请在文章评论处写上你的评论。

如果您觉得这个文章有意思,那么请分享并转发,或者也可以关注一下表示您对我们文章的认可与鼓励。

愿大家都能在编程这条路,越走越远。