私はCSS/JSの中にsvgのパス/テキストの集合体を垂直に集中させようとしていました。私がここで見つけた解決策のどれもこれまでに働いたことはありません。私は複数のコンテンツを持っているとは思えませんが、<テキスト>、<円>、< rect>を持っています。svgの内容を垂直にセンタリングする部分
高さは可変なので、私は2つの方法を考えました: 1)50%で変換します。これは、私がこれまでに見つけたものから、あなたがsvgからコンテンツのサブセットを変換することはできないので、うまくいきません。 < g>タグは有望だったが運がなかった。
2)私の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')を与えなければなりません。 –