web-dev-qa-db-ja.com

背景画像とテキストを垂直方向に中央揃えにする方法は?

heightまたはline-heightに一定の(したがって、自動で再利用できない)値を割り当てずに、背景画像とテキストを垂直方向に揃えるのに問題があります。実際に、たとえばa element, with its text without assigning constant values toline-height orheight`のbg画像を垂直方向に中央揃えする方法があるかどうか疑問に思いました。

ライブデモはこちらから入手できます: http://cssdesk.com/8Jsx2

HTMLは次のとおりです。

<a class="">background-position: center</a>
<a class="contain">background-size: contain</a>
<a class="line-height">Constant line-height</a>

そしてここにCSSがあります:

a {
  display: block;
  margin: 10px;
  width: 200px;
  padding-left: 34px;
  font-size: 14px;  

  background: url('http://cdn1.iconfinder.com/data/icons/freeapplication/png/24x24/Thumbs%20up.png');  
  background-repeat: no-repeat;
  background-position: 5px center;

  border: 1px solid black;
}

/* I don't want to use constant line-height */
.line-height {
    line-height: 24px;
}

/* I don't want to use this, because I want my bg image's size to stay intact */
.contain {
    background-size: contain;   
}
18

2つの単語を使用して、背景をcssに合わせてみてください。

background-position: left center;

参照: http://www.w3schools.com/cssref/pr_background-position.asp

更新:

コメントから別のリンクを追加します。 Grant Winneyは、これがどのように機能するかについて、はるかに優れたインターフェイスを持つ別のサイトを共有しました。

https://developer.mozilla.org/en-US/docs/Web/CSS/background-position

32

CSSだけではこれは可能ではないと思います。背景画像は、含まれている要素の高さに影響を与えないためです。背景画像のサイズを検出する必要があり、JavaScriptが必要になります。 JavaScriptで要素の幅と高さを検出するには、背景画像からimgを作成する必要があります。

これは、JavaScriptとdisplay: tableを使用して目的の結果を達成するソリューションです。

作業例: http://jsbin.com/olozu/9/edit

CSS:

div {
    display: table; 
}

a {
    display: table-cell;
    vertical-align: middle;
    margin: 10px;
    width: 200px;
    padding-left: 34px;
    font-size: 14px;  

    background: url('http://cdn1.iconfinder.com/data/icons/freeapplication/png/24x24/Thumbs%20up.png');  
    background-repeat: no-repeat;
    background-position: 0 0;
    border: 1px solid black;
}

HTML:

<div><
    <a id="example-a">background-position: center</a>
</div>

JS:

$(function() {

    var imageSrc = $('#example-a')
                 .css('background-image')
                   .replace('url(', '')
                      .replace(')', '')
                      .replace("'", '')
                      .replace('"', '');   

    var image = '<img style="display: none;" src="' + imageSrc + ' />';

    $('div').append(image);

    var width = $('img').width(),
        height = $('img').height(); 

    // Set the height of the containing div to the height of the background image
    $('#example-a').height(height);

}); 

私の回答は次のソースに基づいています jQueryで背景画像のサイズを取得するにはどうすればよいですか

2
littledynamo

background cssをcenterに使用すると、背景画像が常に中央に配置されます。問題は、コントロールの中央にテキストを配置することです。

em単位を使用して行の高さを指定することを検討しましたか?垂直方向の中心を設定するには、何らかの高さを指定する必要があります。

または、emを使用したくない場合は、display:table-cell css。

上記の2つの例については、- http://cssdesk.com/3ZXrH -を確認してください。私が追加しました height:10em;何が起こっているかをよりよく示すため。

1
Kami