前端实现图标和文字对齐有什么解决方法?我的“绝对对齐”的意思是不管是安卓设备和ios设备看着都是对齐的,最好也能实现pc上的对齐。
demo:https://jsfiddle.net/nzfbzxw6/
虽然我通过设置
vertical-align: -3%;
实现的对齐(在chrome上看着好好的),如果我要在手机设备上安卓,就要是另一个数值。
ios可能又要设个数值(而且不同的苹果机型也不一样)。
对这种问题有什么更好的解决方法吗?
-------------------------- 一个调皮的分割线 ----------------------------------------
各位前辈的方法我都试了一下,发现在安卓手机上都不好使,图片居中是没有问题的,但是文字(尤其是小于12px下的)却无法居中,这可能是安卓手机bug吧...
(第一个box盒子,第二个display:inline-block,第三个background center)
PHPz2017-04-17 14:20:50
移动端(安卓设备、ios设备)图标文字垂直居中对齐的最佳常用解决方案是采用弹性盒子布局,可以快捷有效实现子元素未知高度绝对垂直居中对齐。PC端考虑到兼容性的问题,一般不推荐使用弹性盒子,依旧只能采用传统方式(vertical-align: middle;或者position定位)实现图标文字对齐。
<!--html-->
<p class="close-btn">
<i class="icon-close-hmc"></i>
<p class="close-txt">
关闭
</p>
</p>
//css
<style type="text/css">
* {
padding: 0;
margin: 0;
}
.close-btn {
display: -webkit-box;
display: box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
box-align: center;
-webkit-align-items: center;
align-items: center;
background-color: #00BB9C;
width: 80px;
height: 40px;
margin: 30px auto;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
.icon-close-hmc {
display: block;
background-position: center;
background-repeat: no-repeat;
background-size: contain;
background-image: url("http://s1.mi.com/m/images/20151028/top-x.png");
width: 16px;
height: 16px;
margin: 0 10px;
}
.close-txt {
font-size: 16px;
color: #FFFFFF;
}
</style>
大家讲道理2017-04-17 14:20:50
我一般使用的方法:
(1)使用display:table,没有什么兼容性问题,个人觉得还是比较好用的。
<p class="close-btn">
<p class="img-responsive">
<img src="http://s1.mi.com/m/images/20151028/top-x.png">
</p>
<p class="close">关闭</p>
</p>
*{padding:0;margin:0;}
.close-btn{background:red;color:#fff;height:45px;width:120px;border-radius:5px;text-align:center;display: table}
.img-responsive , .close{display: table-cell;vertical-align: middle}
随意改变close-btn的高度,也能够居中。
(2)绝对定位
<p class="close-btn">
<p class="img-responsive">
<img src="http://s1.mi.com/m/images/20151028/top-x.png">
</p>
<p class="close">关闭</p>
</p>
*{padding:0;margin:0;}
.close-btn{background:red;color:#fff;height:45px;width:120px;border-radius:5px;text-align:center;position: relative}
.img-responsive , .close{position: absolute; top:50%; transform: translate(0, -50%);}
.close { margin-left: 30px}
也可以实现绝对的居中对齐。
巴扎黑2017-04-17 14:20:50
实际上不管是line-height
还是用position
去定位,不管你display
用的什么,不同机型的显示效果都会不一样。
水平上的差距几乎没有,垂直方向上的效果会多种多样。
遇到这种ui,我的做法是把图片写在::before
里,用margin
去定位,这样不管右侧的文案是否绝对的垂直居中,但至少图是相对文案去定位的,是和文案对齐的。
阿神2017-04-17 14:20:50
说下我自己常用的两种办法(我也一直没什么太好的办法):
第一种:
//HTML 部分
<p class="close-btn">关闭</p>
//CSS 部分
.close-btn {
color:#fff;
height:45px;
line-height: 45px;
width:120px;
border-radius:5px;
text-align:center;
background: url('http://s1.mi.com/m/images/20151028/top-x.png') red no-repeat 20px center;
background-size: 20px 20px;
}
这种方法是直接把图片设置为背景。。然后背景居中。。
第二种:
这种办法比较粗暴。。直接把图片绝对定位,然后居中
// HTML 部分
<p class="close-btn">
<img src="http://s1.mi.com/m/images/20151028/top-x.png" width="20px">
关闭
</p>
// CSS 部分
.close-btn {
position: relative;
background:red;
color:#fff;
height:45px;
line-height: 45px;
width:120px;
border-radius:5px;
text-align:center;
}
img {
position: absolute;
top: 0;
bottom: 0;
left: 0;
margin: auto 20px;
}
不知道有没有更好的办法了。。
怪我咯2017-04-17 14:20:50
规定好字号,及图片大小,用相对定位 或者 作为背景图片,下面是相对定位:
<p class="close-btn">
<img src="http://s1.mi.com/m/images/20151028/top-x.png">
<span class="text-close">
关闭
</span>
</p>
* {
padding:0;
margin:0;
font-size:14px;
}
.close-btn {
background:red;
color:#fff;
height:45px;
line-height:45px;
width:120px;
border-radius:5px;
text-align:center;
}
img {
height: 14px;
position: relative;
top: 2px;
left: 0;
}
ringa_lee2017-04-17 14:20:50
*{padding:0;margin:0;}
.close-btn{display:table; background:red;color:#fff;height:45px;line-height:45px;width:120px;border-radius:5px;}
.close-btn >p{display: table-cell;vertical-align: middle;width: 40%; padding: 0 4px;}
.img-responsive{text-align: right; }
.img-responsive img{vertical-align: middle;width:18px;height:auto;}
.close-des{text-align: left}
以上是针对楼主的demo的css调整,布局方面:<p class="close-des">关闭</p>给关闭多加一个p标签,这样可以达到楼主想要的结果,不管外面怎变变,图片和文字都是对齐的。
ps:如果要做两个元素绝对对齐,可以优先考虑display:table;(父级) display: table-cell;(子级),这两个真可以算是最佳搭配,而且屡试不爽。vertical-align: middle;只在display:inline;(行内元素起作用)