2017-03-27 13 views
0

<div>Some dynamic text</div>の場合は、widthが動的テキストによって決定されたときに、divの等幅の高さと幅をどのようにして作成しますか?既知の幅に基づいて同じ高さを設定することと同様にCSSを使用して動的テキストに基づいて同じ高さと幅を設定する方法

+0

私は、CSSを使用して同等の寸法を設定する方法についての質問/回答の多くを参照してください、しかし、動的なコンテンツに基づいていますなし。私は自分自身と同じ問題に遭遇した他の人を助けることを期待して答えを出しました。 –

+0

いくつかのコードを投稿してください。おそらく、問題のステートメントでおそらくフィーリングを作成してください。ありがとう –

答えて

1

あなたはdiv内部の単一の段落要素を配置し、pmarginを考慮に入れcalc()を使用して与えることができますdivwidth%は常に親要素のwidthに基づいているため)。

実施例は:

div { 
 
display: inline-block; 
 
color: rgb(255, 255, 255); 
 
background-color: rgb(255, 0, 0); 
 
padding: 6px; 
 
} 
 

 
p { 
 
margin: calc(50% - 12px) 0; /* half the width minus half the line-height */ 
 
font-size: 18px; 
 
line-height: 24px; 
 
}
<div> 
 
<p contenteditable="true">Click me &amp; edit to change div size.</p> 
 
</div>

+0

うーん...私は、これはあなたよりももっと簡単だと思った@DerekStoryが、2番目の考えで、両者を比較し、それは非常に似て探してしまいます。この代替案を削除したいとお考えなら、私は喜んでお待ちしております。 – Rounin

+1

私はこれが本当に好きで、もう少しストレートだと思います。私は両方の参照を保持するが、正しい答えと+1としてマークする。 –

2

ここで答えとして:https://stackoverflow.com/a/6615994/2479962

あなたが第一の容器内の動的テキストを含み、動的テキスト要素上(この場合:beforeに)マージンプッシャーを追加します。

JS fiddle

<div class="container"> 
    <div class="element"> 
     Dimensions set by content. 
    </div> 
</div> 

トリックは、動的コンテンツfont-sizeとオフ.element:beforeのマージンをベースにあります:のみ

CSS:

JS Fiddle - Vertically centered

:@浪人の提案で

.container { 
    display: inline-block; 
    position: relative; 
    background-color: silver; 
} 
.element { 
    font-size: 20px; 
    padding: 10px; 
    /* So we don't have to take line-height into consideration during calc() */ 
    line-height: 1; 
} 
.element:before { 
    content: ''; 
    display: block; 
    /* 100% is for 1:1 aspect ratio */ 
    /* 20px is taking the contents font-size plus the padding on each side */ 
    margin-top: calc(100% - 20px); 
} 

、我々は垂直:before:afterの両方を使用して2で計算を分割し、それを中央にすることができます

.element:before, .element:after { 
    content: ''; 
    display: block; 
    /* 100% is for 1:1 aspect ratio */ 
    /* 10px is taking the contents font-size plus the padding on each side/2 */ 
    margin-top: calc(50% - 10px); 
} 
+1

非常に賢い。 +1。テキストを垂直方向に中央に、我々は#1 element' 'の上に1' .dimension-setter'を配置し、以下の1とするスタイル宣言を更新することができます: 'マージン:CALC(50% - 20ピクセル)0;' – Rounin

+1

素晴らしいアイデア。あなたの提案を使用してフィドル:http://jsfiddle.net/dAebS/582/は –

関連する問題