gpt4 book ai didi

html - 将 svg 元素拉伸(stretch)到 flex 容器的全高

转载 作者:行者123 更新时间:2023-12-03 14:50:23 38 4
gpt4 key购买 nike

我有一个带有 display: flex 的容器.在两个 Angular 落,一个 svg 元素应该拉伸(stretch)到容器的整个高度。容器的高度取决于元素中有多少文本。
在 FF 和 Chrome 中它运行完美,但 IE 使 svg 始终为 150px 高度。我不能给 svg 一个固定的大小,因为如果文本变成多行并且元素增长,它应该与元素一起拉伸(stretch)。
我做了一个codepen here

.flag-header {
display: flex;
max-width: 80%;
position: relative;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner {
width: 30px;
}

.flag-header__corner-shape {
height: 100%;
width: 30px;
fill: #bf0b1c;
}
<div class="flag-header">
<div class="flag-header__corner">
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
</div>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
<div class="flag-header__corner">
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</svg>
</div>
</div>

最佳答案

不是答案。充其量是一个黑客。对这种意外行为的更多观察。也许这是一个错误。
移除 svg 包装器并移除 height: 100%从 svg 具有相同的效果。 (更接近我正在尝试调试的布局。很高兴知道包装器 OP 开始时没有任何区别,我可以避免不必要的元素。)

.flag-header {
display: flex;
max-width: 80%;
position: relative;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner-shape {
width: 30px;
fill: #bf0b1c;
}
<div class="flag-header">
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</svg>
</div>

通过反转可变高度元素的 padding 的 hack负 margins在变量元素和 svg 元素上。

.flag-header {
display: flex;
max-width: 80%;
position: relative;
border: 1px solid black;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
margin: -10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner-shape {
width: 30px;
fill: #bf0b1c;
margin: -10px 0;
}
<div class="flag-header">
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</svg>
</div>

如果没有任意 padding,黑客就会崩溃。和 margins .这意味着这些属性本身都不会导致问题,也不能自己解决问题,但他们可以通过共同努力来相互否定来解决问题......

.flag-header {
display: flex;
max-width: 80%;
position: relative;
border: 1px solid black;
}

.flag-header__headline {
background-color: #bf0b1c;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner-shape {
width: 30px;
fill: #bf0b1c;
}
<div class="flag-header">
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</svg>
</div>

转换为 grid不能解决任何问题。即使黑客停止工作。惹 heightwidth在 svg 元素中,有一些非常奇怪的结果。

.flag-header {
display: grid;
max-width: 80%;
position: relative;
grid-template-columns: 30px auto 30px;
border: 1px solid black;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner-shape {
fill: #bf0b1c;
}
<div class="flag-header">
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</svg>
</div>

转换为 table不能解决任何问题。 height svg 元素中的值无关紧要。移除高度会产生影响,尽管不是我们想要的。

.flag-header {
display: flex;
max-width: 80%;
position: relative;
border-collapse: collapse;
border-spacing: 0;
}

td {
padding: 0;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header__corner-shape {
width: 30px;
fill: #bf0b1c;
height: 100%;
}
<table class="flag-header">
<tbody>
<tr>
<td>
<svg class="flag-header__corner-shape" id="Layer_1" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="22.11 30 0 30 10 15 0 0 22.11 0 22.11 30"/>
</svg>
</td>
<td>
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
</td>
<td>
<svg class="flag-header__corner-shape" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22.11 30" preserveAspectRatio="none">
<polygon class="cls-1" points="0 30 22.11 30 12.11 15 22.11 0 0 0 0 30"/>
</td>
</svg>
</tr>
</tbody>
</table>

转换为伪元素并不能解决它。原始 SVG 的 base64 编码版本丢失了 CSS 样式。这可以通过引用 .svg 文件或内联 CSS 样式来解决。
感谢: https://stackoverflow.com/a/32046349/2578125

.flag-header {
display: flex;
max-width: 80%;
position: relative;
}

.flag-header__headline {
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
}

.flag-header::before,
.flag-header::after {
width: 30px;
fill: #bf0b1c;
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22.11 30' preserveAspectRatio='none'%3E%3Cpolygon points='22.11 30 0 30 10 15 0 0 22.11 0 22.11 30'/%3E%3C/svg%3E");
}

.flag-header::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22.11 30' preserveAspectRatio='none'%3E%3Cpolygon points='0 30 22.11 30 12.11 15 22.11 0 0 0 0 30'/%3E%3C/svg%3E");
}
<div class="flag-header">
<p class="flag-header__headline">sdfgsdgfsdgf sfasd fasdf asdfasdf</p>
</div>

试图将@Alexei Zababurin 的方法与 OP 的目标合并。对阿列克谢来说如此天才优雅的东西在这里变成了一个畸形的怪物……覆盖是甚至显示某些内容的唯一方法。
好吧,在我完全失去理智之前,是时候让这条白鲸 sleep 了。愿更聪明、更勇敢的人占上风。神速!

.flag-header {
max-width: 80%;
background-color: #bf0b1c;
padding: 10px 0;
color: white;
font: 900 24px/120% Verdana;
text-transform: uppercase;
position: relative;
z-index: 1;
overflow: hidden;
margin: 0 30px;
overflow: initial;
}

.flag-header::before,
.flag-header::after {
width: 30px;
fill: #bf0b1c;
display: inline-block;
margin: 0 0 0 -100%;
margin: 0 0 0 -30px;
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22.11 30' preserveAspectRatio='none'%3E%3Cpolygon points='22.11 30 0 30 10 15 0 0 22.11 0 22.11 30'/%3E%3C/svg%3E");
}

.flag-header::after {
margin: 0 -100% 0 0;
margin: 0 -30px 0 0;
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22.11 30' preserveAspectRatio='none'%3E%3Cpolygon points='0 30 22.11 30 12.11 15 22.11 0 0 0 0 30'/%3E%3C/svg%3E");
}
<div class="flag-header">sdfgsdgfsdgf sfasd fasdf asdfasdf
</div>

关于html - 将 svg 元素拉伸(stretch)到 flex 容器的全高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775427/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com