用css怎么实现实现宽高比

实现方法:1、利用padding属性和“%”单位;2、利用padding和calc()属性;3、利用padding属性和CSS变量;4、利用padding属性和伪元素;5、直接利用视窗单位“vw”;6、使用视窗单位配合CSS Grid布局。

用css怎么实现实现宽高比

本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。

长宽比故事

长宽比在影视制作中又被称之为宽高比,指的是一个视频的宽度除以它的高度所得到的比例,通常表示为x:yx×y,其中的冒号和叉号表示中文的“比”之意。目前,在电影工业中最常被使用的是anamorphic比例(即2.39:1)。传统的4:3仍然被使用于现今的许多电视画面上,而它成功的后继规格16:9则被用于高清晰度电视或数字电视上。常见的比例:

用css怎么实现实现宽高比

有关于长宽比更多的介绍可以阅读Wiki上的Aspect ration一文。

立即学习“前端免费学习笔记(深入)”;

HTML结构

使用CSS实现容器长宽比,常见的HTML模板结构有两种:

另外一种结构是:

具体使用的时候,根据自己使用场景采用不同的结构。

CSS实现长宽比例方案

前面也提到过了,使用CSS实现长宽比方案有多种,下面简单的罗列一下这些方案。不过每种方案都不会详细介绍,因为代码非常简单,看一眼代码就能明白其中原理。

垂直方向的padding

这是最早提出的一种实现方案,主要借助的原理是利用padding-top或者padding-bottom的百分比值,实现容器长宽比。在CSS中padding-toppadding-bottom的百分比值是根据容器的width来计算的。如此一来就很好的实现了容器的长宽比。采用这种方法,需要把容器的height设置为0。而容器内容的所有元素都需要采用position:absolute,不然子元素内容都将被padding挤出容器(造成内容溢出)。

比如我们容器的长宽比是16:9,那么根据计算:100% * 9 / 16可以得到56.25%。如果你希望的是4:3,那么对应的就是100% * 3 / 4

具体的CSS代码如下:

.aspectration {    position: relative; /*因为容器所有子元素需要绝对定位*/    height: 0; /*容器高度是由padding来控制,盒模型原理告诉你一切*/    width: 100%; }.aspectration[data-ratio="16:9"] {    padding-top: 56.25%;}.aspectration[data-ratio="4:3"]{    padding-top: 75%;}

通过通配符*选择器,让其子元素的宽高和容器.aspectration一样大小:

.aspectration > * {    position: absolute;    left: 0;    top: 0;    width: 100%;    height: 100%;}

padding & calc()

这个方案采用的是paddingcalc()配合在一起使用。其实原理和第一个方案是一样的。只不过在第一个方案中,我们每次都需要对padding的值计算,如果使用calc()可以通过浏览器直接计算出padding的百分比值。

.aspectration[data-ratio="16:9"] {    padding-top: calc(100% * 9 / 16);}

padding & CSS变量

对于变量而言,以前是其他计算器语言和CSS处理器的特性,不过值得特性的是,现在也是CSS的特性。接下来的这个方案也是基于padding原理,只不过是借助于CSS变量特性,让前面的方案变得更为灵活一些。使用CSS的变量时,可以把HTML中data-ratio去掉了。换成style="--aspect-ratio:16/9",也可以是style="--aspect-ratio:1.4;"。同时也可以借助于第二个方案中的calc()。因为CSS的变量和calc()函数的结合是一种完美的结合。

.aspectration[style*="--aspect-ratio"] {    padding-top: calc(100% / (var(--aspect-ratio)));}

padding & 伪元素

前面的方案都是在.aspectration元素上使用padding值。但在CSS中,还可以使用CSS的伪元素::before::after来撑开容器。

.aspectration {    position: relative;}.aspectration:after {    content: "";    display: block;    width: 1px;    margin-left: -1px;    background-color: orange;}.aspectration[data-ratio="16:9"]:after {    padding-top: 56.25%;}.content {    width: 100%;    height: 100%;    position: absolute;    top: 0;    left: 0;}

