選択ボックスの中央にテキストを配置することは可能ですか?


198

私はこれを試しました:http : //jsfiddle.net/ilyaD/KGcC3/

HTML:

<select name="state" class="ddList">
    <option value="">(please select a state)</option>
    <option class="lt" value="--">none</option>
    <option class="lt" value="AL">Alabama</option>
    <option class="lt" value="AK">Alaska</option>
    <option class="lt" value="AZ">Arizona</option>
    <option class="lt" value="AR">Arkansas</option>
    <option class="lt" value="CA">California</option>
    <option class="lt" value="CO">Colorado</option>
</select>

CSS:

select { width: 400px; text-align: center; }
select .lt { text-align: center; }

ご覧のとおり、機能しません。選択ボックス内のテキストを中央揃えにするCSS専用の方法はありますか?


5
私のFirefoxではそれは正しく動作します:)
Mateusz Rogulski '30

10
Chromeでは機能しません。
Emmanuel

4
@Blazemonger人間による辞書編集スキャンを容易にするために、左揃えのオプションよりも対称的に見えるデザインを使用することが重要である多くの状況を想像できます。たとえば、モバイルデバイスで画面全体を100%横切る性別選択オプションが必要な場合、テキスト「男性」と「女性」が左端に押されているのは非常に奇妙に見えます。
Kent Munthe Caspersen

text-align-last:center;を試してください。
アリ

回答:


29

これはプレーンなCSSでは不可能であり、ブラウザ間で完全に互換性を持たせることはできません。

ただし、jQueryプラグインを使用して、ドロップダウンをスタイルできます。

https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html

このプラグインは、select要素を非span表示にし、その場で要素などを作成して、カスタムのドロップダウンリストスタイルを表示します。スパンなどのスタイルを変更して、アイテムを中央揃えにすることができると確信しています。



386

Chromeには部分的な解決策があります:

select { width: 400px; text-align-last:center; }

選択したオプションは中央に配置されますが、ドロップダウン内のオプションは中央に配置されません。


18
Safariではサポートされていません
ただし、

1
Edgeでもサポートされていません。
mortenpi

13
Firefoxでは機能しませんが、Firefoxで機能するのはtext-align: centerです。
Noitidart 2017年

3
width必要ありません。
Vahid Amiri 2017

3
くそー、これは完璧です。最新のFirefoxでも動作します... + rep
w411 3

81

それは右揃えです。それを試してみてください:

select{
    text-align-last:right;
    padding-right: 29px;
    direction: rtl;
}

以下のためのブラウザのサポートtext-align-last属性は、ここで見つけることができます:https://www.w3schools.com/cssref/css3_pr_text-align-last.asp 唯一のSafariはまだそれをサポートしていないように見えます。


7
これが一番の答えになるはずです。シンプルで純粋なCSSソリューションが私にとっては完璧に機能しました(ただし、中央のラベルが必要なものに変更text-align-last: right;centerました)。
JVG

この答えはすごい!こんな簡単な解決策は他にありませんでした。
udog 2017年

どうもありがとうございました。これが完全に機能するため、この回答を選択する必要があります。
ニック

1
text-align-last:center; クロムとファイアフォックスだけで私のために働きます。エッジではなく、私はサファリにも賭けます。
Dennis Heiden 2017年

1
これは、どのモバイルブラウザでも機能しません。これが主に私が機能させたい場所です。
evolross

58

CSSルールを選択クラスに入れる必要があります。

CSSテキストインデントを使用する

<select class="day"> /* option 1 option 2 option 3 option 4 option 5 here */ </select>

CSSコード

select { text-indent: 5px; }

2
取得できなかったか、単にテキストを整列させるために機能しないかのどちらかです
matanster

text-indent ...興味深いことに、私はそのプロパティについて知りませんでした。どうもありがとう!
Froxx 16

