Zhang Xinxu-Xin Space-Xin Life [http://www.zhangxinxu.com] より
本当の意味でのインラインブロックでは、改行またはスペースで区切って表示されると、水平方向に表示される要素間に隙間が生じます。
非常に単純な例です。距離はここです~~
CSS を使用して非インラインブロックの水平要素をインラインブロックの水平要素に変更すると、次の問題も発生します。
ここをクリックしてください: 要素間のインラインブロック間隔のデモ
この種のパフォーマンスは、仕様に準拠しているべきものです (バグだと思う人がいたら、それは()ay()oy)。
ただし、この種のスペースはレイアウトや互換性の処理に影響を与える場合があります。どうすればよいでしょうか。 N 個のメソッドを以下に示します (追加歓迎)。
要素間の空白の原因はタグセグメント間の空白であるため、HTMLで空白を削除すると自然な空白がなくなります。コードの読みやすさを考慮すると、コードを 1 行で記述することは明らかにお勧めできません:
または:
または HTML コメントを使用します:
待ってください。
負のマージン値のサイズは、コンテキストのフォントとテキスト サイズに関連しています。対応する間隔のサイズ値は、以前の記事「display:inline- に基づくリスト レイアウト」のパート 6 の統計表で見つけることができます。ブロック":
たとえば、12 ピクセル サイズのコンテキストの場合、Arial フォントの margin
负值为-3
像素,Tahoma和Verdana就是-4
像素,而Geneva为-6
ピクセル。
外部環境の不確実性と最後の要素の余分な親マージン値のため、この方法は大規模な使用には適していません。
次のように処理します:
IE6/IE7 および Mengniu で開発された他のブラウザーとの下位互換性を保つために、最後のリスト タグの終了 (終了) タグは失われることができないことに注意してください。
HTML5 では次のことを直接行います:
まあ、少し奇妙に感じますが、大丈夫です。
ここをクリックしてください: インラインブロック要素の間隔を削除するための終了タグなしのデモ
次のようなコード:
この方法は、基本的に、ほとんどのブラウザーでインラインブロック要素間の間隔を解決できます (IE7 などのブラウザーでは、1 ピクセル間隔になる場合があります)。ただし、ブラウザである Chrome にはデフォルトで最小フォント サイズ制限があるため、互換性を考慮して次のコードも追加する必要があります:
您可以狠狠地点击这里(去年制作的一个简单demo):font-size:0清除换行符间隙demo
补充:根据小杜在评论中中的说法,目前Chrome浏览器已经取消了最小字体限制。因此,上面的-webkit-text-size-adjust:none;
代码估计时日不多了。
类似下面的代码:
.space { letter-spacing: -3px; } .space a { letter-spacing: 0; }
根据我去年的测试,该方法可以搞定基本上所有浏览器,包括吃“东鞋”、“西毒(胶囊)”、“南地(沟油)”、“北钙(三鹿)”的IE6/IE7浏览器,不过Opera浏览器下有蛋疼的问题:最小间距1像素,然后,letter-spacing
再小就还原了。
类似下面代码:
.space { word-spacing: -6px; } .space a { word-spacing: 0; }
一个是字符间距(letter-spacing
)一个是单词间距(word-spacing
),大同小异。据我测试,word-spacing
的负值只要大到一定程度,其兼容性上的差异就可以被忽略。因为,貌似,word-spacing
即使负值很大,也不会发生重叠。
您可以狠狠地点击这里:word-spacing与元素间距去除demo
与上面demo一样的效果,这里就不截图展示了。如果您使用Chrome浏览器,可能看到的是间距依旧存在。确实是有该问题,原因我是不清楚,不过我知道,可以添加display: table;
或display:inline-table;
让Chrome浏览器也变得乖巧。
.space { display: inline-table; word-spacing: -6px; }
下面展示的是YUI 3 CSS Grids 使用letter-spacing
和word-spacing
去除格栅单元见间隔方法(注意,其针对的是block水平的元素,因此对IE8-浏览器做了hack处理):
.yui3-g { letter-spacing: -0.31em; /* webkit */ *letter-spacing: normal; /* IE < 8 重置 */ word-spacing: -0.43em; /* IE < 8 && gecko */ } .yui3-u { display: inline-block; zoom: 1; *display: inline; /* IE < 8: 伪造 inline-block */ letter-spacing: normal; word-spacing: normal; vertical-align: top; }
以下是一个名叫RayM的人提供的方法:
li { display:inline-block; background: orange; padding:10px; word-spacing:0; } ul { width:100%; display:table; /* 调教webkit*/ word-spacing:-1em; } .nav li { *display:inline;}
也就是上面一系列CSS方法的组组合合。