2016-09-12 1 views
0

なしのinputタグの幅は、HTMLの次のスニペットを考えてみましょう。 (リストには実際のアイテムがありますが、コンパクトにするためにここに残しておきます)。ここでは、CSSを使用してリストの幅を制御することができ、同様に入力タグに対してもリストの幅を制御できます。メイクリストはJavaScriptを

入力タグをデフォルトの幅のままにして、リスト幅の幅を一致させたいとします。私はもちろん、JavaScriptのgetComputedStyleを使用することができます。理論的には、これはユーザーがJavaScriptを無効にすると問題を引き起こしますが、実際には、私は実際に(非常に最小限の)オートコンプリートウィジェット(ウィキペディアのようですが、ファンシーは少ない)をコーディングしているので、JavaScriptなしでは機能しません。

これでも可能ですか?私はCSSについては基本的に何も知らないので、これが明白であると思われるなら私を許してください。

+0

興味深い質問。インライン・ブロック・スタイリング(リストと入力の両方にインライン・ブロックのラッパーを追加)を使用できますが、リスト項目のテキストが長すぎると、幅が広がります。あなたはそのシナリオで何をしたいですか? https://jsfiddle.net/s8dujmto/ –

答えて

1

通常、あなたは一緒にdisplay:tabledisplay:table-cell(匿名のオブジェクトが他の1のために作成される、重要ではありません)に設定するラッパー要素でこれを行うだろう指定された幅は非常に小さい。ラッパーの使用される幅は、少なくとも入力ボックスの幅と同じになるように強制され、リストはその中に収まります。

(デモCSSとHTMLマークアップは、ジョセフMarikleの答えから借用)

.wrapper { 
 
    display: table; 
 
    width:1px; 
 
} 
 

 
/* for demo only */ 
 
ul{list-style-type:none;padding:0;margin:0;background:#ae0}.wrapper{margin-bottom:1em;}
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div> 
 
<br> 
 
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2 tetts 3 stsdgsdf stsdgsdf</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div>

+0

これは私が探していたものとほぼ同じです。テキストが長すぎる場合は折り返しますが、各エントリは常に1行にしたいと考えていました。しかし、おそらくそれを修正する簡単な方法があります。 –

+0

ラップを防ぐために 'white-space:nowrap'を試してください –

-1

を使用すると、新しいCSS標準を使用する、あまりにも嫌いじゃないならば、私はフレキシボックスを使用してお勧めしたいのマッチング幅

+0

しかし、入力タグの幅はわかりません。異なるブラウザには異なるデフォルトが設定されている可能性もあります。 –

+1

入力幅をul幅と同じに設定してください。 )デモでそれを修正する方が簡単でしょう; jsfiddleやcodepenを使ってみてください;) –

+0

しかし、ブラウザAのデフォルト幅は144px、ブラウザBのデフォルト幅は72px、ブラウザCのデフォルトの幅は288ピクセルですか?そこには多くの奇妙なブラウザがあります.Lynx、モバイルブラウザなどです。ブラウザのデフォルト設定を変更したり、カスタムスタイルシートなどを使用するユーザーはいません。 –

1

に//変更40ピクセル

<ul style = "width: 40px">を試してみてください。明示的な値を設定したり計算したりすることなく、両方の要素が同じ幅であることを確認する両方の方法に適応します。

.wrapper { 
 
    display: inline-flex; 
 
    flex-direction: column; 
 
} 
 

 
/* for demo only */ 
 
ul{list-style-type:none;padding:0;margin:0;background:#ae0}.wrapper{margin-bottom:1em;}
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div> 
 
<br> 
 
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2 tetts 3 stsdgsdf stsdgsdf</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div>

+0

それはあなたが作成した非常に興味深い効果です。私はこの方法で動作するオートコンプリートウィジェットを見たことはありませんでしたが、おそらくあなたの方法が優れていて、誰もがそれを「間違って」行っているのだろうかと思います。あなたの方法はデフォルトの幅を入力タグの幅にしますが、リストに幅の広い項目がある場合は伸び、入力タグはそのタグで伸びます。しかし、これはちょっと混乱するかもしれないと私は心配しています。入力タグは、通常は伸縮しません。私が尋ねたことに近い答えを誰も出さなければ、私はこれを受け入れます。それは本当にクールです。 –

+0

@MarkVY誰もがそれを間違ってやっているとは言いません。フレックスボックスは、今やプロダクションコードで受け入れられるものの謎のようなものです。最近、TwitterのブートストラップやセマンティックUI(私は思う?)のような主要なフレームワークがそれに頼っていたのはごく最近のことでした。下位互換性が本当に良い場合は、javascriptを使用する必要があります。フレックスボックスやジャバスクリプトを使わずに確実に行う方法は他にありません。 –

+0

いいえ、私はflexboxについては意味しません。私は、入力タグが最も幅の広いリスト項目を収容するために伸びる効果を意味します。私はそれを行うオートコンプリートウィジェットを見たことがない。 (例えば、WikipediaやGoogleを参照してください:提案が合わない場合でも、両方とも修正されています) –