9
これは1つの特定のオプションでのみ機能します。テキストインデントは、選択ボックスの幅との関係でオプションのテキストを取得する水平スペースの量に依存するため、これは不完全な回答です。テキストインデントの使用は、上記のSmee氏から提供されました。
Lu Roman

興味深いアイデアですが、パーセンテージでは機能しないので、どのようにしてすべてのアイテムを中央揃えにできるでしょうか。
Buts

これが正解です。テキストインデントの使用:50%は、select内のオプションを中央に配置します。
ジョンスミス

49

はい、可能です。あなたはtext-align-lastを使うことができます

text-align-last: center;

1
これは、クローズ時にselectに表示される値を中央に揃えるようです。ドロップダウンのオプションは依然として左揃えです(少なくともChromeでは2019年9月現在)
bjg222

1
はい、中央に表示したいのですが、それは正しいです
Pritesh

24

2020、私は使用しています:

select {
    text-align: center;
    text-align-last: center;
    -moz-text-align-last: center;
}

残念ながら、これはSafariでは機能しません...そして2020年5月の時点で、AppleはiOS上の他のすべてのブラウザーにSafariのレンダリングエンジンの使用を
強制してい

22

これを使うだけです:

select {

text-align-last: center;
padding-right: 29px;

}

3
「padding-right:29px;」を含める必要はありません。「center」を使用している場合。16年10月25日からAly-Elgarhyの回答をコピーしたためだと思います。
ジェイデンローソン

あなたが誰かの答えからコピーするとき、あなたは彼らの名前に言及すべきです。
Munim Munna 2018

いいえ、それを直接コードから直接コピーしました。そのため、パディング権を設定しました。別のソリューションからコードにソリューションをコピーし、コードからスタックオーバーフローにソリューションをコピーしました。
Amine_Dev

21

select {
  text-align: center;
  text-align-last: center;
}
option {
  text-align: left;
}
<select>
   <option value="">(please select a state)</option>
   <option class="lt" value="--">none</option>
   <option class="lt" value="AL">Alabama</option>
   <option class="lt" value="AK">Alaska</option>
   <option class="lt" value="AZ">Arizona</option>
   <option class="lt" value="AR">Arkansas</option>
   <option class="lt" value="CA">California</option>
   <option class="lt" value="CO">Colorado</option>
</select>


1
これは、私を+1した唯一のソリューションでした

2020年5月-これはSafari(またはすべてのiOSデバイスのブラウザー)では機能しません
Doomd

16

このJS関数はあなたのために働くはずです

function getTextWidth(txt) {
  var $elm = $('<span class="tempforSize">'+txt+'</span>').prependTo("body");
  var elmWidth = $elm.width();
  $elm.remove();
  return elmWidth;
}
function centerSelect($elm) {
    var optionWidth = getTextWidth($elm.children(":selected").html())
    var emptySpace =   $elm.width()- optionWidth;
    $elm.css("text-indent", (emptySpace/2) - 10);// -10 for some browers to remove the right toggle control width
}
// on start 
$('.centerSelect').each(function(){
  centerSelect($(this));
});
// on change
$('.centerSelect').on('change', function(){
  centerSelect($(this));
});

ここで完全なCodepen:http ://codepen.io/anon/pen/NxyovL


9

私は常に次のハックを避けて、CSSのみで動作するようにしました。

padding-left: 45%;
font-size: 50px;

パディングはテキストを中央揃えにし、テキストサイズに合わせて調整できます:)

これは、検証の観点からは100%正しくないことは明らかですが、それでうまくいきます:)


7

テキスト長が類似しているオプションのリストがある場合の代替の「偽の」ソリューション(たとえば、ページ選択):

padding-left: calc(50% - 1em);

これはChrome、Firefox、Edgeで機能します。ここでは、テキストを左から中央にプッシュし、長さの半分をpx、em、またはその他のオプションテキストで減算します。

ここに画像の説明を入力してください

