height
またはline-height
に一定の(したがって、自動で再利用できない)値を割り当てずに、背景画像とテキストを垂直方向に揃えるのに問題があります。実際に、たとえばa
element, with its text without assigning constant values to
line-height or
height`の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;
}
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
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で背景画像のサイズを取得するにはどうすればよいですか
background
cssをcenter
に使用すると、背景画像が常に中央に配置されます。問題は、コントロールの中央にテキストを配置することです。
em
単位を使用して行の高さを指定することを検討しましたか?垂直方向の中心を設定するには、何らかの高さを指定する必要があります。
または、em
を使用したくない場合は、display:table-cell
css。
上記の2つの例については、- http://cssdesk.com/3ZXrH -を確認してください。私が追加しました height:10em;
何が起こっているかをよりよく示すため。