我想创建一个div
可以随着窗口宽度的变化而改变宽度/高度的东西.
是否有任何CSS3规则允许高度根据宽度改变,同时保持其宽高比?
我知道我可以通过JavaScript实现这一点,但我更喜欢只使用CSS.
只需创建一个
您可以使用 vw:视口宽度的1/100.[ MDN ] 或者,您也可以使用
我已经找到了使用CSS执行此操作的方法,但您必须小心,因为它可能会根据您自己的网站流量而改变.我已经完成了它,以便在我的网站的流体宽度部分内嵌入具有恒定宽高比的视频. 假设您有这样的嵌入式视频: 然后,您可以将所有内容放在带有"视频"类的div中.此视频类可能是您网站中的流媒体元素,因此它本身没有直接的高度限制,但是当您调整浏览器大小时,它将根据网站的流量改变宽度.这可能是您在保持视频的某个宽高比时可能尝试获取嵌入视频的元素. 为了做到这一点,我在"视频"类div中的嵌入对象之前放置了一个图像. !重要的是,图像具有您希望保持的正确宽高比.此外,请确保图像的大小至少与您期望的视频(或任何维持AR的大小)一样大,以便根据您的布局获得.这将避免在调整百分比大小时图像分辨率中的任何潜在问题.例如,如果您想保持3:2的宽高比,请不要只使用3px x 2px图像.它可能在某些情况下有效,但我没有测试过,它可能是一个好主意,可以避免. 您可能应该已经为网站的流体元素定义了这样的最小宽度.如果没有,最好这样做是为了避免在浏览器窗口太小时关闭元素或重叠元素.在某些时候最好有一个滚动条.网页应该获得的最小宽度约为600像素(包括任何固定宽度的列),因为除非您正在处理适合手机的网站,否则屏幕分辨率不会变小.! 我使用了一个完全透明的png,但如果你做得对,我真的认为它最终无关紧要.像这样: 现在您应该能够添加类似于以下内容的CSS: 确保您还删除了通常附带复制/粘贴嵌入代码的对象和嵌入标记中的任何显式高度或宽度声明. 它的工作方式取决于视频类元素的位置属性和您想要保持一定宽高比的项目.它利用了在元素中调整大小时图像保持其正确宽高比的方式.它告诉视频类元素中的任何其他内容,通过强制其宽度/高度为图像调整的视频类元素的100%,充分利用动态图像提供的不动产. 很酷,嗯? 您可能需要稍微使用它来使其与您自己的设计一起工作,但这实际上对我来说效果非常好.一般的概念就在那里. 艾略特激励我使用这个解决方案 - 谢谢: 请注意: 要添加到Web_Designer的答案, 如果您希望div的宽度不是100%,则需要另一个包装div来设置宽度: 我最近使用类似于Elliot的图像技巧,允许我使用CSS媒体查询根据设备分辨率提供不同的徽标文件,但仍然按比例按比例缩放 正如在w3schools.com上所述并在此接受的答案中有所重申,填充值为百分比(强调我的): 以包含元素宽度的百分比指定填充 Ergo,保持16:9宽高比的响应式DIV的正确示例如下: CSS HTML 演示JSFiddle 由于@ web-tiki已经显示了使用 对于风景,并保持16:9,你显示使用 9/16的比例很容易改变,不需要预定义 如果您想要适应不同的屏幕尺寸,您可能也会感兴趣
背景大小的封面/包含
上面的样式类似于包含,取决于宽度:高度比. 对象的合
覆盖/包含img/video标签
媒体查询 基于你的解决方案,我已经做了一些技巧: 当您使用它时,您的HTML将是唯一的 以这种方式使用它:CSS: 和js(jQuery) 有了这个,你只需将attr设置 这是对已接受答案的改进:
使用伪元素而不是包装器div 宽高比基于框的宽度而不是其父级 当内容变得更高时,盒子将垂直伸展
你可以使用svg.使容器/包装器位置相对,将svg放在静止位置,然后放置绝对定位的内容(顶部:0;左:0;右:0;底部:0;) 16:9比例的示例: image.svg :(可以在src中内联) CSS: HTML: 请注意,内联svg似乎不起作用,但您可以对svg进行urlencode并将其嵌入到img src属性中,如下所示: 我偶然发现了一个使用 网格元素允许您使用两个(或多个)元素占据相同的空间,而无需指定哪个元素来设置高度。这意味着,开箱即用的是更高的比例。 这意味着您可以按原样使用它,因为当您知道内容永远不会高到无法填满整个“比例”时,您只是在寻找一种将内容放置在此空间中的方法(即,将内容在两个方向上居中放置)
您需要做的就是更改
看到它的工作:
就我而言,SCSS是最好的解决方案。使用数据属性: 例如 : 资源padding-bottom
,如下所示:
div {
width: 100%;
padding-bottom: 75%;
background: gold; /** <-- For the demo **/
}
2> web-tiki..:vw
单位:
vw
单位来表示元素的宽度和高度.这允许基于视口宽度保留元素的宽高比.
vh
视口高度,甚至vmin
/ vmax
使用视口尺寸的较小/较大(此处讨论).示例:1:1宽高比
div {
width: 20vw;
height: 20vw;
background: gold;
}
3> forgo..:
div.video { ...; position: relative; }
div.video img.maintainaspectratio { width: 100%; }
div.video object { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; }
div.video embed {width: 100%; height: 100%; }
4> Florian Brei..:aspectratio.png
是一个完全透明的PNG文件,其大小与首选宽高比相同,在我的情况下为30x10像素.HTML
CSS3
.eyecatcher img {
width: 100%;
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: url(../img/autoresized-picture.jpg);
}
background-size
css3功能可能无法与目标浏览器配合使用.您可以检查互操作性(fe在caniuse.com上).
5> nabrown..:div.ar-outer{
width: 60%; /* container; whatever width you want */
margin: 0 auto; /* centered if you like */
}
div.ar {
width:100%; /* 100% of width of container */
padding-bottom: 75%; /* 75% of width of container */
position:relative;
}
div.ar-inner {
position: absolute;
top: 0; bottom: 0; left: 0; right: 0;
}
(我将徽标设置为背景图像为透明.png具有正确的宽高比).但是Web_Designer的解决方案会为我节省一个http请求.
6> Marc A..:
.parent {
position: relative;
width: 100%;
}
.child {
position: relative;
padding-bottom: calc(100% * 9 / 16);
}
.child > div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
7> wener..:vh
/的方法vw
,我还需要一种在屏幕中居的方法,这里是9:16肖像的片段代码..container {
width: 100vw;
height: calc(100vw * 16 / 9);
transform: translateY(calc((100vw * 16 / 9 - 100vh) / -2));
}
translateY
将这个中心保留在屏幕上.calc(100vw * 16 / 9)
预计9月16日的高度.(100vw * 16 / 9 - 100vh)
是溢出高度,因此,拉起overflow height/2
将使其保持在屏幕中心..container {
width: 100vw;
height: calc(100vw * 9 / 16);
transform: translateY(calc((100vw * 9 / 16 - 100vh) / -2));
}
100:56.25
或100:75
.如果你想先确保高度,你应该切换宽度和高度,例如height:100vh;width: calc(100vh * 9 / 16)
9:16的肖像.@media (orientation: portrait)
/@media (orientation: landscape)
portrait
/ landscape
更改比率.
8> pie6k..:*[data-keep-ratio] {
display: block;
width: 100%;
position: relative;
}
*[data-keep-ratio] > * {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
$('*[data-keep-ratio]').each(function(){
var ratio = $(this).data('keep-ratio');
$(this).css('padding-bottom', ratio);
});
data-keep-ratio
为高度/宽度即可.
你应该使用`data-keep-ratio`而不是`keep-ratio`并使用`$(this).data('keep-ratio')来获得它的值;`
9> Salman A..:.box {
margin-top: 1em;
margin-bottom: 1em;
background-color: #CCC;
}
.fixed-ar::before {
content: "";
float: left;
width: 1px;
margin-left: -1px;
}
.fixed-ar::after {
content: "";
display: table;
clear: both;
}
.fixed-ar-16-9::before {
padding-top: 56.25%;
}
.fixed-ar-3-2::before {
padding-top: 66.66%;
}
.fixed-ar-4-3::before {
padding-top: 75%;
}
.fixed-ar-1-1::before {
padding-top: 100%;
}
.width-50 {
display: inline-block;
width: 50%;
}
.width-20 {
display: inline-block;
width: 20%;
}
10> Maciej Krawc..:
.container {
position: relative;
}
.content {
position: absolute;
top:0; left:0; right:0; bottom:0;
}
11> Andrei Gheor..:和的智能解决方案
display:grid
。display:flex; align-items:center; justify-content:center
)。
它与使用具有
display:block
和预定比例的透明胶片几乎相同,除了它更轻巧且易于修改(根据需要以响应方式更改比例)。
s的比率:
.ratio {
display: grid;
}
.ratio > * {
grid-area: 1/1/1/1;
}
.ratio {
display: grid;
}
.ratio > * {
grid-area: 1/1/1/1;
}
/* below code NOT needed for setting the ratio
* I just wanted to mark it visually
* and center contents
*/
.ratio div {
border: 1px solid red;
display: flex;
align-items: center;
justify-content: center;
}
12> gordie..:[data-aspect-ratio] {
display: block;
max-width: 100%;
position: relative;
&:before {
content: '';
display: block;
}
> * {
display: block;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
}
[data-aspect-ratio="3:1"]:before {
padding-top: 33.33%;
}
[data-aspect-ratio="2:1"]:before {
padding-top: 50%;
}
[data-aspect-ratio="16:9"]:before {
padding-top: 56.25%;
}
[data-aspect-ratio="3:2"]:before {
padding-top: 66.66%;
}
[data-aspect-ratio="4:3"]:before {
padding-top: 75%;
}
[data-aspect-ratio="1:1"]:before {
padding-top: 100%;
}
[data-aspect-ratio="3:4"]:before {
padding-top: 133.33%;
}
[data-aspect-ratio="2:3"]:before {
padding-top: 150%;
}
[data-aspect-ratio="9:16"]:before {
padding-top: 177.77%;
}
[data-aspect-ratio="1:2"]:before {
padding-top: 200%;
}
[data-aspect-ratio="1:3"]:before {
padding-top: 300%;
}
仅供参考...您可以使用纯CSS在完全相同的行数中执行此操作(使用属性选择器)。您可以在CSS中使用[data-aspect-ratio]属性选择器。
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有