我一直試圖集中svg路徑/文本垂直CSS/JS中的一段時間沒有運氣。我在這裏找到的解決方案都沒有工作到目前爲止。我有多個< text>,< circle>,< rect>,儘管我不認爲內容的類型真的很重要。垂直居中svg內容的一部分
高度是可變的,所以我想到了2種方法: 1)通過50%進行轉換。這是行不通的,因爲你無法從svg中轉換內容的子集,從我迄今發現的內容。 g>標籤很有希望,但我沒有運氣。
2)我的第二個想法是一旦加載內容就通過javascript調整掩碼。這同樣不起作用。
所有的代碼是在代碼筆,在這裏複製,以及:https://codepen.io/anon/pen/MmdWXB
HTML:
<div class="mask_group" id="mask_container">
<div class="text">
<svg>
<defs>
<mask id="mask" x="0" y="0" width="100%" height="100%" >
<rect class="cutout label" x="0" y="0" width="100%" height="100%"/>
<text class="label normal_font_weight" y="1em" dy="0em" x="50%">A</text>
<text class="label normal_font_weight" y="3em" dy="0em" x="50%">B</text>
<line class="label" x1="47%" y1="4.6em" x2="53%" y2="4.6em" style="stroke:rgb(255,0,0);stroke-width:1.5" />
<text class="label" y="7em" dy="0em" x="50%">C</text>
<text class="label" y="9em" id="final_text" dy="0em" x="50%">D</text>
</mask>
</defs>
<rect id="base" x="0" y="0" width="100%" height="100%"/>
</svg>
</div>
</div>
<div style="background-color:blue; width: 100%; height: 100%">
</div>
CSS:
html,body {
height: 100%;
}
.text {
position: relative;
/*top: 0;
left: 0;*/
width: 100%;
height: 100%;
margin-left: 0%;
/*z-index: 11; */
}
.mask_group {
position: fixed;
width: 100%;
height: 100%;
z-index: 10;
}
svg {
position: absolute;
width: 100%;
height: inherit;
}
svg text {
text-anchor: middle;
}
.cutout {
fill: white;
}
svg #base {
fill: #051E2A; /*#1F5773;*/
-webkit-mask: url(#mask);
mask: url(#mask);
}
/*Unused*/
.vert_center {
position: relative;
margin-top: 50%;
transform: translateY(-50%);
}
JS:
function body_loaded() {
var final_text = document.getElementById("final_text");
var position = final_text.getBoundingClientRect();
var bottom = position.bottom;
var mask_container = document.getElementById("mask_container");
var mask_position = mask_container.getBoundingClientRect();
var mask_height = mask_position.height;
var origin_y = (mask_height - bottom)/2;
alert(origin_y);
var mask = document.getElementById("mask");
mask.style.y = origin_y;
}
提前致謝!
SVG變換是不是CSS變換。它只需要參考由「視口」建立的「用戶空間」座標系統的無量綱數字。閱讀[這裏](https://www.w3.org/TR/SVG11/coords.html)。 – ccprog
您的SVG無效.XML''沒有結束標記。 –
SVG沒有像HTML那樣的自動佈局。如果你想讓你的文本對象在矩形的中心,你必須給它們適當的座標('x'和'y')。 –