侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

CSS使用盒模型实例讲解

前端  /  管理员 发布于 7年前   175

盒子是CSS中的基础概念,我们需要使用它来配置元素的外观以及文档的整体布局。

1. 为元素应用内边距

应用内边距会在元素内容和边距之间添加空白。我们可以为内容盒的每个边界单独设置内边距,或者使用 padding 简写属性在一条声明中设置所有的值。

如果使用百分数值指定内边距,百分数总是根包含块的宽度相关,高度不考虑在内。下面代码展示了如何为元素应用内边距。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         p {   
  8.             border:10px double black;   
  9.             background-color: lightgray;   
  10.             background-clip: content-box;   
  11.             width: 380px;   
  12.             padding-top: 0.5em;   
  13.             padding-bottom: 0.3em;   
  14.             padding-left: 0.8em;   
  15.             padding-right: 0.6em;   
  16.         }   
  17.     </style>  
  18. </head>  
  19. <body>  
  20. <div>  
  21.     <p>  
  22.         15岁的时候再得到那个5岁的时候热爱的布娃娃,65岁的时候终于有钱买25岁的时候热爱的那条裙子,又有什么意义。   
  23.         什么都可以从头再来,只有青春不能。   
  24.         那么多事情,跟青春绑在一起就是美好,离开青春,就是傻冒。   
  25.     </p>  
  26. </div>  
  27. </body>  
  28. </html>  

在代码中,为盒子的每条边应用了不同的内边距,从下面的效果图可以看出效果。此外,设置了 background-clip 属性,因此内边距区域不会显示背景颜色,这样可以突出内边距的效果。

也可以使用 padding 简写属性在一条声明中为四条边设置内边距。可以为这个属性指定1~4 个值。 如果指定4个值,那么它们分别代表顶边、右边、底边和左边的内边距。如果省略一个值,则最佳搭配方案如下:省略左边的值,默认使用右边的值;省略底边的值,默认使用顶边的值。如果只给一个值,则四条边的内边距都是这个值。

下面代码清单展示了如何使用 padding 简写属性。这个示例中还添加了圆角边框,展示了如何使用paddding以确保边框不会在元素内容之上。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         p {   
  8.             border:10px solid black;   
  9.             background: lightgray;   
  10.             width: 380px;   
  11.             border-radius:1em 4em 1em 4em;   
  12.             padding: 5px 25px 5px 40px;   
  13.         }   
  14.     </style>  
  15. </head>  
  16. <body>  
  17. <div>  
  18.     <p>  
  19.         15岁的时候再得到那个5岁的时候热爱的布娃娃,65岁的时候终于有钱买25岁的时候热爱的那条裙子,又有什么意义。   
  20.         什么都可以从头再来,只有青春不能。   
  21.         那么多事情,跟青春绑在一起就是美好,离开青春,就是傻冒。   
  22.     </p>  
  23. </div>  
  24. </body>  
  25. </html>  

效果如下图所示,显示了浏览器如何显示代码中指定的圆角边框和内边距。

如果不设置内边距,边框就会绘制在文本上。设置内边距就能确保内容和边框之间留出足够的空间,不会出现这种情况。

 

2. 为元素应用外边距

外边距是元素边框和页面上围绕在它周围的所有东西之间的空白区域。围绕在它周围的东西包括其他元素和它的父元素。

跟内边距属性相似,即使是为顶边和底边应用内边距,百分数值是和包含块的宽度相关的。下面代码清单展示了如何为元素添加外边距:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         img{   
  8.             border: 4px solid black;   
  9.             background: lightgray;   
  10.             width: 150px;   
  11.         }   
  12.         #second img { margin: 4px 20px;}   
  13.     </style>  
  14. </head>  
  15. <body>  
  16. <div>  
  17.     <div id="first">  
  18.         <img src="imgs/banana.png" alt="small banana">  
  19.         <img src="imgs/banana.png" alt="small banana">  
  20.     </div>  
  21.     <div id="second">  
  22.         <img src="imgs/banana.png" alt="small banana">  
  23.         <img src="imgs/banana.png" alt="small banana">  
  24.     </div>  
  25. </div>  
  26. </body>  
  27. </html>  

在代码中,下面的两个img元素,为其顶边和底边应用了4像素的外边距,为左边和右边应用了20像素的外边距。可以从下面的效果图中看到外边距围绕元素制造的空白区域,途中上面的两个img元素和下面的两个img元素分部显示的是设置外边距前后的img元素。

外边距有时候不显示,即使设置了某个外边距属性的值。例如,为 display 属性的值设置为 inline 的元素应用外边距的时候,顶边和底边的外边距就不会显示。

 

3. 控制元素的尺寸

浏览器会基于页面上内容的流设置元素的尺寸。有几条详细规则是浏览器在分配尺寸的时候必须遵循的。使用尺寸相关的属性可以覆盖这些行为。

