我无法将背景图像与文本垂直对齐,而没有为height
或line-height
指定常量(因此,不是自动和可重复使用的)值。我想知道是否有一种方法可以垂直居中对齐bg图像,例如a
元素, with its text without assigning constant values to
行高or
高度?
现场演示可在此处获取: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;
}
答案 0 :(得分:31)
尝试使用两个单词将背景与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
答案 1 :(得分:2)
我不认为单独使用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);
});
答案 2 :(得分:1)
通过使用background
css到center
背景图片,您将始终居中。问题是文本与控件中间对齐。
您是否考虑过使用em
单位来指定行高?您需要指定某种高度以允许垂直中心发生。
或者,如果您不想使用em
,可以尝试display:table-cell
css。
检查 - http://cssdesk.com/3ZXrH - 以上两个例子。我添加了height:10em;
以更好地展示正在发生的事情。