ホームページ  >  記事  >  ウェブフロントエンド  >  [Transfer] インラインブロック要素間のスペースを削除する N 個の方法

[Transfer] インラインブロック要素間のスペースを削除する N 個の方法

WBOY
WBOYオリジナル
2016-09-11 11:19:501074ブラウズ

Zhang Xinxu-Xin Space-Xin Life [http://www.zhangxinxu.com] より

1. 現象の説明

本当の意味でのインラインブロックでは、改行またはスペースで区切って表示されると、水平方向に表示される要素間に隙間が生じます。

非常に単純な例です。
リーリー

距離はここです~~
[Transfer] インラインブロック要素間のスペースを削除する N 個の方法

CSS を使用して非インラインブロックの水平要素をインラインブロックの水平要素に変更すると、次の問題も発生します。

リーリー

inline-block水平元素间的间距示意 张鑫旭-鑫空间-鑫生活

ここをクリックしてください: 要素間のインラインブロック間隔のデモ

この種のパフォーマンスは、仕様に準拠しているべきものです (バグだと思う人がいたら、それは()ay()oy)。

ただし、この種のスペースはレイアウトや互換性の処理に影響を与える場合があります。どうすればよいでしょうか。 N 個のメソッドを以下に示します (追加歓迎)。

2.スペースを削除する方法

要素間の空白の原因はタグセグメント間の空白であるため、HTMLで空白を削除すると自然な空白がなくなります。コードの読みやすさを考慮すると、コードを 1 行で記述することは明らかにお勧めできません:

リーリー

または:

リーリー

または HTML コメントを使用します:

リーリー

待ってください。

3. 負のマージン値を使用する

リーリー

負のマージン値のサイズは、コンテキストのフォントとテキスト サイズに関連しています。対応する間隔のサイズ値は、以前の記事「display:inline- に基づくリスト レイアウト」のパート 6 の統計表で見つけることができます。ブロック":
[Transfer] インラインブロック要素間のスペースを削除する N 個の方法

たとえば、12 ピクセル サイズのコンテキストの場合、Arial フォントの margin负值为-3像素,Tahoma和Verdana就是-4像素,而Geneva为-6 ピクセル。

外部環境の不確実性と最後の要素の余分な親マージン値のため、この方法は大規模な使用には適していません。

4. クローズドラベルにカプセルを食べさせます

次のように処理します:

リーリー

IE6/IE7 および Mengniu で開発された他のブラウザーとの下位互換性を保つために、最後のリスト タグの終了 (終了) タグは失われることができないことに注意してください。

HTML5 では次のことを直接行います:

リーリー

まあ、少し奇妙に感じますが、大丈夫です。

ここをクリックしてください: インラインブロック要素の間隔を削除するための終了タグなしのデモ

无闭合标签与inline-block水平元素间距的去除 张鑫旭-鑫空间-鑫生活

5. フォントサイズ:0 を使用します

次のようなコード:

リーリー

この方法は、基本的に、ほとんどのブラウザーでインラインブロック要素間の間隔を解決できます (IE7 などのブラウザーでは、1 ピクセル間隔になる場合があります)。ただし、ブラウザである Chrome にはデフォルトで最小フォント サイズ制限があるため、互換性を考慮して次のコードも追加する必要があります:

リーリー

您可以狠狠地点击这里(去年制作的一个简单demo):font-size:0清除换行符间隙demo

补充:根据小杜在评论中中的说法,目前Chrome浏览器已经取消了最小字体限制。因此,上面的-webkit-text-size-adjust:none;代码估计时日不多了。

六、使用letter-spacing

类似下面的代码:

.space {
    letter-spacing: -3px;
}
.space a {
    letter-spacing: 0;
}

根据我去年的测试,该方法可以搞定基本上所有浏览器,包括吃“东鞋”、“西毒(胶囊)”、“南地(沟油)”、“北钙(三鹿)”的IE6/IE7浏览器,不过Opera浏览器下有蛋疼的问题:最小间距1像素,然后,letter-spacing再小就还原了。

七、使用word-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-spacingword-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方法的组组合合。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。