구현 방법: 1. 패딩 속성과 "%" 단위를 사용합니다. 2. 패딩 속성과 CSS 변수를 사용합니다. 4. 패딩 속성과 의사 요소를 사용합니다. 6. CSS 그리드 레이아웃과 함께 창 단위를 사용합니다.
이 튜토리얼의 운영 환경: Windows7 시스템, CSS3&&HTML5 버전, Dell G3 컴퓨터.
종횡비는 영화 및 TV 제작에서 종횡비라고도 하며, 이는 비디오의 너비를 높이로 나눈 비율을 의미하며 일반적으로 x로 표시됩니다. y
또는 x×y
, 콜론과 십자 표시는 중국어로 '비율'을 의미합니다. 현재 영화 산업에서 가장 일반적으로 사용되는 비율은 아나모픽 비율(예: 2.39:1
)입니다. 전통적인 4:3
은 오늘날에도 여전히 많은 TV 화면에서 사용되고 있으며 성공적인 후속 사양인 16:9
는 HD TV 또는 디지털 TV 고급 사양에 사용됩니다. 일반적인 비율: x:y
或x×y
,其中的冒号和叉号表示中文的“比”之意。目前,在电影工业中最常被使用的是anamorphic比例(即2.39:1
)。传统的4:3
仍然被使用于现今的许多电视画面上,而它成功的后继规格16:9
则被用于高清晰度电视或数字电视上。常见的比例:
有关于长宽比更多的介绍可以阅读Wiki上的Aspect ration一文。
使用CSS实现容器长宽比,常见的HTML模板结构有两种:
<div class="aspectration" data-ratio="16:9"> <div class="content"></div> </div>
另外一种结构是:
<div class="aspectration" data-ratio="16:9"> </div>
具体使用的时候,根据自己使用场景采用不同的结构。
前面也提到过了,使用CSS实现长宽比方案有多种,下面简单的罗列一下这些方案。不过每种方案都不会详细介绍,因为代码非常简单,看一眼代码就能明白其中原理。
这是最早提出的一种实现方案,主要借助的原理是利用padding-top
或者padding-bottom
的百分比值,实现容器长宽比。在CSS中padding-top
或padding-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()
配合在一起使用。其实原理和第一个方案是一样的。只不过在第一个方案中,我们每次都需要对padding
的值计算,如果使用calc()
可以通过浏览器直接计算出padding
的百分比值。
.aspectration[data-ratio="16:9"] { padding-top: calc(100% * 9 / 16); }
对于变量而言,以前是其他计算器语言和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))); }
前面的方案都是在.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; }
.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; }
padding-top
또는 padding-bottom
을 사용하는 것입니다. 컨테이너 종횡비를 달성합니다. CSS에서 padding-top
또는 padding-bottom
의 백분율 값은 컨테이너의 너비
를 기준으로 계산됩니다. 이런 방식으로 컨테이너의 종횡비가 잘 구현됩니다. 이 방법을 사용하려면 컨테이너의 높이
를 0
으로 설정해야 합니다. 컨테이너 콘텐츠의 모든 요소는 position:absolute
를 사용해야 합니다. 그렇지 않으면 하위 요소의 콘텐츠가 padding
에 의해 컨테이너 밖으로 압착됩니다(콘텐츠 오버플로 발생). . 🎜🎜예를 들어 컨테이너의 가로 세로 비율이 16:9
인 경우 계산에 따르면 100% * 9/16
을 얻을 수 있습니다. 56.25 %
. 4:3
을 원할 경우 해당 값은 100% * 3/4
입니다. 🎜🎜특정 CSS 코드는 다음과 같습니다. 🎜rrreee🎜와일드카드 *
선택기를 사용하여 하위 요소의 너비와 높이를 컨테이너 .aspectration
과 동일하게 만듭니다. 🎜rrreeepadding
과 calc()
를 함께 사용합니다. 사실 원리는 첫 번째 해결 방법과 동일합니다. 하지만 첫 번째 해결 방법에서는 매번 padding
값을 계산해야 합니다. calc()
를 사용하면 padding을 직접 계산할 수 있습니다. browser.
의 백분율 값입니다. 🎜rrreeepadding
원칙을 기반으로 하지만 CSS 변수 기능을 사용하여 이전 솔루션을 더욱 유연하게 만듭니다. CSS 변수를 사용할 때 HTML에서 데이터 비율
을 제거할 수 있습니다. style="--aspect-ratio:16/9"
또는 style="--aspect-ratio:1.4;"
로 바꾸세요. 동시에 두 번째 해결 방법에서 calc()
를 사용할 수도 있습니다. CSS 변수와 calc()
함수의 조합은 완벽한 조합이기 때문입니다. 🎜rrreee.aspectration
요소에 padding
값을 사용했습니다. 그러나 CSS에서는 CSS 의사 요소 ::before
또는 ::after
를 사용하여 컨테이너를 열 수도 있습니다. 🎜rrreeevw
를 제공합니다. 이 단원에 대해 배운 학생들은 브라우저 100vw
가 브라우저의 창 너비(뷰포트)를 나타낸다는 것을 알고 있습니다. 예를 들어, 브라우저가 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新特性:视窗单位和CSS Grid Layout。简单说一下其中的实现原理:将容器.aspectration
通过display:grid
声明为一个网格容器,并且利用repeat()
将容器划分为横向比例,比如16
,那么每一格的宽度对应的就是100vw * 9 / 16 = 6.25vw
。同样使用grid-auto-rows
,将其设置的值和横向的值一样。在子元素上通过grid-column
和grid-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를 사용하여 종횡비를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!