作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在以下示例中,圆适应网格宽度并保持其长宽比。
随着容器宽度的缩小,圆圈也随之缩小...
但是,当高度小于宽度时(第二个框),圆不会收缩,而是重叠在网格外部
有没有办法在保持宽高比的同时使其适应高度?
.container {
display: grid;
background-color: greenyellow;
margin: 5px;
min-height: 10px;
min-width: 10px;
}
.portrait {
max-height: 100px;
max-width: 200px;
}
.landscape {
max-height: 200px;
max-width: 100px;
}
.aspect-ratio {
grid-column: 1;
grid-row: 1;
background-color: deeppink;
border-radius: 50%;
align-self: center;
justify-self: center;
}
<div class="container landscape">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
<div class="container portrait">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
最佳答案
经过一段时间摆弄这个问题后,我发现这不是网格布局的问题。
由于您从未为SVG定义高度/最大高度或宽度/最大宽度,因此要计算的是width:auto
和height:auto
注意:我调出 max-height/max-width ,因为这些优先于宽度/高度值。
那么,为什么现在您的风景布局不能工作,而肖像布局却不能工作呢?
因为宽度是您高度的“重中之重”。
And that's why, in block layout, an auto height is based on the total height of descendants and an auto width is based on the containing block width.
width
,并从其后代中获取
height
。
If the ‘viewBox’ on the ‘svg’ element is correctly specified:
- let viewbox be the viewbox defined by the ‘viewBox’ attribute on the ‘svg’ element
- return viewbox.width / viewbox.height
height=width
width
或
margin
。
width:50%
或
margin: 0 25%
。
height
不受限制,则可以避免为每个比例设置CSS规则,因为您可以为SVG和容器定义
width
,让元素调整
height
以保持宽高比。
height
和
width
集合容器中,则我还添加了最后一个示例。
.container {
display: grid;
background-color: greenyellow;
margin: 5px;
min-height: 10px;
min-width: 10px;
}
.portrait {
max-height: 100px;
max-width: 200px;
}
/* Add 25% margin left and right to center the image OR set the image width to 50% */
.portrait>.aspect-ratio {
margin: 0 25%;
/*
or
width:50%;
*/
}
.landscape {
max-height: 200px;
max-width: 100px;
}
.aspect-ratio {
grid-column: 1;
grid-row: 1;
background-color: deeppink;
border-radius: 50%;
align-self: center;
justify-self: center;
}
/* Set fixed max-height and max-width rule (33% proportion) */
.portrait-1-3 {
max-height: 100px;
max-width: 300px;
}
/* Align image with the new proportion */
.portrait-1-3>.aspect-ratio {
margin: 0 33.33%;
/*
or
width:33.3%;
*/
}
/* Removed max-height and let the container adjust the height according to the max-width rule and the proportion set */
.portrait-any-height {
max-width: 400px;
}
/* Height will be adjusted through the width/margin defined here, so 10% width will correspond to 40px of height (10%*400px)*(aspect ratio=1)*/
.portrait-any-height>.aspect-ratio {
width:10%;
}
/* Set fixed max-height and max-width rule (proportion doesn't matter) */
.portrait-squeezed {
max-height: 100px;
max-width: 300px;
}
/* Make sure SVG complies with the the given max with and height (squeezing your svg) */
.portrait-squeezed>.aspect-ratio {
max-height: inherit;
max-width: inherit;
}
<div class="container landscape">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
<div class="container portrait">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
<div class="container portrait-1-3">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
<div class="container portrait-any-height">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
<div class="container portrait-squeezed">
<svg class="aspect-ratio" viewBox="0 0 1 1"></svg>
</div>
关于html - SVG圆应适应CSS网格高度而不会重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666117/
我是一名优秀的程序员,十分优秀!