当前位置: 首页 > news >正文

CSS前端面试题——怎么用CSS实现一个宽高自适应的正方形?

方法一:使用 padding 方案

这种方法通过设置元素的 padding 属性来实现宽高比例相等的正方形。假设我们希望正方形的边长为相对于父容器的百分比值,比如50%

.square {width: 50%; /* 可以是任意宽度,这里假设为父元素宽度的50% */padding-top: 50%; /* 设置为宽度的50%,保证高度与宽度相等 */background-color: red; /* 方便查看效果,可以根据需求修改 */
}

使用 padding-top: 50%; 而不是直接使用 height: 50%; 是因为这种技术可以确保元素是一个正方形,而不会因为内容的变化或者浏览器的调整而失真。

为什么要用padding-top: 50%,为什么不直接用height:50%

原理解释:

  1. 保持宽高比例

    • 正方形的特性是宽度等于高度。如果直接使用 height: 50%;,则高度会相对于父元素的高度来计算,但是如果父元素的宽度和高度不相等,就无法保证宽高相等,从而无法实现正方形。
  2. padding-top 基于宽度的百分比

    • 使用 padding-top: 50%; 的技巧是基于 CSS 的盒模型。当设置一个元素的 padding-top 为一个百分比时,这个百分比是相对于包含块(父元素的宽度)计算的
    • 例如,如果父元素的宽度为 200px,设置 padding-top: 50%; 就会使元素的上内边距为 100px(50% * 200px),这样可以确保在元素的宽度变化时,高度也会相应变化,保持正方形的特性。
  3. 高度不是直接适用的原因

    • 使用 height: 50%; 会相对于父元素的高度计算,如果父元素的宽度和高度不同,就无法保证是一个正方形,因为高度和宽度是不同的量度,不能简单地用一个百分比来适应。
    • 此外,直接设置高度可能会导致内容溢出或者元素的形状变形,而 padding-top 方法则保证了元素的内容区域始终与元素的宽度成正比例,避免了这些问题。

综上所述,使用 padding-top: 50%; 是为了保持元素是一个宽高相等的正方形,而不会受到父元素宽高比例变化的影响,从而确保布局的稳定性和一致性。

方法二:使用vw单位

  • vw (视口宽度的百分比)单位是相对于视口宽度的百分比。例如,1vw 等于视口宽度的1%。
  • 如果将元素的宽度和高度都设置为相同的 vw 值,例如 width: 50vw; height: 50vw;,那么这个元素将会是一个正方形,因为它的宽度和高度都是相对于视口宽度的百分比。
    .square {width: 50vw; /* 设置宽度为视口宽度的50% */height: 50vw; /* 设置高度为视口宽度的50% */background-color: blue; /* 方便查看效果,可以根据需求修改 */
    }
    

 方法三:伪元素实现

<div class="square"></div>.square {position: relative;width: 50%;background-color: red;
}.square::before {content: "";display: block;padding-top: 100%;
}
  1. 基本原理

    • .square 类选择器设置了一个基本的样式,其中 width: 50%; 让正方形的宽度占父容器宽度的一半。
    • 伪元素 .square::before 被用来创建一个占位符,通过 padding-top: 100%; 的设置,使其高度等于其宽度的百分比。这里的关键是利用了 padding-top 的百分比值是基于元素的宽度计算的特性。
  2. 实现方法

    • 当设置 padding-top: 100%; 时,这个百分比是相对于 .square 元素的宽度计算的。因此,无论 .square 的宽度如何变化,伪元素的高度始终保持与宽度相等,从而形成一个正方形。
    • content: ""; display: block; 用于创建一个空的块级元素,使得 padding-top 的效果生效并且不干扰 .square 元素本身的布局。

相关文章:

CSS前端面试题——怎么用CSS实现一个宽高自适应的正方形?

方法一&#xff1a;使用 padding 方案 这种方法通过设置元素的 padding 属性来实现宽高比例相等的正方形。假设我们希望正方形的边长为相对于父容器的百分比值&#xff0c;比如50% .square {width: 50%; /* 可以是任意宽度&#xff0c;这里假设为父元素宽度的50% */padding-t…...

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一&#xff0c;56-商品服务-API-三级分类-修改-拖拽功能完成二&#xff0c;57-商品服务-API-三级分类-修改-批量拖拽效果1&#xff0c;增加按钮2&#xff0c;多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时&#xff0c;拖拽排序是一个直观且高效的…...

Shader入门精要总结(二)矩阵

1. 矩阵乘法 一个rn的矩阵A和一个nc的矩阵B相乘&#xff0c;它们的结果AB将会是一个rc大小的矩阵&#xff0c;不满足此规则不能相乘 矩阵乘法满足一些性质 矩阵乘法不满足交换律 即AB≠BA矩阵乘法满足结合律 (AB)CA(BC) 2. 特殊矩阵 方块矩阵 指行和列数目相等的矩阵&#…...

基于CentOS Stream 9平台安装MySQL Community Server 9.0.1 Innovation

