css之盒子模型

cs盒子模型在布局中起到了相当重要的作用。不仅能过灵活的布置界面,而且相当方便。

在了解盒子模型之前首先了解一下什么是行级元素以及块级元素。

常用行级元素:a,input,span,label,img,textarea等等这些

常用块级元素:div,form,h1,h2...,ul,li,table,tbody等等

行级元素与块级元素的区别:

块级元素默认占一行,可以通过css来设置宽和高。

行级元素不会占一行,即使通过css来设置宽和高也不会起作用。

通过div和span两个元素来举例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<style>
    div{
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
    span{
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
</style>
<body>
    <div>
        div元素
    </div>
    <div>
        div元素
    </div>
    <span>
        span元素
    </span>
    <span>
        span元素
    </span>
</body>
</html>

效果如下:

div元素单独占一行,css宽高对他有作用,而span不单独占一行css宽高没有用。

造成这样的根本原因其实就是因为他们的盒模型不同,行级元素默认盒模型为inline,块级元素默认盒模型为block。

尝试改变他的display,看看效果:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<style>
    div{
        display: inline;
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
    span{
        display: block;
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
</style>
<body>
    <div>
        div元素
    </div>
    <div>
        div元素
    </div>
    <span>
        span元素
    </span>
    <span>
        span元素
    </span>
</body>
</html>

效果:

可以看到通过修改他的盒模型就可以让他变成与之前相反的结果。

通过上面的两个例子可以看出,模型设置主要是display这个属性,每一个元素都以一个默认的display属性,但是我们也可以去修改他的display属性达到我们想要的效果。

除了inline和block两个模型外,还有inline-block,inline-table,flex等这些模型。

inline-block模型:

这种模型是inline和block的综合体,他不会占用一行,但是可以通过css来修改宽和高。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<style>
    div{
        display: inline-block;
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
    span{
        display: inline-block;
        width: 200px;
        height: 200px;
        border: 1px solid black;
    }
</style>
<body>
    <div>
        div元素
    </div>
    <div>
        div元素
    </div>
    <span>
        span元素
    </span>
    <span>
        span元素
    </span>
</body>
</html>

效果:

可以看到修改盒模型为inline-block之后,所有元素都在一行(没有超过父级宽度限制),同样支持css设置宽和高。但是也存在几个问题:

1.各个元素之间存在空格:这是因为在html中每个元素之间都有一个空格,可以通过去掉元素之间的空格或者时设置字体为0来去掉空格。

2:如果多个元素的高度不同,那么会默认底部对齐,可以通过vertiacl-align来设置top或者bottom对齐。

 

inline-table模型

table是块级元素,他是独占一行的,但是很多情况下我们需要其他元素和他共占一行,所以通过inline-table来实现。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<style>
    table{
        border: 1px solid black;
        display: inline-table;
    }
    td{
        border: 1px solid black;
    }
</style>
<body>
    我想和你一行
    <table>
        <tr>
            <td>嘻嘻</td>
            <td>嘿嘿</td>
        </tr>
        <tr>
            <td>哈哈</td>
            <td>呵呵</td>
        </tr>
    </table>
对的
</body>
</html>

看下效果:

flex模型

将display设置为flex就是为弹性盒子模型,通过该属性可以更好的实现多栏布局。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<style>
   #container{
       display: flex;
       width: 960px;
       text-align: left;
       flex-direction: row;
   }
    #container>div{
        border: 1px solid #aaf;
        box-sizing: border-box;
        padding: 5px;
    }
</style>
<body>
<div id="container">
    <div style="width: 220px">hahahhahahaha</div>
    <div style="width:500px;">heiheiheieheiheieh</div>
    <div style="width: 240px">xixixixixixixixixi</div>
</div>
</body>
</html>

效果:

那么既然称为弹性布局那他一定是很灵活的,可以通过修改他的flex-direction来设置横着排还是竖着排。以及row-reverse和column-reverse实现横向或纵向的反向。

flex还有其他一些属性来帮助更好的布局,比如通过flex-wrap可以设置在元素宽度之和大于屏幕宽度时是否换行。

还有通过order来设置排列顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值