CSS3—盒子模型 讲解

一、盒子模型

盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版。W3C组织建议把网页上元素看成是一个个盒子。盒模型主要定义四个区域:内容(content)、内边距(padding)、边框(border)、外边距(margin)。转换到我们日常生活中,可以拿红酒来对比,红酒=内容,内边距=盒子中的填充物,边框=盒子的厚度,外边距=两个红酒之间的距离。
通常我们设置的宽和高是指“红酒”content的宽高,一整个盒子还包含了“填充物”、盒子、盒子与盒子的距离

二、W3C盒模型

盒模型由内容(content)、填充(padding)、边框(border)、边界(margin)组成

在这里插入图片描述
在这里插入图片描述

border边框

border属性设置一个元素的边框,它有三个要素:宽、样式、颜色,统称“边框三要素”。

三要素书写的时候一般如下顺序

border:宽度 样式 颜色

border: 1px solid red;

不过不按此顺序来写依然能正常显示。

div{ border: red solid 2px; }

border-style设置边框的样式,有五种常用样式可选

点状dotted
实线solid
双线double ( 需要最起码设置为3像素,不然显示不下)
虚线dashed
无边框none
border的三要素可以统一写在”border”属性中,也可以单独设置。

统一的写法:border: 1px solid red;
单独设置的写法:

border-width:; 
border-style:;
border-color:;

要注意,在style属性为空的情况下,整个边框是不会出现的。这不论是统一写在border或是单独设置都是这样的。

不写width会有默认3像素的值。
不写颜色会默认为黑色。
外边距
围绕在元素边框周围的空白区域
会在元素外创建额外的空白区域
外边距是透明的
语法:margin:value;
单边设置

margin-top/right/bottom/left: value;

value可取值为像素,%,auto,负值
外边距简写

margin:value(四个方向相同) ;
margin: value(上下) value(左右);
margin: value() value(左右) value();
margin: value() value() value() value();

外边距合并

在这里插入图片描述

当两个垂直外边距相遇时,他们将形成一个外边距,成为外边距合并
合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者
margin设置元素外边距的宽度,它有这么几个特点

  1. 块级元素的垂直相邻外边距会合并
  2. 行内元素实际上不占上下外边距。行内元素的的左右外边距不合并
  3. 浮动元素的外边距也不会合并
  4. 允许指定负的外边距值,不过使用时要小心
    内边距
    内容区域和边框之间的空间
    会扩大元素边框所占用的区域
    语法:padding:value;

单边设置

padding-top/right/bottom/left:value;

value可取值为像素,百分比,但不能为负数

内边距的简写

  padding:value(四个方向相同) ;
  padding: value(上下) value(左右);
  padding: value() value(左右) value();
  padding: value() value() value() value();

三、怪异盒模型

盒子模型分两种,一种是符合W3C规范的标准例子模型,另一种是IE的盒子模型,IE的盒子模型也被叫怪异盒子。
可以看到 IE 盒子模型也包括 margin、border、padding、content,不过,和标准 盒子模型不同的是:IE 盒子模型的宽,包含了 border 和 pading。
在这里插入图片描述

box-sizing

box-sizing属性允许你以“W3C的盒模型”或“IE盒模型”来定义元素,以适应区域。换句话说,当前元素使用哪种盒模型,可以由box-sizing属性来指定
它有两个值
content-box(标准)
padding和border不被包含在width和height内,元素的实际大小为宽高+border+padding,此为标准模式下的盒模型。

