標準の左揃えではなく、select2でdropdownAutoWidth: true
を使用してドロップダウンメニューを右揃えにする方法はありますか?選択をそのままにしたいのですが、ドロップダウンを左に移動して、右側の選択と揃えます。間違った配置で以下のスニペットを参照してください...
注:図のように、選択とドロップダウンのサイズを変えたいのですが。
編集// direction: rtl; text-align: right;
を追加する提案で更新されました。これは、テキストを右揃えするだけです。ドロップダウン全体を、その上の選択したオプションに合わせて右揃えにします。例えば。ドロップダウンは、選択したオプションの右側ではなく、左側に突き出ているはずです。
編集2 // .select2-dropdown { left: -69px !important; }
で更新これにより、希望どおりの外観になりますが、-69pxの固定値を設定する必要がない方法はありますか?
$(".form-control").select2({
width: '100px',
dropdownAutoWidth : true,
});
.select2-container--default .select2-results > .select2-results__options { direction: rtl; text-align: right; }
.select2-dropdown {
left:-69px !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<select class="form-control">
<option selected="selected">orange</option>
<option>white</option>
<option selected="selected">purple</option>
</select>
私はそれをこのように見せたいですが、それを達成するための固定値ではありません。
選択とドロップダウンのサイズを変えたいので、これが私の解決策ですselect2組み込みオプションといくつかのCSSを使用ですが、完全ではないかもしれません。
rtl
を作成するのは簡単です。dir
を使用するだけですが、以下に示すように、他のオプションを渡す必要があります。
$('select').select2({
dir: "rtl",
dropdownAutoWidth: true,
dropdownParent: $('#parent')
});
ここでの鍵はdropdownParent
です。また、次のようにHTML
を編集する必要があります。
<div id='parent'>
<select>
<option selected="selected">orange</option>
<option>white</option>
<option selected="selected">purple</option>
</select>
</div>
そして最後に、いくつかのCSSが必要です。
#parent {
/* can be any value */
width: 300px;
text-align: right;
direction: rtl;
position: relative;
}
#parent .select2-container--open + .select2-container--open {
left: auto;
right: 0;
width: 100%;
}
あなたはそれを実際に見ることができます ここcodepenで
複数の選択肢がある場合は、dropdownParent
オプションを処理するためのJSコードが必要です。ところであなたはdropdownAutoWidth
オプションを削除すればあなたの人生はより簡単になります;)
それでも別の方法を探している場合。私も最近これを達成する必要があり、RTLの回答は私のプロジェクトにとって実行可能なソリューションではありませんでした。 select2.js(4.0.6)を使用していて、スクリプトを変更しても構わない場合は、次のコードを置き換えて、ターゲット要素にクラスを追加することで正しい配置を実現できます。
行4381から4384を探します。
var css = {
left: offset.left,
top: container.bottom
};
以下に置き換え
var containerWidth = this.$container.outerWidth()
var right = ($("body").outerWidth() - (offset.left + containerWidth));
if (this.$element.hasClass("right-align")) {
var css = {
right: right,
top: container.bottom
};
} else {
var css = {
left: offset.left,
top: container.bottom
};
}
クラスをターゲットの選択入力に右揃えで追加します。
<select id="client_select" class="form-control right-align">
<option value="01">Example One</option>
<option value="02">Example Two</option>
<option value="03">Example Three</option>
</select>
それで十分です。ターゲット要素にクラスがある場合、コードは、左配置ではなく右配置を使用してドロップダウンを配置します。コンテナが親に設定されている場合も同様に機能するはずです。ただし、これは完全にテストされていません。洗練されたソリューションではないかもしれませんが、CSSで何もオーバーライドする必要はありません。右揃えのドロップダウンを処理するためのオプションを追加する更新が行われるまで、トリックを行う必要があります。それが役に立てば幸い。
init select with dir: "rtl" such as:
$('select').select2({
dir: "rtl,
...
...
...
...
})