视窗单位

CSS新特性中提供了一种新的单位vw。了解过这个单位的同学都知道,浏览器100vw表示的就是浏览器的视窗宽度(Viewport)。打个比方说,如果你的浏览器是1334px,那么对就的100vw = 1334px。这个时候也就是说1vw = 13.34px。这里的100vw也对应前面方案中的100%。这样我们就可以把前面的%单位换成vw的单位。打个比方说,16:9对应的就是100vw * 9 / 16 = 56.25vw。这个值可以用在padding-top或者padding-bottom中。但这里演示的不再是padding了,而是把这个值给height

.aspectration[data-ratio="16:9"] {    width: 100vw;    height: 56.25vw;}

上面的示例中width的值是30vw,那么对应的height值就是30vw * 9 / 16 = 16.875vw

视窗单位 & CSS Grid

这是一个很有创意的解决方案,使用的都是CSS新特性:视窗单位和CSS Grid Layout。简单说一下其中的实现原理:将容器.aspectration通过display:grid声明为一个网格容器,并且利用repeat()将容器划分为横向比例,比如16,那么每一格的宽度对应的就是100vw * 9 / 16 = 6.25vw。同样使用grid-auto-rows,将其设置的值和横向的值一样。在子元素上通过grid-columngrid-row按比例合并单元格。

.aspectration {    display: grid;    grid-template-columns: repeat(16, 6.25vw);    grid-auto-rows: 6.25vw;}.aspectration[data-ratio="16:9"] .content {    grid-column: span 16;    grid-row: span 9;}

(学习视频分享:css视频教程)

以上就是用css怎么实现实现宽高比的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1620418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 07:08:41
下一篇 2025年12月24日 07:08:52

