2017-10-11 4 views
0

オプションのリストの代わりにカスタムパネル(div)をドロップダウンするドロップダウンを作成したいと思います。そのパネルは、私が求めているレイアウトに縛られていないので、無関係です。基本的なドロップダウン一見のために私は次のようしている:divの残りの部屋を取るために入力を拡張する方法

<style> 
    .folder-selection { 
     width: 100%; 
    } 
    .dropdown-button { 
     float: right; 
    } 
</style> 

    <div id=container> 
     <input type="text" class="folder-selection" /> 
     <button type="button" class="dropdown-button">...</button> 
    </div> 

は、今私は、フロートを知っていて、左側に入力し、上のボタンで、幅100%が右ではありませんが、私は、コンテナのdiv要素を持っています右。ボタンは入力の右側に固定されたままでなければなりません。コンテナが狭い場合、入力は狭くなければならず、その逆もありますが、設計時にコンテナの幅を知らなくてもこれを達成したいと思います。

コンテナは任意の幅に収まる必要があり、入力の幅はそれに応じて調整する必要があります。通常のselect要素と同じように、テキスト部分は常に、その右側のドロップダウンアイコン/ボタンによって取られていないすべてのスペースを埋めます。

+0

私は完全にあなたの質問を理解し、いくつかのトラブルをしましたが、(リストやdivの場合は関係なく)通常、あなたは比較的位置付け親に絶対位置のドロップダウンを設定することができます。 – Aer0

+0

ボタンには固定幅 '200px'を入力し、入力には残りの幅を指定します。' calc(100% - 200px) 'は空白のために数ピクセルを与えます。 –

+0

あなたは達成したいことのイラストを投稿できますか? – Terry

答えて

1

以下は、例を参考にしてください。右に固定幅のアイコンを表示したくない場合は、このコードを適宜更新してください。

#container { 
 
\t position: relative; 
 
\t border: 1px solid #ccc; 
 
\t padding: 5px 40px 5px 5px; 
 
\t margin: 0 0 10px; 
 
} 
 
.folder-selection { 
 
\t width: 100%; 
 
\t padding: 5px; 
 
\t border: none; 
 
\t box-sizing: border-box; 
 
\t height: 30px; 
 
} 
 
.dropdown-button { 
 
\t position: absolute; 
 
\t top: 5px; 
 
\t right: 5px; 
 
\t height: 30px; 
 
}
<div id=container> 
 
<input type="text" class="folder-selection" /> 
 
<button type="button" class="dropdown-button">...</button> 
 
</div>

+0

正確に私が必要としたもので、最初の正解よりもきれいです。ありがとうございました。 – ProfK

+0

なぜ 'container'のセレクタはクラスではなくidでなければなりませんか?再利用可能なビューコンポーネントを作成しようとしているので、IDを使用しないでください。どこのIDが使用されているのか分かりません。 – ProfK

+0

ああ、「コンテナ」という単一の単語を使用する場合にのみ表示されます。私がよりローカルで不明な名前に変更した場合は、代わりにクラスを使用できます。例えば。 '#container'ではなく' .folder-selector'がうまくいくようです。 – ProfK

-1

このコードは、要素を期待通りに配置するのに役立ちます。

* { 
 
    box-sizing: border-box; 
 
} 
 

 
.dropdown-container { 
 
    width: 500px; 
 
    display: table; 
 
    background: orange; 
 
} 
 

 
.dropdown-container .input-container { 
 
    display: table-cell; 
 
} 
 

 
.dropdown-container .input-container input { 
 
    width: 100%; 
 
    padding-right: 10px; 
 
} 
 

 
.dropdown-container .button-container { 
 
    display: table-cell; 
 
    width: 150px; 
 
} 
 

 
.dropdown-container .button-container button { 
 
    width: 100%; 
 
}
<div class="dropdown-container"> 
 
    <div class="input-container"> 
 
    <input type="text" class="folder-selection" /> 
 
    </div> 
 
    <div class="button-container"> 
 
    <button type="button" class="dropdown-button">Drop</button> 
 
    </div> 
 
</div>

+2

この回答はなぜ投票されますか?それは私の質問に答えているようです。 – ProfK

+0

ありがとうございます。私はあなたにポイントを与えましたが、受け入れられた答えはきれいです。ありがとう。 – ProfK

1
<style> 
.dropdown-button { 
    width: 16px; /*Set width of button*/ 
} 

.folder-selection { 
    width: calc(100% - 16px); /*div's width minus button's width*/ 
} 
</style> 

<div id=container> 
    <input type="text" class="folder-selection" /><!-- this comment is to remove white space between the two elements 
--><button type="button" class="dropdown-button">...</button> 
</div> 

あなたは本当に限り、あなたは、実行時にその幅を知っているように、ボタンの幅を設定する必要はありません。

+0

私は画面の全幅を入力し、その下のボタンを極端に左にします。そのスタイルの 'calc'は動作していないようです。私はこれをASP.NET Core MVCプロジェクトで使用しています。標準の '_Layout.cshtml'を私の「マスター」ページとして使用しています。 – ProfK

+0

1.あなたはどのブラウザを使用していますか? 2.ボタンの正確な幅を引いたか?そうでなければ、ボタンはあなたが言ったように左下に行くでしょう。 3。空白を削除しましたか? (上記のhtmlコメントを参照してください)。 'calc(80%〜16px)'に調整して、問題が 'calc'にあるかどうか調べてください。 – Cons7an7ine

+0

1)Chrome、2)はい、3)いいえ。とにかく動作していますが、私はまだ 'calc'が新しく私はこのバージョンが動作するようにしたいと思っています。 – ProfK

関連する問題