以下のようなレイアウトになります。
<div>
<table>
</table>
</div>
私は私のdiv
が私のtable
になるのと同じくらい広く拡張することだけを望みます。
解決策はdiv
をdisplay: inline-block
に設定することです。
CSSがシュリンクフィット幅と呼んでいるものがあり、そのようなことを実現するための恵まれた方法を提供していないブロック要素が必要です。 CSS 2では、縮小表示は目標ではありませんが、ブラウザーが細い空気から幅を「取らなければならない」状況に対処することを意味します。そのような状況は以下のとおりです。
幅が指定されていない場合私は彼らがあなたが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
を簡単にセンタリングできます。
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
私にとって効果的なのは、
display: table;
div
name__内。 ( Firefox および Google Chrome でテスト済み)。
fit-content
(CSS3)を試すことができます。
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
2つのより良い解決策があります
display: inline-block;
OR
display: table;
これら2つのdisplay:table;
のうち、 display: inline-block;
が余分なマージンを追加するため、より優れています。
display:inline-block;
の場合は、余白を修正するためにnegative marginメソッドを使用できます。
あなたの質問に対する答えは、将来私の友人にもたらされます。
つまり、 "intrinsic"は最新のCSS3アップデートを伴っています。
width: intrinsic;
残念ながら _ ie _ は後ろにあるのでまだサポートしていません
それについての詳細: CSS組み込み&外部サイジングモジュールレベル3 と 使用できますか?:組み込み&外部サイジング 。
今のところ、<span>
または<div>
を次のように設定して満足する必要があります。
display: inline-block;
これがどのようなコンテキストで表示されるかはわかりませんが、CSSスタイルのプロパティfloat
、left
、またはright
がこの効果をもたらすと考えています。その一方で、それはまたテキストがそれのまわりで浮かぶことを可能にすることのような他の副作用があるでしょう。
私が間違っている場合は私を修正してください、私は100%わからない、そして現在自分でそれをテストすることはできません。
width:1px;
white-space: nowrap;
私のためにうまくいきます:)
CSS2互換の解決策は以下を使うことです:
.my-div
{
min-width: 100px;
}
Divをfloatにすることで可能な限り小さくすることもできますが、div内の何かが浮動している場合は clearfix を使用する必要があります。
.my-div
{
float: left;
}
OK、 多くの場合、デフォルトでdivはautoとしてheight
とwidth
を持っているので何もする必要はありませんが、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>
display: inline;
(またはwhite-space: nowrap;
)を使うことで簡単にできます。
これが役に立つことを願っています。
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/
これはコメントで述べられていて、答えの1つでそう見つけることが難しいです:
何らかの理由でdisplay: flex
を使用している場合は、代わりに以下を使用できます。
div {
display: inline-flex;
}
<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インラインハックを試してみました、そしてテーブル...そして...それはインラインプロパティを持つことも持たないこともできますが、それでもテーブルはコンテンツの全幅を保持することになるものです。 =)
実用的なデモはこちら -
.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>
CSSファイルにスタイルを追加するだけです
div {
width: fit-content;
}
2つのフレーバーの私のCSS3 flexboxソリューション:上のものはスパンのように振る舞い、下のものは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-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>
<div class="parentDiv" style="display:inline-block">
// HTML elements
</div>
これは親divの幅を最大の要素の幅と同じにします。
Firebugを改ざんした私は、OPが望んでいたことを正確に実行し、次のように使用できるプロパティ値-moz-fit-content
を見つけました。
width: -moz-fit-content;
Firefoxでしか動作しませんが、Chromeなど他のブラウザに相当するものは見つかりませんでした。
div
要素では、2つの方法のいずれかを使用できます。
display: table;
または、
display: inline-block;
私はdisplay: table;
を使うことを好みます、なぜならそれはすべての余分なスペースをそれ自身で処理するからです。 display: inline-block
はいくらかの追加のスペース修正を必要としますが。
span
タグの内側にdiv
タグを追加し、CSSのフォーマット設定を外側のdiv
タグから新しい内側のspan
タグに移動することで、同様の問題を解決しました(アイテムが中央に配置されていたためdisplay: inline-block
を使用したくありませんでした)。 display: inline block
があなたにふさわしい答えではない場合は、これを別の代替案としてそこに出すだけです。
div{
width:auto;
height:auto;
}
改訂(複数の子供がいる場合は動作します):jQueryを使用できます(JSFiddleリンクを見てください)
var d= $('div');
var w;
d.children().each(function(){
w = w + $(this).outerWidth();
d.css('width', w + 'px')
});
JQueryを含めることを忘れないでください...
数時間後に適切な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>
padding: -whateverYouWantpx;
を設定するだけです
私はdiv.classname{display:table-cell;}
を試しました、そしてそれはうまくいきました!
親要素にdisplay: flex
を使用できます
#parentElement {
display: flex;
flex-direction: column;
align-items: flex-start;
}
このコードを試すことができます。 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>
グローバル変数を定義し、それを両方に使用するとどうなりますか。
:root {
--table-width: 400px;
}
.container{
width:var(--table-width);
border: 1px solid black; // easy visualization
}
.inner-table {
width:var(--table-width);
border: 1px solid red; // easy visualization
}
<div class="container">
<table class="inner-table">
<tr>
<td>abc</td>
</tr>
</table>
</div>
私はspan
の中にdiv
を入れていて、margin: auto
をコンテナーdiv
に設定するだけでうまくいきました。
個人的に、私はこれを単純にします:
HTMLコード
<div>
<table>
</table>
</div>
CSSコード:
div {
display: inline;
}
あなたがあなたのdivにフロートを適用するならば、それはあまりにもうまくいきます、しかし明らかに、あなたは次のHTML要素で「両方をクリアする」CSS規則を適用する必要があります。
単に
<div style="display: inline;">
<table>
</table>
</div>