20

我无法将背景图像与文本垂直对齐,而没有为heightor分配常量(因此,不是自动和可重用)值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;   
}
4

3 回答 3

40

尝试使用两个词将您的背景与 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

于 2013-12-12T20:46:53.060 回答
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);

}); 

我的答案基于以下来源如何在 jQuery 中获取背景图像大小?

于 2012-11-17T23:55:58.277 回答
1

通过将backgroundcss 用于center背景图像,您将始终居中。问题是文本与控件中间的对齐方式。

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

或者,如果你不想使用em,你可以试试display:table-cellcss。

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

于 2012-11-17T23:42:13.167 回答