经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
【震惊】padding-top的百分比值参考对象竟是父级元素的宽度
来源:cnblogs  作者:胡哥有话说  时间:2020/12/21 15:07:19  对本文有异议

引言

书写页面样式与布局是前端工程师Coding 中必不可少的一项工作,在定义页面元素的样式时,padding 属性也是经常被使用到的。

padding 属性用于设置元素的内边距,其值可以是lengthinherit,当然也可以是百分比

今天为什么会聊到padding-top设置百分比时的参考对象这个话题呢,这还要从一道不那么正经的面试题说起~

一道不那么正经的css布局面试题

在对面,一本正经的面试官和蔼可亲的说道:我们来道简单的面试题,写写代码吧。你一脸微笑的说道:好哒。

题目须知:

页面中有一个元素A,请实现以下需求:

  1. 元素A在页面内水平、垂直居中;
  2. 元素A距离页面左右的间距为10px,元素A的宽度随页面宽度变大而变大;
  3. 设置元素A的高度始终为宽度的一半;

只要是对CSS了解的一些的同学,实现1和2都是非常简单的,而且方式也是多种多样的。那如何能设置让元素A的高度始终为宽度的一半呢?上代码~

页面布局:要考虑DOM的结构和CSS的样式

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. html, body {
  13. width: 100%;
  14. height: 100%;
  15. /* 设置子元素A垂直水平居中 */
  16. display: flex;
  17. align-items: center;
  18. justify-content: center;
  19. }
  20. .a {
  21. /* 设置margin左右间距为10px */
  22. margin: 0 10px;
  23. background: #F00;
  24. /* 设置宽度为100vw,实际宽度会受到弹性盒子的影响 */
  25. width: 100vw;
  26. /* calc方法动态计算:height的值为宽度的1/2,所以是 (100vw - 20px) / 2 */
  27. height: calc(50vw - 10px);
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="a"></div>
  33. </body>
  34. </html>

在上述的代码中我们借助calc方法实现了设置元素的高度为宽度的1/2

此时内心是否有些窃喜,又搞定了一个问题,饱含自信(傲娇)的目光看向了面试官。
然而,当你没有get到面试官的G点时,面试官又和蔼可亲(冷若冰霜)的说道“还有别的方法吗?”

还能有啥别的办法呢?你无助的捋了捋自己那为数不多的秀发。

啦啦啦,快来使用padding-top,哼哼哈嘿...

探究padding-top的秘密

当padding-top的值为百分比时,参考的对象是父级元素的宽度

这句话圈起来,是重点,要考~

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. }
  12. html, body {
  13. width: 100%;
  14. height: 100%;
  15. /* 设置子元素A垂直水平居中 */
  16. display: flex;
  17. align-items: center;
  18. justify-content: center;
  19. }
  20. .a {
  21. /* 设置margin左右间距为10px */
  22. margin: 0 10px;
  23. background: #F00;
  24. /* 设置宽度为100%,父级容器宽度的100%,实际宽度会受到弹性盒子的影响 */
  25. width: 100%;
  26. height: 0;
  27. /* calc方法动态计算:padding-top的值为父级容器宽度的1/2,所以是 (100vw - 20px) / 2 */
  28. padding-top: calc(50% - 10px);
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="a"></div>
  34. </body>
  35. </html>

此处也可以选择使用padding-bottom

此刻你再抬头时,看到了面试官那饱含了心满意足、孺子可教的热烈眼神...

最后的秘密

padding-toppadding-bottommargin-topmargin-bottom属性设置为百分比时,参考对象都是父级元素的宽度

要记住呀,下回还得考~

后记

以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得点赞收藏呦,关注胡哥有话说,学习前端不迷路,欢迎多多留言交流...

胡哥有话说,专注于大前端技术领域,分享前端系统架构,框架实现原理,最新最高效的技术实践!

原文链接:http://www.cnblogs.com/justbecoder/p/14147650.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号