web-dev-qa-db-ja.com

純粋なCSSで別の要素の幅に基づいてスパンの幅を設定します

[〜#〜] html [〜#〜]

<div class="container">
  <div id="setter">
    <span>some variable content</span>  
  </div>

  <div class="wrap">
    <span>
      lorem ipsum lorem ipsum lorem ipsum lorem ipsum    
    </span>
  </div>
</div>

[〜#〜] css [〜#〜]

.container {
  max-width: 200px;
}

.wrap {
  overflow: hidden;
  text-overflow: Ellipsis;
  white-space: nowrap;  
}

ケース:

.wrap div内のスパンの幅に基づいて、#setterクラス内のスパンの幅を動的に設定する必要があります。あなたがCSSで見ることができるように、私は2番目のdivでEllipsisオーバーフローを使用しています。 setter divコンテンツの長さはさまざまです。つまり、lorem ipsumテキストが最初のdivのコンテンツよりも広くならないようにすることが目標です。

コードペン: http://codepen.io/jacek213/pen/pbPkmQ

純粋なCSSでこれを達成したいのですが、それは可能ですか?そうでない場合は、js(jqueryの使用は問題ありません)の角度に優しいソリューションを歓迎しますが、この構造で構築された多数のレコードを一度に表示するため、効率的である必要があります。

7
Jacka

それは少しギミックですが、それは純粋なCSSで行うことができます

#setter {
  display: inline-block;
}

.container {
  max-width: 200px;
  position: relative;
  display: inline-block;
  padding-bottom: 1.125em;
}

.wrap {
  overflow: hidden;
  text-overflow: Ellipsis;
  white-space: nowrap;
  position: absolute;
  left: 0;
  right: 0;
}
<div class="container">
  <div id="setter">
    <span>some variable content</span>
  </div>

  <div class="wrap">
    <span>
      lorem ipsum lorem ipsum lorem ipsum lorem ipsum    
    </span>
  </div>
</div>
13
Icycool

CSSでこれを達成できるとは本当に思っていません。このようなjqueryソリューションを試してください:

var $setter = $("#setter");
$setter.siblings(".wrap").css("max-width", $setter.width()+"px");
6
labago