他のいくつかの質問では、text-align: justify
を適用してインラインブロック要素を均等に広げる最適な方法を既に取り上げています。たとえば、 HTML + CSS?
ただし、インラインブロック要素の行を「クリア」する100%幅の要素には、ブラウザによって独自の行が与えられます。親要素でline-height: 0;
を使用せずに、その空の垂直方向のスペースを取り除く方法がわかりません。
問題の例については、 this fiddle を参照してください
line-height: 0;
を使用する私のソリューションについては、 this fiddle を参照してください
私が使用しているソリューションでは、新しいline-height
を子要素に適用する必要がありますが、以前に設定されたline-height
はすべて失われます。誰かがより良い解決策を知っていますか?必要に応じて要素が折り返されるようにテーブルを避けたいし、ブラウザのサポートがまだないのでflexbox。任意です。
以下を考慮してください。
.prevNext {
display: table;
width: 100%
}
.prevNext a {
display: table-cell;
text-align: center
}
( 編集されたフィドル も参照してください)それがあなたが探しているものですか?この手法の利点は、さらにアイテムを追加でき、それらがすべて自動的に中央に配置されることです。最新のすべてのWebブラウザーでサポートされています。
まず、マークアップのセマンティクスを維持するために、pseudo-element
のアプローチが好きです。全体的なアプローチに固執すべきだと思います。位置決めデータを取得するために、テーブル、不要なマークアップ、またはオーバースクリプトを使用するよりもはるかに優れています。
text-align
がハッキーであることを強調したみんなのために-おいで! HTMLは、CSSを犠牲にしてセマンティックにする方が、逆の場合よりも優れています。
だから、私の理解から、あなたは毎回line-height
をリセットすることを心配することなく、この正当なインラインブロック効果を達成しようとしていますか?私はあなたが単に追加すると主張します
.prevNext *{
line-height: 1.2; /* or normal */
}
その後、何も起こらなかったかのようにコーディングを始めることができます。パフォーマンスが心配な場合の*
セレクターに関するPaul Irishの引用は次のとおりです。
「...すべてのjavascriptを連結し、最下部に配置し、cssとjsを縮小し、すべてのアセットをgzipし、すべての画像を無損失で圧縮しない限り、*のパフォーマンスを気にすることはできません。 90を超えるページスピードスコアを取得しても、セレクタの最適化について考えるのは時期尚早です。」
お役に立てれば!
-Jコールモリソン
試行する text-align
この問題の場合はかなりハックです。 text-align
プロパティは、ブロックのインラインコンテンツ(具体的にはテキスト)を整列させることを目的としています。html要素を整列させることは意図していません。
あなたはフロートを避けようとしていることを理解していますが、私の意見では、フロートはあなたがやろうとしていることを達成するための最良の方法です。
@Scottsが述べたように、次のことはChrome内で-webkit
部分なしで実装されました。特に-browser-specific-shǐt
をすぐに取り除く必要があるので、私は本当に大好きでした。
.prevNext {
text-align: justify;
-moz-text-align-last: justify;
-webkit-text-align-last: justify; /* not implemented yet, and will not be */
text-align-last: justify; /* IE + Chrome */
}
注:それでもSafariとOpera まだサポートしない (08 -SEPT-16)。
あなたのフィドルは非常に具体的です。あなたの場合、このCSSはうまくいくようです:
.prevNext {
border: 1px solid #ccc;
position: relative;
height: 1.5em;
}
.prevNext a {
display: block;
position: absolute;
top: 0;
}
.prevNext a:first-child {
left: 0;
text-align: left;
}
.prevNext a:last-child {
right: 0;
text-align: right;
}
この例では、ユニットなしのline-height:1.2
があります。これにより問題が発生する可能性があります。境界線を使用していない場合、親と子にline-height
の0
を与えることができます。
私が考えることができる他のオプションは次のとおりです。
display:table
を使用し、子でdisplay:table-cell
を使用して、動作のようなテーブルをシミュレートします。そして、最初のアイテムを左に、最後のアイテムを右に揃えます。こちらをご覧ください fiddle 。width
各。そして、最初と最後のアイテムをそれぞれ左右に揃えます。text-align:justify
とともに慎重に配置する必要があるいくつかの非分割スペースを必要とする複雑な方法です。それをnav
要素に適応させてみてください。例 here を参照してください。