私は次のようなレイアウトを持っています:
<div>
<table>
</table>
</div>
div
なるべく広い範囲に拡大していきたいtable
です。
私は次のようなレイアウトを持っています:
<div>
<table>
</table>
</div>
div
なるべく広い範囲に拡大していきたいtable
です。
回答:
解決策は、をに設定するdiv
ことdisplay: inline-block
です。
span
たりdiv
またはul
または何か他のものを、重要な部分は、あなたがCSSプロパティを持つ最小幅になりたいコンテナのためであるdisplay: inline-block
display: inline-block
プロパティを設定するmargin: 0 auto;
と、期待どおりに動作しないことに注意してください。その場合、親コンテナtext-align: center;
にinline-block
要素があれば、要素は水平方向に中央揃えになります。
inline-block
うまくいきませんでしたが、inline-flex
DIDでした。
CSSが「幅に合わせて縮小」と呼んでいるブロック要素が必要であり、仕様ではそのようなことを実現するための祝福された方法が提供されていません。CSS2では、縮小して合わせることが目標ではありませんが、ブラウザーが薄い空気から幅を「取得する」必要がある状況に対処することを意味します。それらの状況は次のとおりです。
幅が指定されていない場合。CSS3に必要なものを追加することを検討していると聞きました。とりあえず、上記のいずれかを実行します。
機能を直接公開しないという決定は奇妙に思えるかもしれませんが、それには十分な理由があります。高いです。縮小して合わせるとは、少なくとも2回の書式設定を意味します。要素の幅がわかるまで要素の書式設定を開始できません。また、コンテンツ全体の幅を計算せずに幅を計算することはできません。さらに、思うほど頻繁に縮小してフィットする要素は必要ありません。なぜあなたのテーブルの周りに余分なdivが必要なのですか?多分テーブルのキャプションはあなたが必要なすべてです。
inline-block
はまさにこれを目的としており、問題を完全に解決します。
content-box, max-content, min-content, available, fit-content, auto
fit-content
キーワード(この回答が最初に作成された時点では存在せず、まだ完全にはサポートされていません)を使用すると、要素に「縮小して合わせる」サイズ設定を明示的に適用できます。サポートされているブラウザのみを対象とするほど幸運です。それにもかかわらず+1; これらは今のところ便利です!
float
私がする必要があることをした!
私は使用すると思います
display: inline-block;
動作しますが、ブラウザの互換性についてはわかりません。
別の解決策は、(ブロックの動作を維持したい場合)div
別のものでラップするdiv
ことです:
HTML:
<div>
<div class="yourdiv">
content
</div>
</div>
CSS:
.yourdiv
{
display: inline;
}
*display: inline; *zoom: 1;
ます。私はこの特定の状況についてはテストしていませんが、hasLayoutハックが必要なのはIE7、またはIE7モードのIE8(または気まぐれなIE8!)だけであることを過去に発見しました。
inline-block
にIE 7で有効にしたのは回避策です
display: inline-block
要素に余白を追加します。
私はこれをお勧めします:
#element {
display: table; /* IE8+ and all other modern browsers */
}
ボーナス:を#element
追加するだけで、ファンシーな新機能を簡単に中央に配置することもできmargin: 0 auto
ます。
position: absolute
<IE8には、条件付きコメントが必要です。
display: inline-block
してもマージンは追加されません。ただし、CSSはインライン要素の間に表示される空白を処理します。
position: absolute
あなたは試すことができますfit-content
(CSS3):
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
私にとってうまくいくのは:
display: table;
の中でdiv
。(FirefoxとGoogle Chromeでテスト済み)。
border-collapse: separate;
スタイルを設定する必要があります。これは多くのブラウザのデフォルトですが、ブートストラップのようなcssフレームワークは値をにリセットすることがよくありますcollapse
。
2つのより良い解決策があります
display: inline-block;
または
display: table;
これら2つのうち、display:table;
より良いのは、display: inline-block;
マージンが増えるます。
display:inline-block;
あなたは余分なスペースを修正するために、負のマージンメソッドを使用することができます
display:table
良いのか説明していただけませんか?
display:table
は、要素をブロックのフォーマットコンテキスト内に残すため、通常どおり、マージンなどでその位置を制御できます。display:-inline-*
一方、要素をインライン書式設定コンテキストに配置すると、ブラウザは、その周囲に匿名ブロックラッパーを作成し、継承されたfont / line-height設定を持つ行ボックスを含み、その行ボックスにブロックを挿入します(配置デフォルトではベースラインで垂直に配置されます)。これには、より多くの「魔法」が含まれるため、予想外の驚きが生じます。
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
-moz-inline-stack
これが表示されますどのような文脈で知って、私はCSSスタイルのプロパティが信じられないfloat
のいずれかleft
、またはright
このような効果を持つことになります。一方で、テキストをその周りにフロートさせるなど、他の副作用もあります。
私が間違っている場合は修正してください。100%確実ではないため、現在自分でテストすることはできません。
あなたの質問に対する答えは将来私の友人にあります...
つまり、 "intrinsic"は最新のCSS3アップデートに付属しています
width: intrinsic;
残念ながらIEは遅れているため、まだサポートされていません
それについての詳細:CSS本質的&本質的サイジングモジュールレベル3と私は使用できますか?:本質的および非本質的なサイジング。
現時点では、満足する<span>
か、または<div>
設定する必要があります
display: inline-block;
width:1px;
white-space: nowrap;
私にとってはうまくいきます:)
わかりました。多くの場合、デフォルトのdiv height
やwidth
autoのように何もする必要はありませんが、そうでない場合は、inline-block
displayを適用するとうまくいきます...私が作成したコードを見てください。何を探しているの:
div {
display: inline-block;
}
<div>
<table>
<tr>
<td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
<td>Nunc auctor aliquam est ac viverra. Sed enim nisi, feugiat sed accumsan eu, convallis eget felis. Pellentesque consequat eu leo nec pharetra. Aenean interdum enim dapibus diam.</td>
<td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
</tr>
</table>
</div>
これはコメントで言及されており、答えの1つで見つけるのは困難です。
display: flex
何らかの理由で使用している場合は、代わりに以下を使用できます。
div {
display: inline-flex;
}
display: flex;
inline-block
@ user473598として使用できますが、古いブラウザには注意してください。
/* Your're working with */
display: inline-block;
/* For IE 7 */
zoom: 1;
*display: inline;
/* For Mozilla Firefox < 3.0 */
display:-moz-inline-stack;
Mozillaはインラインブロックをまったくサポートしていませんが-moz-inline-stack
、ほぼ同じです。
inline-block
表示属性の周りのいくつかのクロスブラウザー:https :
//css-tricks.com/snippets/css/cross-browser-inline-block/
この属性を含むいくつかのテストは、https://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/で確認できます。
inline-block
3.0(2008)以降サポートしています。出典:developer.mozilla.org/en-US/docs/Web/CSS/...
CSSファイルにスタイルを入力するだけ
div {
width: fit-content;
}
-moz-fit-content
FFに使用できますが、おそらく他のベンダーのプレフィックスでも独自に使用できます...
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<div id="content_lalala">
this content inside the div being inside a table, needs no inline properties and the table is the one expanding to the content of this div =)
</div>
</td>
</tr>
</table>
人々は時々テーブルが好きではないことを知っていますが、私はあなたに言わなければならない、私はcssインラインハックを試してみました、そしてそれらはいくつかのdivでうまくいきましたが他ではうまくいかなかったので、拡張divを囲むのは本当に簡単でしたテーブル...そして...それはインラインプロパティを持つことも持たないこともできますが、それでもテーブルはコンテンツの全幅を保持するものです。=)
実用的なデモはこちら-
.floating-box {
display:-moz-inline-stack;
display: inline-block;
width: fit-content;
height: fit-content;
width: 150px;
height: 75px;
margin: 10px;
border: 3px solid #73AD21;
}
<h2>The Way is using inline-block</h2>
Supporting elements are also added in CSS.
<div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
</div>
私のCSS3フレックスボックスソリューションには2つのフレーバーがあります。ラッパーの助けを借りて、上の1つはスパンのように動作し、下の1つはdivのように動作し、すべての幅を取ります。それらのクラスは、それぞれ「top」、「bottom」、「bottomwrapper」です。
body {
font-family: sans-serif;
}
.top {
display: -webkit-inline-flex;
display: inline-flex;
}
.top, .bottom {
background-color: #3F3;
border: 2px solid #FA6;
}
/* bottomwrapper will take the rest of the width */
.bottomwrapper {
display: -webkit-flex;
display: flex;
}
table {
border-collapse: collapse;
}
table, th, td {
width: 280px;
border: 1px solid #666;
}
th {
background-color: #282;
color: #FFF;
}
td {
color: #444;
}
th, td {
padding: 0 4px 0 4px;
}
Is this
<div class="top">
<table>
<tr>
<th>OS</th>
<th>Version</th>
</tr>
<tr>
<td>OpenBSD</td>
<td>5.7</td>
</tr>
<tr>
<td>Windows</td>
<td>Please upgrade to 10!</td>
</tr>
</table>
</div>
what you are looking for?
<br>
Or may be...
<div class="bottomwrapper">
<div class="bottom">
<table>
<tr>
<th>OS</th>
<th>Version</th>
</tr>
<tr>
<td>OpenBSD</td>
<td>5.7</td>
</tr>
<tr>
<td>Windows</td>
<td>Please upgrade to 10!</td>
</tr>
</table>
</div>
</div>
this is what you are looking for.
display: inline-flex;
。ところで、これはChrome 62、firefox 57、およびサファリ11のプレフィックスなしで機能します
<div class="parentDiv" style="display:inline-block">
// HTML elements
</div>
これにより、親divの幅が最大の要素の幅と同じになります。
お試しくださいdisplay: inline-block;
。ブラウザー間で互換性を持たせるには、以下のcssコードを使用してください。
div {
display: inline-block;
display:-moz-inline-stack;
zoom:1;
*display:inline;
border-style: solid;
border-color: #0000ff;
}
<div>
<table>
<tr>
<td>Column1</td>
<td>Column2</td>
<td>Column3</td>
</tr>
</table>
</div>
このコードを試すことができます。CSSセクションのコードに従ってください。
div {
display: inline-block;
padding: 2vw;
background-color: green;
}
table {
width: 70vw;
background-color: white;
}
<div>
<table border="colapsed">
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
</table>
</div>
コンテナに改行があり、何時間もかけて適切なCSSソリューションを探して何も見つからなかった場合は、代わりにjQueryを使用します。
$('button').click(function(){
$('nav ul').each(function(){
$parent = $(this).parent();
$parent.width( $(this).width() );
});
});
nav {
display: inline-block;
text-align: left; /* doesn't do anything, unlike some might guess */
}
ul {
display: inline;
}
/* needed style */
ul {
padding: 0;
}
body {
width: 420px;
}
/* just style */
body {
background: #ddd;
margin: 1em auto;
}
button {
display: block;
}
nav {
background: #bbb;
margin: 1rem auto;
padding: 0.5rem;
}
li {
display: inline-block;
width: 40px;
height: 20px;
border: solid thin #777;
margin: 4px;
background: #999;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>fix</button>
<nav>
<ul>
<li>3</li>
<li>.</li>
<li>1</li>
<li>4</li>
</ul>
</nav>
<nav>
<ul>
<li>3</li>
<li>.</li>
<li>1</li>
<li>4</li>
<li>1</li>
<li>5</li>
<li>9</li>
<li>2</li>
<li>6</li>
<li>5</li>
<li>3</li>
<li>5</li>
</ul>
</nav>
改訂(複数の子がある場合に機能):jQueryを使用できます(JSFiddleリンクを参照)
var d= $('div');
var w;
d.children().each(function(){
w = w + $(this).outerWidth();
d.css('width', w + 'px')
});
jQueryを含めることを忘れないでください...