100%幅のない表示ブロック


95

displayプロパティを使用して、span要素を別の要素の下に表示されるように設定したい。インラインブロックを適用しようとしましたが、成功しませんでした。何らかの方法で要素に100%の幅を与えないようにすると、ブロックを使用できると考えました(要素を「引き伸ばしたくない」)。これは可能ですか、そうでない場合は、この種の問題を解決するための優れた実践方法は何ですか?

例:各投稿の最後に「もっと読む」リンクを設定するニュースリスト(注:<a>ではなく<span>

<li>
<span class="date">11/15/2012</span>
<span class="title">Lorem ipsum dolor</span>
<a class="read-more">Read more</a> 
</li>


更新:解決しました。CSSで適用

li {
    clear: both;
}
li a {
    display: block;
    float: left;
    clear: both;
}

1
表示するマークアップ(HTMLまたはCSS)はありますか?実際に取り組むことなしに問題に取り組むことは困難です。また、jsfiddleのデモもよいでしょう。
トムオークリー

span要素を配置するだけなので、サンプルコードは必要なかったと思います。更新された投稿を参照してください。
Staffan Estberg

以下で説明するように、コードを1行だけ使用するだけで、すべてのマークアップを大幅に削減できます。
ha404 2015

回答:


73

私があなたの質問を正しく理解している場合、次のCSSはaをスパンの下にフロートさせ、100%の幅を持たないようにします:

a {
    display: block; 
    float: left; 
    clear: left; 
}

これを適用しようとしましたが、スパン要素(例ではタイトルと日付)にフロートがないため、リンクは最後のスパンの前に配置されます。1つの解決策は、li内のすべての子要素をフロートにすることだと思います。
Staffan Estberg 2012年

これは、liの親にclearfixを適用すると機能します。PJに感謝します。
Staffan Estberg

157

を使用しdisplay: tableます。

この回答は30文字以上である必要があります。私は20を入力したので、ここにいくつかあります。


13
天才ソリューション。margin: 0 auto;あなたがそれを中央に配置する必要がある場合。
マフィア

4
私はあなたが素晴らしいと思います。
ビリーノア

1
display: table;動作しますが、パディングは受け付けません。
ドンキホーテ

@ ha404そうです、パディングは機能します!jsfiddle.net/wgj7xvLe/4少なくとも私のブラウザ(Chromium)では。
ドンキホーテ2018

3
@donquixoteは、border-collapse:Separateを使用している限り、パディングを受け入れます。ちょうどその問題がありました。
ブラッド

30

あなたは使うことができます:

width: max-content;

注:サポートには制限があります。サポートされているブラウザの詳細については、こちらご覧ください


聞いたことがない!面白い。
ライアン

Chrome 46とFF 66以降は良かった。inline-block他は私のレイアウトを壊していました。
i336_

1
@ i336_現在のところ、Edgeブラウザーではまだサポートされていません。
ChrisW

Edge、それともChromium Edge?(明確にするために、前者はかなり移行する予定です...)
i336_

caniuse.comによると、それは2020年1月14日にリリースされたEdge 79の時点でEdgeでサポートされています。合計で92%のサポート評価があります。caniuse.com/?search=max-contentこれは私にとって素晴らしい歓迎です。2年ほど前に初めてそれを聞いたとき、私が本番環境で使用するのに十分なサポートがありませんでしたが、現在はサポートしています。
Xandor

7

各行を独自のdivに保持するので、...

<div class="row">
    <div class="cell">Content</div>
</div>
<div class="row">
    <div class="cell">Content</div>
</div>

そしてCSSのために:

.cell{display:inline-block}

元のコードを見ずに解決策を提供することは困難です。


1
ありがとう、でもdiv要素を混ぜない方がいいです。
Staffan Estberg

5

繰り返しますが、答えは少し遅すぎるかもしれません(とにかくこのページで答えを見つけた人にとっては)。

代わりに display:block;使用display:inline-block;



1

私はこの問題を抱えていたので、次のように解決しました:

.parent {
  white-space: nowrap;
  display: table;
}

.child {
  display: block;
}

「空白:nowrap」は、十分なスペースがない場合、子の子(もしあれば)が新しい行に折り返されないようにします。

「空白:nowrap」なし:

ここに画像の説明を入力してください

「white-space:nowrap」で:

ここに画像の説明を入力してください


編集:私にとっては子ブロック部分なしでも機能するようですので、これはうまく機能するようです

.parent {
  white-space: nowrap;
  display: table;
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.