2013-03-18 8 views
10

埋め込まれたSVG三角形を作成しようとしていますが、これはに配置されます。div内にsvgをネストする

これを達成するには、divにsvgをラップし、divを適切に配置します。ただし、svgは常にdivの外側にレンダリングされます。 div内でレンダリングされるsvg要素を取得するにはどうすればよいですか?

私が原因スクリプティングとテンプレート制約に <object>または <embed>タグを使用することはできません

黒三角は内部でなければなりませんサンプルHTML

<div id="container"> 
    <div id="inner_container"> 
     <svg height="6" width="6"> 
      <path d="M 0 6 L 3 0 L 6 6 L 0 6"/> 
     </svg> 
    </div> 
</div> 

そしてCSS

#container {width:100px; height:25px; border:1px solid green;} 
#container #inner_container {width:6px; height:6px; border:1px solid red;} 
#inner_container svg path {fill:black;} 

赤い矩形が外側にレンダリングされる

JsFiddle

答えて

9

変更CSSセレクタでそれを参照してください、パスは単に要素ではありません描画されるだけsvg{...}を書いて、ここでfloat:left

を追加します。

svg {fill:black; float:left} 

DEMO

+0

浮動小数点 "Svg"がトリックします。しかし、「塗りつぶし」は「パス」の属性なので、パスセレクタに残しておきます。 – RedBaron

+0

誰かが説明してくれますか?なぜ*元のブレークですか?私は全体を通して6から60に変更すると問題が消えてしまうので、小さなdivs/svgsの場合にのみ問題になるようです。非常に矛盾した動作です。 – joeytwiddle

2

これを試してみてください:彼らは要素 'を含む' よう

#container { float: left; width: 100px; height: 25px; border: 1px solid green; } 
#container #inner_container { float: left; width: 6px; height: 6px; border: 1px solid red; } 
#inner_container svg { display: block; float: left; } 

私はそこにいくつかの山車を追加します。これを行うためのより良い、よりエレガントな方法がありますが、それはうまくいくはずです。

これが役に立ちます。 Mikey。

+0

ちょうど好奇心が強い、あなたは "よりエレガントな方法"を解明できますか?最近divsの中に私のsvgを収めようとするのに苦労しました – RedBaron

+0

これは必ずしもそうである必要はないので、すべての要素をフローティングするのは最良の方法ではありませんが、このように私は何が起こっているのか分かりませんが、通常、それらが自分自身で崩壊するのを止める要素を浮かべるのは良い速やかな修正です。希望は意味をなさないでしょうか?また、構造によっては、すべてのものがレイアウト上の問題を引き起こす可能性があります。 –

+0

うん、すべてのものが災害になる – RedBaron

0

svg要素の名前空間を指定していないという問題があります。これはどのように動作します:

<div id="container"> 
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 100 100"> 
    <path d="M 0 6 L 3 0 L 6 6 L 0 6"/> 
    </svg> 
</div> 
関連する問題