css实现正方形的几种方案及优缺点

2025-03-04
9784 分钟
...

前言

在电商、个人博客等网站我们或多或少都可以看到css正方形的应用场景,自适应正方形布局是必须要掌握的;接下来采黎带大家揭开css自适应正方形神秘的面纱~

正方形

这很简单,设置盒子宽高都为200px就可以了

<div class="box">小明写的</div>

.box {
    width: 200px;
    height: 200px;
    background: pink;
}

自适应正方形

青铜

提起自适应,想必都会想到remvw等相对单位,我们分别用这些单位来实现一下。

rem

<div class="rem">rem</div>

body {
    font-size: 16px;
}

.rem {
    width: 10rem;
    height: 10rem;
    background: pink;
}

@media only screen and (max-width: 1200px) {
    body {
        font-size: 12px;
    }
}

屏幕宽度大于1200px时,字体为16px,rem的盒子的大小为 160px * 160px;

屏幕宽度小于1200px时,字体为12px,rem的盒子的大小为 120px * 120px;

实际应用场景屏幕宽度变化会动态计算rem的值,这里只用于案例理解。

优点

在适配了rem的项目中,可以直接使用rem设置盒子宽高,即自适应正方形

缺点

在未设置rem的项目中,单独为了实现自适应正方形有点大材小用

vw

可以看到正方形跟随着屏幕宽度的变化自适应,这是我们想要的效果

优点

vw为内置视口单位,可直接使用。

缺点

在实际的业务场景中,将设计稿的尺寸转化为vw相对麻烦

黄金

使用 百分比+padding,这里有一个很细的知识点;当padding、margin取值为百分比时,百分比的值是以父元素的width为参考

<div class="padding"></div>

.padding {
    width: 20%;
    padding-top: 20%;
    
    background: #696969;
}

我们给盒子的宽度设置20%,使用的padding的纵轴将盒子高度撑开,这样便得到了一个自 适应正方形。

细心的小伙伴会发现,现在是个自适应正方形没错了,但是高度被占满了,内容没地方放了。 是的,当前只是一个正方形;在实际业务场景中,内部不是图片就是其他内容,不止需要一个正方形的。

解决办法:再嵌套一层内容盒子,外层方形盒为相对定位,内层内容盒为绝对定位;内层盒宽高基于外层方形盒,代码如下

<div class="box-wrap">
    <div class="box-content">我是内容区域</div>
</div>

.box-wrap {
    position: relative;
    width: 20%;
    padding-top: 20%;
}

.box-content {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    z-index: 1;
    background: burlywood;
}

.box-content类为内容盒,我们可以在内容盒里为所欲为还原设计稿了。

若方形区域只需要展示图片,同理如下

这里我们就实现了一个自适应方形图片了。

优点

无需其他配置,设置灵活,扩展性强。

缺点

需要额外嵌套一层内容盒(个人拙见)

钻石

他就是css属性aspect-ratio

aspect-ratio MDN文档

aspect-ratio,简言之就是宽高比。多说无益,上代码

一个属性,自适应正方形就OK啦;属性再好,也得看兼容性和浏览器支持。

优点

属性通俗易懂,无需其他配置,无需嵌套内容盒。

缺点

唯一缺点就是兼容性了

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
css2025-03-04
CSS 实现文本省略显示【单行,2行,多行】
在 中,长文本内容可能会超出其容器的范围。为了保持良好的用户体验,我们通常会将超出的文本部分以省略号显示。本文将详细介绍如何在CSS中限制文本显示一行、两行或多行,超过部分显示省略号。 1\. 前言 限制文本显示长度并以省略号表示超出部分是常见的需求。通过CSS,可以简单地实现这一效果。我们将分别介绍单行文本、省略两行文本和多行文本的实现方法。 2\. 单行文本省略 要实现单行文本省略,主要使用以下CSS属性: : 禁止文本换行。 :...
学习面试
css2025-03-04
css中,有哪些方式可以隐藏页面元素?区别?
一、前言 在平常的样式排版中,我们经常遇到将某个模块隐藏的场景 通过 隐藏元素的方法有很多种,它们看起来实现的效果是一致的 但实际上每一种方法都有一丝轻微的不同,这些不同决定了在一些特定场合下使用哪一种方法 二、实现方式 通过 实现隐藏元素方法有如下: display:none visibility:hidden opacity:0 设置height、width模型属性为0 position:absolute clip path dis...
学习面试
css2025-03-04
Flexbox 弹性布局
一、是什么 简称 box,意为”弹性布局”,是一种一维的布局模型。一次只能处理一个维度上的元素布局,一行或者一列。 采用Flex布局的元素,称为 容器( ),简称”容器“;它的所有子元素自动成为容器成员,称为 项目( ),简称”项目“。 容器中默认存在两条轴, 主轴 和 交叉轴 。项目默认沿主轴排列,通过 来决定主轴的方向。 每根轴都有起始线和终止线,用来描述flexbox元素的方向。 任何一个容器都可以指定为 布局。设为 Flex 布...
学习面试
css2025-03-04
提升CSS渲染性能
1\. 提升CSS渲染性能: 2\. 合适使用css选择器: 3\. 提升css文件加载的性能: 4\. 精简css代码: 5\. 合理使用web fonts: 6\. css动画优化:
学习面试
css2024-08-29
CSS 终于在 2024 年增加了垂直居中功能
在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 进行垂直居中。 支持情况: | Chrome: 123 | Firefox: 125 | Safari: 17.4 | | | | | CSS 对齐一般会使用 或 布局,因为 在默认的流式布局中不起作用。在 2024 年,浏览器实现了 。 你不需要 flexbox 或 grid,只需要 1 个 CSS 属性就可以进行对齐。 因此内容不需要包裹在 div 中。 令人惊讶...
学习面试
css2024-08-29
伪类和伪元素是什么什么是伪类
什么是伪类 (pseudo classes)? 伪类可以让我们根据元素的状态变化使用 CSS。例如,当我们想要设置某元素在被指标指到时的样式,我们可以使用 伪类来改变样式。 介绍 4 个常见的伪类 (pseudo classes) 用法 当用户的鼠标或触控板等设备放在元素上时,我们可以使用 更改元素的样式。 、 这两个伪类都是用在含有 href 属性的 元素上。 可以调整使用者还未浏览过的链接样式,而 则可以改变使用者已浏览过的链接样式...
学习面试

评论

请登录后发表评论

去登录
加载评论中...

目录