• 豌豆资源网
  • 开引网企业服务
  • 服务外包网
  • html/css解决inline-block内联元素间隙的多种方法总汇

    display有几种属性:
    inline是内联对象,比如<a/> 、 <span/>标签等,可以“堆在一起”显示,宽高由内容决定,不能设置;
    block是块对象,比如<div/>、<p/>标签等,要占一整行,但是宽高可以自定义;
    为了弥补inline和block的不足,又扩充了inline-block属性;inline-blcok可以将对象呈递为内联对象,而内容作为块对象呈递。

    但是display:inline-block;在IE6/7中不兼容:解决办法:

    1 display:inline-block;*dsiplay:inline;*zoom:1;

     

     

    为什么会有间隙

    inline元素之间本身就存在间隙,是不是这个间隙引起的呢?最终原因是由于inline元素中间的空白符引起的,解决办法:就是去掉空白符。

     

    解决方案

    1、改变书写结构

     1 <ul>
     2     <li>item1</li><li>item2</li><li>item3</li><li>item4</li><li>item5</li>
     3 </ul>
     4 <ul>
     5     <li>
     6         item1</li><li>
     7         item2</li><li>
     8         item3</li><li>
     9         item4</li><li>
    10         item5</li>
    11 </ul>
    12 <ul>
    13     <li>item1</li
    14     ><li>item2</li
    15     ><li>item3</li
    16     ><li>item4</li
    17     ><li>item5</li>
    18 </ul>
    19 <ul>
    20     <li>item1</li><!--
    21   --><li>item2</li><!--
    22   --><li>item3</li><!--
    23   --><li>item4</li><!--
    24   --><li>item5</li>
    25 </ul>

     

    以上几种均可以完美的达到去除间隙的作用。但是,从代码的可读性上看,或多或少有一些不足。如果使用到了打包工具或者自写脚本,在上线前将响应HTML代码打包成一行,即可。

     

    2、使用font-size:0

    1 .space {
    2     font-size: 0;
    3    -webkit-text-size-adjust:none;//兼容Chrome
    4 }
    5 .space a {
    6     font-size: 12px;
    7 }

     

    基本上可以解决大部分浏览器下inline-block元素之间的间距(IE7等浏览器有时候会有1像素的间距)。不过有个浏览器,就是Chrome, 其默认有最小字体大小限制,因为,考虑到兼容性,我们还需要添加: -webkit-text-size-adjust:none;

     

    3、使用margin负值

    1 @media screen and (-webkit-min-device-pixel-ratio:0) { div { margin-right: -8px; } }/*谷歌 HACK 方法*/

     

    除谷歌外的其他浏览器间隙是4px,使用margin:-4px; 唯独谷歌是 双倍的8px,需要给谷歌单独设置 margin:-8px; 

     

    4、使用letter-spacing或word-spacing

    1 .space {
    2     letter-spacing: -3px;
    3 }
    4 .space a {
    5     letter-spacing: 0;
    6 }

     

    该方法基本可以搞定所有浏览器 ,不过Opera浏览器下有蛋疼的问题:最小间距1像素,然后,letter-spacing再小就还原了。

    1 .space {
    2     word-spacing: -6px;
    3    display: inline-table;/*兼容Chrome*/
    4 }
    5 .space a {
    6     word-spacing: 0;
    7 }

     

    word-spacing的负值只要大到一定程度,其兼容性上的差异就可以被忽略。因为,貌似,word-spacing即使负值很大,也不会发生重叠。

     

    5、丢失结束标签

    1 <ul>
    2     <li>item1
    3     <li>item2
    4     <li>item3
    5     <li>item4
    6     <li>item5
    7 </ul>

     

    此方法虽然可以解决此问题,但是在Doctype为xhtml时将报错,所有方法是否适用须视情况而定。

     

    6、W3C推荐 导航方法(兼容IE6等)

     1 <style type="text/css">
     2         body,div,h1,ul,li{margin:0; padding:0;}
     3         ul,li{list-style:none;}
     4         a{text-decoration: none;}
     5         .nav a{background: red;color:#fff;padding: 10px 20px;margin-right: -4px;line-height: 40px;*margin-right: -8px;/* ie 下面也是 -8px*/}
     6         @media screen and (-webkit-min-device-pixel-ratio:0) { .nav a { margin-right: -8px; } }/*谷歌 HACK 方法*/
     7         .nav ul li{display:inline;}
     8         .nav a:hover{text-decoration: underline;}
     9 </style>
    10 <div class="nav">
    11         <ul>
    12             <li><a href="#">首页</a></li>
    13             <li><a href="#">服装城</a></li>
    14             <li><a href="#">食品</a></li>
    15             <li><a href="#">团购</a></li>
    16             <li><a href="#">夺宝岛</a></li>
    17             <li><a href="#">闪购</a></li>
    18             <li><a href="#">金融</a></li>
    19         </ul>
    20 </div>

    办公资源网址导航 https://www.wode007.com

    不使用hack方法的话,每个li紧挨着即可,不要留空格等间隙。

     

    7、YUI 3 CSS Grids的处理

     1 .yui3-g {
     2     letter-spacing: -0.31em; /* webkit */
     3     *letter-spacing: normal; /* IE < 8 重置 */
     4     word-spacing: -0.43em; /* IE < 8 && gecko */
     5 }
     6 .yui3-u {
     7     display: inline-block;
     8     zoom: 1; *display: inline; /* IE < 8: 伪造 inline-block */
     9     letter-spacing: normal;
    10     word-spacing: normal;
    11     vertical-align: top;
    12 }

     

     

    8、其他方法

     1 li {
     2     display:inline-block;
     3     background: orange;
     4     padding:10px;
     5     word-spacing:0;
     6     }
     7 ul {
     8     width:100%;
     9     display:table;  /* 调教webkit*/
    10     word-spacing:-1em;
    11 }
    12 
    13 .nav li { *display:inline;}

     

     

    结语

    其他去除间距的方法肯定还有,欢迎大家通过评论方式进行补充。

    posted @ 2020-06-02 11:06  前端一点红  阅读(929)  评论(0编辑  收藏  举报
  • 乐游资源网
  • 热爱资源网
  • 灵活用工代发薪平台
  • 企服知识
  • 355软件知识