1. 安装之前 1.1 查看系统版本 cat /etc/redhat-releaseCentOS Stream release 9 1.2 查看cpu架构 lscpu架构&#xff1a; x86_64 CPU 运行模式&#xff1a; 32-bit, 64-bit 2. 官网下载 https://dev.mysql.com/downloads/mysql/ 要多看看 官方9.0文档&#xff1a;https://d…...

正则采集器之五——商品匹配规则

需求设计 实现分析 系统通过访问URL得到html代码&#xff0c;通过正则表达式匹配html&#xff0c;通过反向引用来得到商品的标题、图片、价格、原价、id&#xff0c;这部分逻辑在java中实现。 匹配商品的正则做成可视化编辑&#xff0c;因为不同网站的结构不同&#xff0c;同…...

一键切换阿里yum源(包括其他系统repo镜像查找方法)

一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…...

Fiddler学习笔记

目录 前言 简介 原理 界面 前言 测试可以使用fiddler工具&#xff0c;通过抓包的方式修改前端参数和模拟后端返回&#xff0c;快速定位缺陷。 简介 Fiddler是HTTP协议调试代理工具&#xff0c;可以记录并检查所有客户端和服务器之间的HTTP和HTTPS请求&#xff0c;允许监视…...

【Vue3】watch 监视多种类型数据

【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…...

【C++入门】虚函数与多态

文章目录 前言虚函数是什么&#xff1f;如何使用虚函数&#xff1f; 纯虚函数是什么&#xff1f;虚函数与普通函数的区别虚表虚表是什么&#xff1f;含有虚表的类内存结构图如何找到虚表的地址&#xff1f;示例代码代码解释 多态是什么&#xff1f;如何使用多态&#xff1f;为什…...

wpf中轮询显示图片

本文的需求是&#xff0c;在一个文件夹中&#xff0c;放一堆图片的集合&#xff0c;然后在wpf程序中&#xff0c;按照定时的方式&#xff0c;循序显示照片。 全部代码 1.声明一个PictureInfo类 namespace WpfApp1 {public class PictureInfo{public string? FileName { get; …...

CSA笔记9-磁盘管理(2)

分区挂载 挂载&#xff1a;将该文件系统中的内容与指定的目录关联起来&#xff0c;使得你可以通过该目录来访问文件系统中的文件和目录。 mount 命令用来挂载文件系统 #挂载/dev/sda1和/dev/sda2 [rootlocalhost ~]# mkdir test{1..2} [rootlocalhost ~]# ll test1 te…...

Python入门第三课

# 入门第三课 # 关键字 if and or in not in ! car g print(car g) print(car dd) if car ! hh:print("wlcome to here ") age 33 print(age 33) print(age 44) age1 44 if age >0 and age1 > 0:print("nihao") if age >0 or age1 > …...

java计算器,输入公式和对应变量的值

目标&#xff1a;最近想写个东西&#xff0c;本质就是一个计算器&#xff0c;我们可以输入公式&#xff08;例如&#xff1a;ab&#xff09;&#xff0c;然后把公式的值&#xff08;a:10,b:20&#xff09;也输入进去。最后得到结果。核心&#xff1a;这个想法核心部分就是给一个…...

加密货币赋能跨境电商:PayPal供应链金融服务如何引领行业新趋势

跨境电商行业近年来呈现出爆发式增长&#xff0c;随着全球化贸易壁垒的降低和数字经济的快速发展&#xff0c;越来越多的商家和消费者跨越国界进行交易。根据eMarketer的数据&#xff0c;全球跨境电商交易额在2023年已超过4万亿美元&#xff0c;并预计在未来几年内仍将保持两位…...

redis面试(二)List链表数据

list 列表 我们总是说List为列表&#xff0c;其实在真正的数据结构来说&#xff0c;redis是自己基于c语言来实现的双向链表数据结构&#xff0c;主要的逻辑就是每个节点都可以指向下一个节点&#xff0c;这个结构就属于链表数组结构。 每个节点中的属性如下&#xff1a; type…...

SpringDataJPA(三):多表操作,复杂查询

一、Specifications动态查询 有时我们在查询某个实体的时候&#xff0c;给定的条件是不固定的&#xff0c;这时就需要动态构建相应的查询语句&#xff0c;在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …...

嵌入式硬件面试题集萃:从基础到进阶

基础问题 问题: 解释什么是微控制器&#xff0c;以及它与微处理器的区别。 答案: 微控制器是具有集成内存和输入/输出外设的微型计算机。与通用微处理器相比&#xff0c;微控制器通常用于控制特定应用&#xff0c;而不是执行通用计算任务。 问题: 什么是数字逻辑门&#xff0c…...

easyui-datebox 只显示月份选择,默认开启月份,隐藏日期选择框

如果你使用 ​​easyui-datebox​​​ 并希望隐藏日期选择框,只显示月份选择,可以通过一些自定义代码来实现。虽然 EasyUI 没有直接提供这种功能,但可以通过自定义 ​​formatter​​​ 和 ​​parser​​​ 方法,以及修改 ​​onShowPanel​​ 事件来实现这个功能。 以下…...