前三个属性的默认值都是 auto,意思是浏览器会为我们设置好元素的宽度和高度。也可以是用长度值和百分数值显式指定尺寸。百分数值是根据包含块的宽度来计算的(处理元素的高度也是根据这个宽度来)。下面的代码清单展示了如何为元素设置尺寸。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         div { width:75%; height: 100px; border: thin solid lightseagreen;}   
  8.         img { background: lightgray; border: 4px solid blueviolet; margin: 2px; height: 50%;}   
  9.         #first { box-sizing: border-box; width: 50%;}   
  10.         #second { box-sizing: content-box;}   
  11.     </style>  
  12. </head>  
  13. <body>  
  14.     <div>  
  15.         <img id="first" src="imgs/banana.png" alt="small banana">  
  16.         <img id="second" src="imgs/banana.png" alt="small banana">  
  17.     </div>  
  18. </body>  
  19. </html>  

上述示例代码中有三个关键元素,一个div元素包含了两个img元素。显示效果如下,展示了浏览器如何显示这些元素。

div元素是body元素的子元素。当将div元素的宽度表示为75%的时候,意思是告诉浏览器将div的宽度设置为包含块(此处是body内容盒)宽度的75%,而不论其具体值是多少。如果用户调整了浏览器窗口,body元素也会相应被调整,以确保div元素的宽度总是body内容盒宽度的75%。

 

3.1 设置一定尺寸的盒子

前面示例中两个img元素设置了相同的高度值(50%),但两个图片的高度在屏幕上看起来不一样。这是因为使用box-sizing属性改变了其中一个元素应用尺寸属性的区域。

默认情况下,宽度和高度是需要计算的,之后才能应用到元素的内容盒。这里说的是如果设置了元素的高度属性是100px,那么屏幕上的真实高度就是100px,这也算上了顶边和底边的内边距、边框和外边距的值。box-sizing属性允许指定尺寸样式应用到元素盒子的具体区域,也就是不需要自己计算某些值。

 

3.2 设置最小和最大尺寸

可以使用最小和最大相关属性为浏览器调整元素尺寸设置一定的限制。这让浏览器对于如何应用尺寸调整属性有了一定的自主权。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         img {   
  8.             background: lightgray;   
  9.             border: 4px solid blueviolet;   
  10.             margin: 2px;   
  11.             box-sizing: border-box;   
  12.             min-width: 100px;   
  13.             width: 50%;   
  14.             max-width: 200px;   
  15.         }   
  16.     </style>  
  17. </head>  
  18. <body>  
  19.     <div>  
  20.         <img id="first" src="imgs/banana.png" alt="small banana">  
  21.     </div>  
  22. </body>  
  23. </html>  

在代码中,为一个img元素应用了mix-width 和 max-width属性,并将其出事宽度设置为包含块的50%。这样浏览器就有了一定灵活性来调整图像尺寸,使其在代码中定义的最大尺寸和最小尺寸范围内保持50%的关系。浏览器会利用这种灵活性保留图像的高宽比,如下面的显示效果所示:

 PS:浏览器对box-sizing属性的支持情况各不相同。

 

4. 处理溢出内容

如果尝试改变元素的尺寸,很快就会到达某一个点:内容太大,已经无法完全显示在元素的内容盒中。这时的默认处理方式是内容溢出,并继续显示。下面的代码清单创建了一个固定尺寸的元素,由于尺寸太小,无法显示其中的内容。

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         p {width: 200px;  height: 100px; border:medium double black;}   
  8.     </style>  
  9. </head>  
  10. <body>  
  11. <p>  
  12.     你的特别不是因为你在创业,不是因为你进了牛企,不是因为你的牛offer,而是因为你就是你,坚信自己的特别,坚信自己的内心,勇敢做自己。   
  13.     IT DOESN'T MATTER WHERE YOU ARE, IT MATTERS WHO YOU ARE.   
  14. </p>  
  15. </body>  
  16. </html>  

代码中为p元素的width 和 height 属性指定了绝对值,最终显示在浏览器中的显示效果如下图所示:

可以使用 overflow 属性改变这种行为,下表列出了相关的 overflow 属性。

 

overflow-x 和 overflow-y 属性分部设置水平方向和垂直方向的溢出方式,overflow 简写属性可在一条声明中声明两个方向的溢出方式。下表展示了这三个属性可能的取值。

 

下面代码展示了溢出属性的用法:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Example</title>  
  6.     <style type="text/css">  
  7.         p {width: 200px;  height: 100px; border:medium double black;}   
  8.         p:first-child { overflow: hidden;}   
  9.         p:last-child { overflow: scroll;}   
  10.     </style>  
  11. </.social-share p{font-size:8px;}

  • 上一条:
    全面了解css 属性选择器
    下一条:
    浅谈CSS中display/float/position属性值的相互影响
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客