border-box(怪异)
padding和border被包含在定义的width和height中,元素实际的大小为你定义了多宽就是多宽。此属性为怪异模式下的盒模型。
怪异盒子:
组成部分: content+padding+border+margin
实际宽度:width+margin (width包含padding+border)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>怪异盒子练习</title>
    <link rel="stylesheet" href="css/reset.css"/>
    <style>
        div{
            width: 234px;
            height: 460px;
            background-color: #2e233e;
            padding: 20px 0px;
            box-sizing: border-box;
        }
        div li{
            font-size: 14px;
            height: 42px;
            line-height: 42px;
            padding-left: 30px;
        }
        a{color: white}
        li:hover{background-color: #ff6700;}

    </style>
</head>
<body>
    <div>
        <ul>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
            <li><a href="">电器商城</a></li>
        </ul>
    </div>
</body>
</html>

四、伸缩盒模型flexbox

伸缩盒模型也叫弹性盒模型,或flexBox。它决定一个盒子在其它盒子中的分布,以及如何处理可用的空间。使用该模型,可以轻松的创建“自适应”浏览器窗口的流动布局。

flexbox是一个很新的东西,在w3c希望可以使用flexbox实现一些更复杂的布局和应用。传统盒模型基于HTML文档流排列,使用弹性盒模型可以规定特定的顺序。要开启弹性盒模型,只需要设置display的属性值 flex,因为它是CSS3中为display新添加的值类型。

目的:在浏览器窗口变化时,盒子相应改变大小。
设置了弹性盒模型后,float,clear和vertical-align在flex中不起作用。
flexbox的基础知识
由于 flexbox是一个整体的模块,它们之中一些属性是在父容器上设置,而一些是在子容器上设置。
一个flexbox的基本结构:

    .box{ display: flex;}    //最外层的为父容器,定义此容器为弹性布局
    .item1{ flex-grow: 1; background:pink}       flex-grow占1比例
    .item2{ flex-grow: 2; background:orange}2比例
    .item3{ flex-grow: 3; background:red}3比例

<div class="box">
    <div class="item1">1</div>
    <div class="item2">2</div>
    <div class="item3">3</div>
</div>

1.首先规定哪个是父容器,父容器中包含多个“项目”(每个子div),项目是可以在父容器中弹性布局的。
2.其次还可以规定父容器中要怎么来显示它里面的项目,如是否换行、项目排列方向等
父容器常用属性
1.父容器中的常用属性

 display: flex;    

定义一个flex容器
新弹性盒 设置父元素是一个弹性盒,子元素会自动水平排列
2.父容器中的常用属性

 justify-content: flex-end;   

设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式

在这里插入图片描述

3.父容器常用属性
align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式
在这里插入图片描述

<div class="container">
    <div></div>
</div>

css:
   .container{
        width: 300px;
        height: 300px;
        border: 1px solid red;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .container div{
        width: 100px;
        height: 100px;
     border: 1px solid blueviolet;
     }   

在这里插入图片描述

4.子元素常用属性
*伸缩盒中的每一个元素称为一个项目。

  flex-grow: number;   

一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。

 .item1{ flex-grow: 1; background:pink}                
 .item2{ flex-grow: 1; background:orange}             
 .item3{ flex-grow: 1; background:red}    
旧的伸缩盒

伸缩盒从被提出到如今一直在修改,所以这里涉及到了新老写法

伸缩盒最老版本

display:box;  

将对象作为弹性伸缩盒显示(火狐和webkit内核都支持display:-webkit-box;或display:-moz-box;)
子元素 box-flex:;

伸缩盒过渡版本

display:flexbox;  

将对象作为弹性伸缩盒显示

伸缩盒最新版本

display:flex;  

将对象作为弹性伸缩盒显示

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>弹性盒子应用</title>
    <link rel="stylesheet" href="css/reset.css"/>
    <link rel="stylesheet" href="css/baiduStyle.css"/>
</head>
<body>
    <div  class="nav">
        <div  class="arrow"></div>
        <div class="title">
            <img src="images/百度周边_05.png" alt=""/>
            <span>发现周边服务</span>
        </div>
        <div  class="search"></div>
    </div>
    <div  class="food">
        <div >
            <img src="images/百度周边_14.png" alt=""/><br>
            <span>美食</span>
        </div> <div >
            <img src="images/百度周边_14.png" alt=""/><br>
            <span>美食</span>
        </div> <div >
            <img src="images/百度周边_14.png" alt=""/><br>
            <span>美食</span>
        </div> <div >
            <img src="images/百度周边_14.png" alt=""/><br>
            <span>美食</span>
        </div> <div >
            <img src="images/百度周边_14.png" alt=""/><br>
            <span>美食</span>
        </div>
    </div>
<div class="menu">
    <div>
        <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div>
    </div>
    <div>
        <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div> <div>
            <img src="images/百度周边_30.png" alt=""/><br/>
            <span>小吃</span>
        </div>
    </div>
</div>
</body>
</html>

五、浏览器内核以及其前缀

CSS标准中各个属性都要经历从草案到推荐的过程,css3中的属性进展都不一样,浏览器厂商在标准尚未明确情况下提前支持会有风险,浏览器厂商对新属性的支持情况也不同,所以会加厂商前缀加以区分。如果某个属性已经从草案变为了或接近推荐方案,并且厂商已经完全实现了推荐属性,那就不用加厂商前缀。如border-radius已经很成熟,不用加前缀。
在这里插入图片描述
在这里插入图片描述

根据不同的浏览器内核,css前缀会有不同。最基本的浏览器内核有如下四种,其它的内核都是基于此四种进行再研发的。

1.Gecko内核前缀为 -moz- 火狐浏览器

2.Webkit内核 前缀为 -webkit- 也叫谷歌内核,chrome浏览器最先开发使用,safari浏览器也使用
该内核。国内很多浏览器也使用了webkit内核,如360极速、世界之窗、猎豹等。

3.Trident内核 前缀为 -ms- 也称IE内核

4.Presto内核 前缀 -o- 目前只有opera采用

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>浏览器内核以及前缀</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            border: 30px solid rgba(255,255,255,.5);
            background: url("images/wangfeng.jpg");
            margin: 30px  auto;
            padding: 120px;
            font-size: 200px;
            font-weight: bolder;
            color:rgba(255,255,255,.5);
            /*背景切割*/
            -webkit-background-clip: text;
            /*
             -webkit-background-clip
                 text           从文本区域开始实现背景
                 border-box     从边框开始实现背景
                 content-box    从内容区域开始实现背景
                 padding-box    从padding区域开始实现背景
            */
        }
    </style>
</head>
<body>
    <div>王者荣耀</div>
</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>浏览器内核例子</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            background: red;
            -webkit-transition: 1s;
            -moz-transition: 1s;
            -ms-transition:1s;
            -o-transition: 1s;
            transition: 1s;
        }
        body:hover div{
            width: 400px;
        }
    </style>
</head>
<body>
    <!--
          -webkit-transition: 1s;   谷歌
            -moz-transition: 1s;    火狐
            -ms-transition:1s;      ie
            -o-transition: 1s;     opera
            transition: 1s;         w3c标准样式
    -->
    <div></div>
</body>
</html>

在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值