【数据结构】队列(链表实现 + 力扣 + 详解 + 数组实现循环队列 )

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…...

02 Go语言操作MySQL基础教程_20240729 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728 基础不好的同学每节课的代码最好配合视频进行阅读和学习&#xff0c;如果基础比较扎实&#xff0c;则阅读本教程巩固一下相…...

快速集成A2A Agent

面我们提到可以将MCP服务也封装为一个Tool&#xff08;AIFunction&#xff09;让Agent调用&#xff0c;这里A2A Agent也是一样的道理。 这样做的好处是&#xff1a;让MAF中的Agent像调用本地函数一样调用远程A2A Agent 或 MCP Server。 下面的代码展示了在MAF中将A2A Card转换…...

单片机串口通信原理与应用详解

单片机串口通信技术详解1. 串口通信基础概念1.1 串行通信原理串行通信是一种仅使用一根接收线(RX)和一根发送线(TX)进行数据传输的通信方式。与并行通信相比&#xff0c;虽然传输速度较慢&#xff0c;但具有布线简单、成本低的优势。典型的串口通信系统包含三根基本信号线&…...

基于FPGA的DDS在安路TD和EG4A20BG256上的调试技巧与实战经验(五)

1. 安路TD软件常见编译问题排查指南 第一次用安路TD软件编译DDS工程时&#xff0c;我遇到了几个典型的编译错误。最常见的就是license报错&#xff0c;这个坑我踩过三次。当你看到"License expired"或者"Invalid license"提示时&#xff0c;别急着重装软件…...

GD32F4系列定时器正交译码器实战:用STM32CubeMX的思路配置编码器接口

GD32F4定时器正交译码器实战&#xff1a;从STM32CubeMX到GD32的平滑迁移指南 在工业控制、机器人运动检测等领域&#xff0c;正交编码器作为位置和速度反馈的关键传感器&#xff0c;其信号处理能力直接影响系统精度。对于熟悉STM32生态的开发者而言&#xff0c;当项目需要迁移至…...

Actor-Critic实战:从QAC到A2C的代码实现与调参技巧(PyTorch版)

Actor-Critic实战&#xff1a;从QAC到A2C的PyTorch实现与调参艺术 在强化学习的工程实践中&#xff0c;Actor-Critic架构因其平衡探索与利用的特性&#xff0c;成为解决连续决策问题的利器。本文将带您深入QAC&#xff08;Q Actor-Critic&#xff09;和A2C&#xff08;Advantag…...

DanKoe 视频笔记:《百万美元创意者》:如何将你的兴趣货币化 [特殊字符]

在本节课中&#xff0c;我们将学习如何将个人兴趣转化为可持续的收入来源。我们将探讨传统职业路径的局限性&#xff0c;并介绍一种通过创造力和杠杆式工作来实现财务自由与生活满足感的新方法。课程的核心在于理解如何成为一个“价值创造者”&#xff0c;而不仅仅是出售时间。…...

HyperDroid深度体验:安卓秒变Win11桌面的秘密武器

1. HyperDroid初体验&#xff1a;当安卓遇上Win11的奇妙化学反应 第一次打开HyperDroid时&#xff0c;我的手机屏幕瞬间变成了熟悉的Windows 11界面&#xff0c;那种感觉就像把电脑桌面装进了口袋。任务栏、开始菜单、甚至窗口的圆角设计都完美复刻&#xff0c;连动态磁贴的亚克…...

国行Mac用户必看:Xcode 26 AI助手完整配置指南(含DeepSeek接入教程)

国行Mac开发者实战&#xff1a;解锁Xcode 26 AI助手的全链路解决方案 当苹果在WWDC24上演示Xcode 26的AI代码补全功能时&#xff0c;现场开发者发出的惊叹声至今仍在耳边回响。作为深耕iOS开发多年的技术顾问&#xff0c;我完全理解这种兴奋——AI辅助编程正在彻底改变我们的工…...

轮速计里程计:从后轮速差模型到精准定位的实现与挑战

1. 轮速计里程计&#xff1a;为什么后轮速差模型是机器人的“起点”&#xff1f; 如果你刚开始接触机器人定位&#xff0c;面对IMU、激光雷达、视觉这些五花八门的传感器&#xff0c;可能会有点懵。别急&#xff0c;绝大多数轮式机器人的定位之旅&#xff0c;都是从脚下开始的&…...

实战指南:在快马平台用llmfit打造适用于移动端的轻量级文本生成模型

今天想和大家分享一个实战项目&#xff1a;如何在移动端部署轻量级文本生成模型。最近在做新闻类App开发时&#xff0c;遇到一个需求——根据用户输入的关键词自动生成吸引眼球的新闻标题。由于要在手机端实时运行&#xff0c;模型必须足够轻量&#xff0c;这就引出了我们今天的…...