次のようなレイアウトがあります。
<div>
<table>
</table>
</div>
私はdiv
、私がなるまで拡大するだけにしたいと思いtable
ます。
解決策は、に設定するdiv
ことdisplay: inline-block
です。
CSSが縮小してフィットする幅と呼ぶものを備えたブロック要素が必要であり、仕様はそのようなものを取得するための祝福された方法を提供していません。CSS2では、縮小して適合させることは目標ではありませんが、ブラウザーが薄い空気から幅を「取得しなければならない」状況に対処することを意味します。それらの状況は次のとおりです。
幅が指定されていない場合。彼らはあなたがCSS3に欲しいものを追加することを考えていると聞きました。今のところ、上記のいずれかでやり遂げてください。
機能を直接公開しないという決定は奇妙に思えるかもしれませんが、正当な理由があります。高いです。縮小して合わせるとは、少なくとも2回フォーマットすることを意味します。要素の幅がわかるまで、要素のフォーマットを開始することはできません。また、コンテンツ全体を通過しない幅を計算することもできません。さらに、考えられるほど頻繁に縮小してフィットする要素は必要ありません。なぜテーブルの周りに追加のdivが必要なのですか?たぶん、テーブルのキャプションだけが必要です。
使っていると思います
display: inline-block;
動作しますが、ブラウザの互換性についてはよくわかりません。
div
別の解決策は、別のものでラップするdiv
ことです(ブロックの動作を維持したい場合):
HTML:
<div>
<div class="yourdiv">
content
</div>
</div>
CSS:
.yourdiv
{
display: inline;
}
display: inline-block
要素にマージンを追加します。
私はこれをお勧めします:
#element {
display: table; /* IE8+ and all other modern browsers */
}
おまけ:#element
を追加するだけで、ファンシーな新しいものを簡単に中央に配置できるようになりましたmargin: 0 auto
。
あなたが試すことができますfit-content
(CSS3):
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
2つのより良い解決策があります
display: inline-block;
また
display: table;
display:table;
display: inline-block;
余分なマージンが追加されるため、これら2つのうちの方が優れています。
display:inline-block;
負のマージン メソッドを使用して、余分なスペースを修正できます。
私のために働くものは次のとおりです。
display: table;
でdiv
。(FirefoxおよびGoogle Chromeでテスト済み)。
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
これがどのようなコンテキストで表示されるかはわかりませんが、CSS スタイルのプロパティがこの効果を持つfloat
か、left
または持つと思います。right
一方で、テキストをその周りに浮かせるなど、他の副作用もあります。
私が間違っている場合は修正してください。100% 確信があるわけではなく、現在自分でテストすることはできません。
あなたの質問に対する答えは、私の友人の未来にあります...
つまり、「組み込み」は最新の CSS3 アップデートで提供されます。
width: intrinsic;
残念ながら、 IEは遅れているため、まだサポートされていません。
詳細: CSS Intrinsic & Extrinsic Sizing Module Level 3 and Can I Use? : 本質的および外的サイジング。
今のところ、満足する<span>
か、<div>
設定する必要があります
display: inline-block;
width:1px;
white-space: nowrap;
私にとってはうまくいきます:)
CSS2 互換のソリューションは、次を使用することです。
.my-div
{
min-width: 100px;
}
div をできるだけ小さくすることもできますが、div 内の何かがフローティングしている場合はclearfixを使用する必要があります。
.my-div
{
float: left;
}
<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では機能しなかったので、拡張divを囲む方が本当に簡単でした。テーブル...そして...インラインプロパティを持つことも持たないこともできますが、それでもテーブルはコンテンツの全幅を保持するものです。=)
display: inline;
(または)を使用するだけで簡単に実行できますwhite-space: nowrap;
。
これが役に立つことを願っています。
動作するデモはこちらです-
.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>
2 つのフレーバーの私の CSS3 フレックスボックス ソリューション: 上部の 1 つはスパンのように動作し、下部の 1 つは div のように動作し、ラッパーの助けを借りてすべての幅を取ります。それらのクラスは、それぞれ「トップ」、「ボトム」、「ボトムラッパー」です。
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.
Firebugを改ざん-moz-fit-content
して、OPが望んでいたことを正確に実行し、次のように使用できるプロパティ値を見つけました。
width: -moz-fit-content;
Firefoxでのみ動作しますが、Chromeなどの他のブラウザに相当するものは見つかりませんでした。
タグ内にタグを追加し、CSS フォーマットを外側のタグから新しい内側のタグに移動することで、同様の問題 (display: inline-block
項目が中央に配置されていたため使用したくなかった) を解決しました。あなたにとって適切な答えでない場合は、別の代替案としてこれを捨てるだけです。span
div
div
span
display: inline block
div
この要素 では、次の 2 つの方法のいずれかを使用できます。
display: table;
また、
display: inline-block;
display: table;
すべての余分なスペースを単独で処理するため、私は を使用することを好みます。余分なスペースをdisplay: inline-block
修正する必要があります。
div{
width:auto;
height:auto;
}
コンテナーが改行していて、何時間もかけて適切な 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を含めることを忘れないでください...
私は試しdiv.classname{display:table-cell;}
てみましたが、うまくいきました!
私はspan
内部にいて、コンテナdiv
に設定するだけでうまくいきました。margin: auto
div
個人的には、私は単にこれを行います:
HTML コード:
<div>
<table>
</table>
</div>
CSS コード:
div {
display: inline;
}
div にフロートを適用する場合も機能しますが、明らかに、次の HTML 要素で「両方をクリアする」CSS ルールを適用する必要があります。
これは、すべてのブラウザで問題なく機能するようです。例は、私がオンラインやニュースレターで使用している実際の広告です。divの内容を変更するだけです。指定したパディングの量に合わせて調整およびシュリンクラップします。
<div style="float:left; border: 3px ridge red; background: aqua; padding:12px">
<font color=red size=4>Need to fix a birth certificate? Learn <a href="http://www.example.com">Photoshop in a Day</a>!
</font>
</div>