如何垂直居中对齐背景图像与文本?

时间:2012-11-17 23:23:27

标签: css vertical-alignment

我无法将背景图像与文本垂直对齐,而没有为heightline-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;   
}

3 个答案:

答案 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);

}); 

我的答案基于以下来源How do I get background image size in jQuery?

答案 2 :(得分:1)

通过使用background css到center背景图片,您将始终居中。问题是文本与控件中间对齐。

您是否考虑过使用em单位来指定行高?您需要指定某种高度以允许垂直中心发生。

或者,如果您不想使用em,可以尝试display:table-cell css。

检查 - http://cssdesk.com/3ZXrH - 以上两个例子。我添加了height:10em;以更好地展示正在发生的事情。