相关推荐

  • css怎么去掉焦点框

    css去掉焦点框的方法是,给输入框添加样式【input{outline:none}】就可以了。此时我们即使在输入框中输入内容,外框也不会出现焦点。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 input是HTML中的一个非常重要的元素,它可以提供用户输入,在输…

    2025年12月24日
    000
  • 深入了解CSS和网络性能

    本篇文章带大家了解一下css和网络性能。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 可以提高网络性能: var script = document.createElement(‘script’); script.src = “analytic…

    2025年12月24日 好文分享
    000
  • css中如何给字体加描边

    给字体加描边的方法为:1、使用text-shadow属性,语法格式为“text-shadow: 水平阴影 垂直阴影 模糊半径 颜色”;2、使用text-stroke属性,语法格式为“text-stroke: 描边宽度 颜色”。 本教程操作环境:windows7系统、CSS3&&HTM…

    2025年12月24日 好文分享
    000
  • 值得了解的关于CSS auto的相关知识!!

    在CSS中,我们有auto值,它可以用于像margin,position,height,width等属性。在本文中,会先解释auto的工作方式以及如何最大程度地利用auto的技术细节,当然,会配合一些用例和示例。 简介 auto关键字的使用因属性而异。 对于本文,我将在每个属性的上下文中解释值。 w…

    2025年12月24日 好文分享
    000
  • 详解CSS contain新特性如何控制页面重绘与重排

    本篇文章带大家了解一下css新特性contain,介绍一下控制页面重绘与重排的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 在介绍新的 CSS 属性 contain 之前,读者首先需要了解什么是页面的重绘与重排。 OK,下面进入本文正题。 contain 为何? conta…

    2025年12月24日 好文分享
    000
  • css图片怎么溢出隐藏

    方法:1、在创建一个div元素充当父容器,包裹图片img标签;2、给div元素使用width和height属性设置宽高;3、给div元素添加“overflow:hidden;”样式,实现当图片超出div宽高时,修剪图片溢出的内容,将其隐藏。 本文操作环境:windows7系统、HTML5&&…

    2025年12月24日 好文分享
    000
  • css哪些属性可以继承

    可以继承的有:1、字体系列,font-family、font-weight; 2、文本系列,text-indent、color;3、元素可见性,visibility;4、列表布局,list-style;5、光标,cursor。 本教程操作环境:windows7系统、CSS3&&HTM…

    2025年12月24日
    000
  • css有哪几种样式

    css样式有三种,分别为:1、内联CSS样式,语法“”;2、行内CSS样式,语法“选择器{属性名:属性值;}”;3、外部CSS样式,使用link标签引入css。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 CSS(全称Cascading St…

    2025年12月24日
    000
  • css如何增加权重

    在css中,可以使用“!important”来增加权重,语法“选择器{样式:值!important;}”。css样式中加上“!importanrt”可以覆盖父级的样式;IE6中不能识别,但IE7和别的浏览器中可以用,用来处理浏览器的兼容性。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css中的“>”是什么意思

    css中的“>”是指子代元素,是CSS3特有的选择器,“父元素>子元素”表示选择父元素的所有子元素,与“父元素 子元素”的区别在于,“父元素 子元素”选择所有后代元素,“父元素>子元素”只选择一代。 ”是什么意思” > 本教程操作环境:windows7系统、CSS…

    2025年12月24日
    000
  • css如何设置字体

    css设置字体的方法:1、使用font标签进行设置,语法格式为“”;2、使用font-family属性进行设置,语法格式为“标签{font-family:“字体样式”}” 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 一、font标签配置字体 …

    2025年12月24日
    000
  • css如何让滚动条不显示

    在css中,可以使用“::-webkit-scrollbar”伪类选择器来选中滚动条,然后使用“display:none”样式不显示滚动条即可;具体语法格式“::-webkit-scrollbar{display:none;}”。 本教程操作环境:windows7系统、CSS3&&H…

    2025年12月24日
    000
  • css如何消除锯齿

    消除锯齿的方法:1、使用-webkit-font-smoothing属性,语法“-webkit-font-smoothing:antialiased”;2、使用transform属性,语法“transform:translateZ(0)”。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css怎么设置元素层次

    在css中,可以使用z-index属性设置元素层次,只需要给指定元素设置“z-index:auto|数值;”样式即可;z-index属性可以指定一个元素的堆叠顺序,拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。 本教程操作环境:windows7系统、CSS3&&HTML5…

    2025年12月24日 好文分享
    000
  • css怎么让div垂直居中

    css让div垂直居中的方法:1、使用绝对定位和负外边距进行居中;2、利用伪元素和inline-block、vertical-align进行居中;3、利用table布局进行居中;4、使用固定定位和transform属性进行居中。 本教程操作环境:windows7系统、CSS3&&HT…

    2025年12月24日
    000
  • css该如何去掉背景颜色呢

    css去掉背景颜色的方法是,给背景颜色添加background-color属性,并且将属性值设置为transparent即可,例如【background-color:transparent;】,transparent表示透明效果。 本文操作环境:windows10系统、css 3、thinkpad …

    2025年12月24日
    000
  • css如何去除字体的加粗效果

    css去除字体的加粗效果的方法是,给字体添加font-weight属性,并且将属性值设置为normal即可,例如【p.normal {font-weight:normal;}】,normal定义标准的字符。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 如果我们…

    2025年12月24日
    000
  • css中的滑动条怎么隐藏

    css中的滑动条隐藏的方法是,设置【overflow:hidden】即可。如果我们要隐藏滚动条并在内容溢出时显示,只需要设置【overflow:auto】即可。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 首先,如果需要隐藏滚动条并在内容溢出时显示滚动条,只需…

    2025年12月24日
    000
  • css如何修改字体大小

    css修改字体大小的方法是,给字体添加font-size属性,并且将属性值设置为合适的值即可,例如【h2 {font-size:200%;}】,表示将字体大小设置为基于父元素的200%。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 在css中想要修改字体的大小…

    2025年12月24日
    000
  • css如何改变图片的背景

    css改变图片的背景的方法是,添加background-image属性,并且将属性值设置为你想要的图片的url地址,例如【background-image:url(‘../images/mix/paper.gif’);】。 本文操作环境:windows10系统、css 3、t…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信