面试官:请使用 CSS 实现自适应正方形

简介: 面试官:请使用 CSS 实现自适应正方形

1) 直接采用 vw 布局

高度和宽度统一采用 vw 布局,达到高度宽度自适用的效果。

.child {
  width:50vw,
  height:50vw
}

存在的问题:只能相对于 viewport 进行布局,很多时候我们的业务场景并不是想对于窗口大小缩放正方形大小。

2)采用 padding 相对

padding 百分比其实是相对父元素的宽度进行计算的,举个简单的小🌰。

<div style="width: 200px;height: 200px;background-color: pink;">
    <div style="width:50%;padding-bottom: 50%; background-color: blue;"></div>
  </div>

image.png

这种布局方式,一般会给父元素设置固定宽度,而子元素设置 width 百分比布局,通过 padding 也是基于父元素的宽度前提下,进行百分比适配

存在的问题:如果容器内有内容的话,会撑开容器高度,简单看个demo。

<div style="width: 200px;height: 200px;background-color: pink;">
    <div style="width:50%;padding-bottom: 50%; background-color: blue; color: aliceblue;">111111111</div>
  </div>

image.png

很明显,在容器内添加内容,这个时候高度发生了改变,就不是我们需要的“正方形”了。

解决办法: 通过设置容器 heigth 为 0 ,我们就可以强行将这个元素的高度限制为只能由 padding 来控制了(高度无非就是 contentWidth + paddingWidth)

<div style="width: 200px;height: 200px;background-color: pink;">
    <div style="width:50%;padding-bottom: 50%; background-color: blue; color: aliceblue;height:0;">111111111</div>
  </div>

image.png

3) 巧用伪元素 + margin

<div style="width: 200px;height: 200px;background-color: pink;">
<div class="box"></div>
<style>
  .box {
    background-color: blue;
    color: white;
    width: 50%;
    overflow: hidden;
  }
  .box::after {
    content: "";
    display: block;
    margin-top: 100%;
  }
</style>
</div>

image.png

这里和 padding 的使用是类似的,margin 百分比也是相对于父元素的 width ,设置伪元素的 margin-top: 100% 其实就是撑开容器的 height,让 heigth = width;

解释一下这里为什么需要设置 overflow:hidden; 开启 BFC。这里是因为父子嵌套的元素垂直方向的margin取最大值。 详细一点的推荐大家阅读:juejin.cn/post/697627…

如果没有 overflow:hidden; 那就会是这样

image.png

缺点:容器内无法填充内容

总结

  • vw 实现正方形,布局相对于窗口大小,使用场景少
  • padding 百分比 + height 设置为 0; 最常用也是最推荐的方式
  • 伪元素设置 margin 100% 撑开容器,无法填充内容,不推荐


相关文章
|
1月前
|
前端开发 JavaScript 容器
CSS 实战录: 双栏、四等分、不等间距、自适应...
CSS 实战录: 双栏、四等分、不等间距、自适应...
80 0
|
20天前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
20天前
|
前端开发
css页面顶部底部固定,中间自适应几种方法
【10月更文挑战第22天】css页面顶部底部固定,中间自适应几种方法
|
2月前
|
Web App开发 前端开发 JavaScript
「offer来了」1张思维导图,6大知识板块,带你梳理面试中CSS的知识点!
该文章通过一张思维导图和六大知识板块系统梳理了前端面试中涉及的CSS核心知识点,包括CSS框架、基础样式问题、布局技巧、动画处理、浏览器兼容性及性能优化等方面的内容。
|
3月前
|
前端开发 容器
前端面试热门问题--浮动和清除浮动(CSS)
前端面试热门问题--浮动和清除浮动(CSS)
|
3月前
|
前端开发 容器
分享一些我在面试时所遇到的CSS问题 (五)
分享一些我在面试时所遇到的CSS问题 (五)
|
3月前
|
前端开发 容器
分享一些我在面试时所遇到的CSS问题 (四)
分享一些我在面试时所遇到的CSS问题 (四)
|
3月前
|
前端开发 JavaScript
分享一些我在面试时所遇到的CSS问题 (三)
分享一些我在面试时所遇到的CSS问题 (三)
|
3月前
|
前端开发 容器
分享一些我在面试时所遇到的CSS问题 (二)
分享一些我在面试时所遇到的CSS问题 (二)
|
3月前
|
前端开发 容器
分享一些我在面试时所遇到的CSS问题 (一)
分享一些我在面试时所遇到的CSS问题 (一)