单行文字两端对齐:css方式和css+JS方式

无论移动端还是PC端都会有这样的列表,网上查了一下,实现的方式都不完美。有时候UI那边相差1px都会给你逼逼逼。所以还是折腾一下吧。
我们都知道text-align:justify,但是它不处理块内的最后一行文本,所以,为了实现该功能,又不想增加额外的标签,最终用了伪类 :after。
仅仅这样是不行的,文字中需要空格,感觉这样麻烦。而且如果是动态生成的HTML就不行了。所以,想到了用letter-spacing。字数不同,letter-spacing的值肯定也不同。
letter-spacing的值计算方式如下:
需要增加的空隙长度=(4-3)/2 也就是 (最大文本个数-当前文本个数)/(当前文本个数-1)
纯CSS实现
<!doctype html> <html> <head> <meta charset="utf-8"> <title>文字两端对齐</title> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"/> <style> /* * 单行文字两端对齐 * .text-justify {width:字数em 4em} * letter-spacing: 最大栏目字数 - 当前行的字数 / 当前行的字数 - 1 */ body,p {margin:0;padding:0;} .text-justify {white-space:nowrap;text-align:justify;} .data-list {margin:20px;padding:10px;border-radius:5px;border:1px solid #ccc;background-color:#f8f8f8;} .data-list .item {padding:4px 0;overflow:hidden;line-height:1.3;font-size:14px;} .data-list .flag {width:4em;float:left;color:#999;} .data-list .text {margin-left:6em;display:block;color:#444;} .data-list .text-justify-w2 {letter-spacing:2em;} /* 4-2 / 2-1 = 2em*/ .data-list .text-justify-w3 {letter-spacing:.5em;} /* 4-3 / 3-1 = 0.5em*/ </style> </head> <body> <div class="data-list"> <p class="item"> <span class="flag text-justify text-justify-w2">订单</span> <span class="text">20165464646445645</span> </p> <p class="item"> <span class="flag text-justify">生成时间</span> <span class="text">2016-05-16 13:52:23</span> </p> <p class="item"> <span class="flag text-justify text-justify-w3">收货人</span> <span class="text">小小蓝</span> </p> <p class="item"> <span class="flag text-justify">联系电话</span> <span class="text">13685474563</span> </p> <p class="item"> <span class="flag text-justify text-justify-w4">联系地址</span> <span class="text">广东省 广州市 萝岗区 视联科技园C3栋视联科技园C3栋视联科技园C3栋</span> </p> <p class="item"> <span class="flag text-justify text-justify-w4">物流信息</span> <span class="text"></span> </p> </div> </body> </html>
如果页面中比较多类型的东东,字数又不确定,不想每次都计算letter-spacing,可以用JS处理。
function textJustify(elem) { var lengths = []; elem.each(function () { lengths.push($(this).text().length); }); if (!lengths.length) return; for (var i = 0, smax = lengths[0], len = lengths.length; i < len; i++) { if (lengths[i] > smax) { smax = lengths[i]; } } for (var i = 0, len = lengths.length; i < len; i++) { var currlen = lengths[i]; if (currlen == smax) { continue; } elem.eq(i).css({"letter-spacing": ((smax - currlen) / (currlen - 1)) + "em"}); } } //调用 textJustify($(".text-justify"));
浙公网安备 33010602011771号