2017-06-25 9 views
4

ロゴのヘッダーに使用しているSVGがあります。フレックスボックスがたくさんあります。以下のような何か...CSS - 親divが子SVGを超えて拡張する

HTML

<header id="header"> 

    ... stuff ... 

    <div class="logo"> 
     <svg class="logo-color"> 
      <title>Title</title> 
      <use xlink:href="/images/svgs.svg#logo-color-bt"></use> 
     </svg> 
    </div> <!-- /.logo --> 

    ... stuff ... 

</header> <!-- /#header --> 

CSS(SASS)

#header { 

    display: flex; 
    flex-direction: row; 

    align-items: center; 

    height: 50px; 

    ... other css... 

    .logo { 
     flex: 1; 

     display: flex; 
     flex-direction: row; 

     align-items: center; 
     justify-content: center; 

     svg.logo-color { 
      display: block; 
      height: 32px; 

      cursor: pointer; 
     } 
    } 
} 

すべてがうまく表示され、私が欲しいものにSVGのサイズを変更することができます。しかし!マウスをロゴの上に置くと、カーソルはまだcursorというSVGの外にあります(しかし、.logo divの全体ではありません)。

全体.logo DIV(緑色の矩形がSVGである)...

Entire logo div

svg.logo-color要素...

svg.logo-color element

SVG ...

SVG element

2番目のスクリーンショットは、カーソルがpointerと表示される領域を示しています。

私が欲しいのは、内に描かれたSVGに合わせてsvg.logo-colorになることです。問題は、SVG画像の高さ(したがって幅)が変わる可能性があるため、幅のハードコード値を入れることができないということです。

不明な点がある場合は教えてください。それを煮詰めるには:私は、緑の矩形内にpointerのカーソルを置き、それ以外の場合は普通の矢印だけを必要とします。

EDIT#1 - (追加情報)

MullerAが巧みに指摘したように、私はuse要素にcursor: pointer;を設定することができます。しかし、ページのサイズを小さくすると、望ましくない"パディング"がフローの問題を引き起こします。可能であれば、私はそれをすべて一緒に取り除きたいと思っています。

答えて

1

SVGのデフォルトの幅は「300px」です。なぜなら、それが何であるべきか他の考え方を与えていないからです。

ロゴと同じサイズにしたい場合は、インラインSVG(つまりsvg.logo-color)に適切なviewBox属性を付けます。

他のSVGファイルを含めないでください。だから我々は要素が#logo-color-btであるということはない。 <symbol>の場合は、viewBoxを使用できるだけです。

+0

それはそれでした。外部ファイルは ''タグに' viewBox'を持っていますが、それを ''タグのHTMLに追加するのはそのトリックでした。それをHTMLに含める必要はありませんが、結果はまさに私が探しているものです。ありがとう! – Birrel

+0

HTMLの ''タグに 'viewBox'属性を加えたことで、ウィンドウのサイズ変更がはるかにスムーズになるという奇妙な副作用があります。それは非常に不安定で遅れていた前に、しかし今はかなりいいです。他の変更が行われた可能性もありますが、それ以降は何もしていないと思います。 – Birrel

1

cursor: pointerは、use要素にのみ適用できます。

+0

賢い、私はそれを考えなかった。それはうまくいくかもしれませんが、デザインは応答性があり、ヘッダーの幅が十分に小さくなると、不要な「パディング」*がフローの問題を引き起こします。私はあなたのソリューションがカーソルの問題では機能すると思うが、後者では問題ないと思う。 – Birrel

+0

'use'要素の幅を100%に設定して、親divの全幅に及んでパディングを排除することができます。これは余分な幅を追加します。 – MullerA

+0

興味深い開発... '' svg.logo-color'を 'width:100%;'に設定しました。これはうまく動作します。しかし! 'use'が' cursor:pointer; 'を持つように設定すると、SVGの塗りつぶし部分の上にポインタが表示されます。 SVGの途中であっても、穴や透明部分はデフォルトの矢印に戻ります。ロゴは主に(完全に)テキストなので、これは問題です。ニースしよう! – Birrel

関連する問題