最良のソリューションIMO(2017年)は、JSを介して選択を置き換え、独自の偽の選択ボックスをdivなどで構築し、クロスブラウザーのサポートのためにクリックイベントをバインドします。


1
Chromeでは機能しますが、IEでは中央よりも少しずれています。
user3366706

5

中央揃えではありませんが、上記の例を使用すると、選択ボックスに左マージンを作成できます。

<style>.UName { text-indent: 5px; }</style><br>

<select  name="UserName" id="UserName" size="1">
    <option class="UName" selected value="select">Select User</option>
    <option class="UName" value="User1">User 1 Name</option>
    <option class="UName" value="User2">User 2 Name </option>
    <option class="UName" value="User3">User 3 Name</option>
</select>

@marc carrerasが言ったようtext-indent<select>タグに追加しないのはなぜですか?
Munim Munna



2

あなたは本当にカスタマイズすることはできません<select>か、<option>ずっと。唯一の方法(クロスブラウザー)は、divとcss / jsを使用して手動でドロップダウンを作成し、同様の何かを作成することです。


2

解決策が見つからなかった場合は、angularjsでこのトリックを使用するか、jsを使用して、div上のテキストで選択した値をマッピングできます。このソリューションは、angularに完全に準拠したcssですが、selectとdivの間のマッピングが必要です。

var myApp = angular.module('myApp', []);

myApp.controller('selectCtrl', ['$scope',
  function($scope) {
    $scope.value = '';


  }
]);
.ghostSelect {
  opacity: 0.1;
  /* Should be 0 to avoid the select visibility but not visibility:hidden*/
  display: block;
  width: 200px;
  position: absolute;
}
.select {
  border: 1px solid black;
  height: 20px;
  width: 200px;
  text-align: center;
  border-radius: 5px;
  display: block;
}
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Example - example-guide-concepts-1-production</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-app="myApp">
  <div ng-app ng-controller="selectCtrl">
    <div class=select>
      <select ng-model="value" class="ghostSelect">
        <option value="Option 1">Option 1</option>
        <option value="Option 2">Option 2</option>
        <option value="Option 3">Option 3</option>
      </select>
      <div>{{value}}
      </div>
    </div>
  </div>
</body>

電話ギャップでこの解決策を見つけるのに1日かかったので、これが誰かにとって役立つことを願っています。


真ん中にはありません!
Qui-Gon Jinn

1

選択内のオプションテキストを中央に配置することはできませんが、絶対配置されたdivを選択の上に配置して同じ効果を得ることができます。

#centered
{
  position: absolute;
  top: 10px;
  left: 10px;
  width: 818px;
  height: 37px;
  text-align: center;
  font: bold 24pt calibri;
  background-color: white;
  z-index: 100;
}

#selectToCenter
{
  position: absolute;
  top: 10px;
  left: 10px;
  width: 840px;
  height: 40px;
  font: bold 24pt calibri;
}

$('#selectToCenter').on('change', function () {
    $('#centered').text($(this).find('option:selected').text());
});

<select id="selectToCenter"></select>
<div id="centered"></div>

divとselectの両方がドキュメント内の固定位置にあることを確認してください。


0

まだ100%ではありませんが、このスニペットを使用できます!

text-align-last:center; // Chromeのtext-align:center; // Firefoxの場合

現時点では、SafariまたはEdgeでは機能しません。


-3

オプションが静的である場合、選択ボックスで変更イベントをリッスンし、個々のアイテムごとにパディングを追加できます

$('#id').change(function() {
    var select = $('#id');
    var val = $(this).val();

    switch(val) {
        case 'ValOne':
            select.css('padding-left', '30px');
            break;
        case 'ValTwoLonger':
            select.css('padding-left', '20px');
             break;
        default:
            return;
    }
});

各単語のパディングを左に置くのは良い考えではありません。データベースから出てくる動的な単語はどうですか?
user3645907

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.