移除行块级元素之间的空格(译文)_html/css_WEB-ITnose
Jun 24, 2016 am 11:22 AM
引言
我现在仍然记得作为一个IE6时代的初级开发者拼命的渴望IE拥有display: inline-block;这个属性。当我们想控制间距和填充在inline元素儿不用block and float的时候,inline-block这个属性是及其的有用。
然而,使用inline-block的时候有一个问题,视觉上两个元素之间会出现空白。
有很多办法移除这些恼人的空白
方法 0
唯一一个百分之百解决这个问题的方案是这样:不要在这些元素的源码之间出现空白。
<style type="text/css">ul,li{ margin: 0; padding: 0;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px;}</style><ul><li>Item</li><li>Item</li><li>Item</li></ul>
下面是效果:
当然了,这个维护起来比较麻烦,但他很实用、和逻辑,最重要的是比较可靠。
方法 1
最好的空白解决方案:设置行区块元素的父元素font-size: 0。因此如果你有一个
元素包裹了一堆
<style type="text/css">ul,li{ margin: 0; padding: 0;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px;}.inline-block-list{ font-size: 0;}.inline-block-list li{ font-size: 14px;}</style><ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li></ul>
这种情况一般情况下和方法 0是一样的结果,不过在IE8中,如果给行块级元素设置了position:absolute,这个会导致一个严重的问题,页面直接就是全部空白了。
方法 2
这种方法有点取巧的意思,但仍然可以用。在行块元素之间使用HTML注释,这个原理也是在元素源码之间没有空格
<style type="text/css">ul,li{ margin: 0; padding: 0;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px;}.inline-block-list{ font-size: 0;}.inline-block-list li{ font-size: 14px;}.three{ position: absolute; margin-left: 20px;}</style><ul class="inline-block-list"> <li>Item</li><!-- --><li>Item</li><!-- --><li class="three">Item</li></ul>
用一个单词形容这个。。。流氓(gross),两个单词形容这种方法。。。真流氓(really gross)。用三个单词。。。就是——你可以使用它(you get it)。他可以正常的显示。
方法 3
和方法 2类似,这个方法也有点令人遗憾。你可以利用行块元素的灵活性,用负的间距抵消空白
<style type="text/css">ul,li{ margin: 0; padding: 0;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px;}.inline-block-list li{ margin-left: -4px;}</style><ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li></ul>
这是一个很差劲的方案,你必须计算这个负间距是多少,有时候还会有不可预料的空白。所以,尽量避免使用这种来解决行块元素之间的空白。
方法 4
另外一个基于HTML的hack解决方案就是——只需要将闭合标签>放到下一个标签的开始:
<style type="text/css">ul,li{ margin: 0; padding: 0;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px;}.inline-block-list{ font-size: 0;}.inline-block-list li{ font-size: 14px;}</style><ul class="inline-block-list"> <li>Item</li ><li>Item</li ><li>Item</li></ul>
跟HTML注释这种方式相比,没有那么难看,但我知道,我可以移除空白,但没有去考虑这些空白为什么会存在。
所有的这些解决方案没有一个是完美的,唯一可以选择的在HTML中不要使用空格和缩进也是一个不太好的方案。这不是告诉你“注意使用什么方案”,因为inline-block仍然非常的有用,但当开发者使用它的时候知道如何处理空白非常的重要。
方法 my
我的方法是使用浮动,这个在IE7中也是ok的,前面的这些方法在IE系列中某些低版本可能会失效(inline-block不起作用)
<style type="text/css">ul,li{ margin: 0; padding: 0;}ul:after{ content: '.'; height: 0; visibility: hidden; display: block; clear: both;}li{ list-style: none; display: inline-block; border: 1px solid black; padding: 2px; float: left;}</style><ul class="inline-block-list"> <li>Item</li> <li>Item</li> <li>Item</li></ul>
LAST
author: 燕睿涛
email: ritoyan@163.com

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











공식 계정 웹 페이지의 캐싱 업데이트에 어려움 : 버전 업데이트 후 사용자 경험에 영향을 미치는 이전 캐시를 피하는 방법은 무엇입니까?

HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까?

웹 페이지의 PNG 이미지에 뇌졸중 효과를 효율적으로 추가하는 방법은 무엇입니까?

HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까?

& lt; iframe & gt; 꼬리표? 보안을 사용할 때 보안 고려 사항은 무엇입니까?

iframes 사용의 보안 영향은 무엇이며 어떻게 완화 할 수 있습니까?
