面试官:请使用 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 Java
【面试题】面试官:说说你对 CSS 盒模型的理解
【面试题】面试官:说说你对 CSS 盒模型的理解
|
1月前
|
移动开发 编解码 前端开发
【面试题】前端 移动端自适应?
【面试题】前端 移动端自适应?
|
1月前
|
算法 Java 应用服务中间件
阿里面试:说说自适应限流?
限流想必大家都不陌生,它是一种控制资源访问速率的策略,用于保护系统免受过载和崩溃的风险。限流可以控制某个服务、接口或系统在一段时间内能够处理的请求或数据量,以防止系统资源耗尽、性能下降或服务不可用。 常见的限流策略有以下几种: 1. **令牌桶算法**:基于令牌桶的方式,限制每个单位时间内允许通过的请求量,请求量超出限制的将被拒绝或等待。 2. **漏桶算法**:基于漏桶的方式,限制系统处理请求的速率,请求速率过快时将被限制或拒绝。 3. **计数器算法**:通过计数器记录单位时间内的请求次数,并根据设定的阈值进行限制。 通过合理的限流策略,可以保护系统免受恶意攻击、突发流量和资源
33 4
阿里面试:说说自适应限流?
|
21天前
|
前端开发 容器
CSS实现三列布局(左右固定宽度,中间自适应)
CSS实现三列布局(左右固定宽度,中间自适应)
|
1月前
|
前端开发
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
|
30天前
|
前端开发 Java
前端面试题01(css)
前端面试题01聚焦CSS,涵盖选择器优先级、隐藏元素方法、px与rem差异、重绘与重排解释、元素居中技巧及可继承属性。还探讨了CSS预处理器SASS和LESS的特性。文章提供实例代码展示居中布局的多种实现方式。鼓励读者点赞和支持。
18 0
|
1月前
|
小程序 前端开发 JavaScript
使用CSS的媒体查询功能在小程序中实现自适应布局
使用CSS的媒体查询功能在小程序中实现自适应布局
|
1月前
|
前端开发 算法
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
|
1月前
|
前端开发 开发者
CSS面试考点:盒模型、选择器、单位和像素概念
【4月更文挑战第2天】 CSS面试考点:盒模型、选择器、单位和像素概念
36 12
|
1月前
|
前端开发 容器
CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
【4月更文挑战第2天】 CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
27 10