선택 상자에서 텍스트를 가운데에 배치 할 수 있습니까?


199

나는 이것을 시도했다 : 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

10
크롬에서는 작동하지 않습니다.
Emmanuel

4
@Blazemonger 저는 인간이 사전 편집을 용이하게하기 위해 왼쪽 정렬 옵션보다 대칭으로 보이는 디자인이 더 중요하다는 많은 상황을 상상할 수 있습니다. 예를 들어 휴대 기기에서 화면을 가로로 100 % 채우는 성별 선택 옵션을 사용하려면 '남성'과 '여성'텍스트가 왼쪽 끝까지 눌려져있는 것이 매우 이상합니다.
켄트먼트 캐스

text-align-last : center를 시도하십시오.
Ari

답변:


30

일반 CSS로는 이것이 불가능하고 브라우저 간 완벽하게 호환되도록 할 수 없습니다.

그러나 jQuery 플러그인을 사용하면 드롭 다운의 스타일을 지정할 수 있습니다.

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

이 플러그인은 select요소를 숨기고 span사용자 정의 드롭 다운 목록 스타일을 표시하기 위해 요소 등을 즉석에서 만듭니다 . 스팬 등의 스타일을 변경하여 항목을 중앙 정렬 할 수 있다고 확신합니다.


web.archive.org/web/20160328192510/http://filamentgroup.com/lab/… 필라멘트 그룹이 더 이상 유지되지 않는 개선 된 버전이 있습니다. github.com/fnagel/jquery-ui
cdignam

390

Chrome 에는 부분적인 해결책이 있습니다 .

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

선택한 옵션의 가운데에 있지만 드롭 다운 내의 옵션에는 없습니다.


18
Safari에서 지원되지 않음
Buts

1
Edge에서도 지원되지 않습니다.
mortenpi

13
Firefox에서는 작동하지 않지만 Firefox에서는 작동합니다 text-align: center.
Noitidart

3
width필요가 없습니다.
Vahid Amiri

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
(I 변경 있지만 이는 정상 응답, 나를 위해 완벽하게 작동하는 간단한 & 순수 CSS의 솔루션이 될 수 있어야 text-align-last: right;center내가 중간에 레이블을 원하는대로).
JVG

이 대답은 흔들린다! 다른 곳에서는 그런 간단한 해결책을 찾지 못했습니다.
udog

고마워요.이 답변은 완전히 작동하므로 선택해야합니다!
Nick

1
텍스트 정렬-마지막 : 센터; 크롬과 파이어 폭스에서 나를 위해 일합니다. 가장자리에 있지 않다. 그리고 나는 또한 사파리에 내기를 걸었다.
Dennis Heiden

1
모바일 브라우저에서는 작동하지 않습니다. 어느 곳에서 주로 작동하고 싶습니다.
evolross

58

CSS 규칙을 select 클래스에 넣어야합니다.

CSS 텍스트 들여 쓰기 사용

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

CSS 코드

select { text-indent: 5px; }

2
나는 그것을 얻지 못했거나 단순히 텍스트를 맞추기 위해 작동하지 않습니다
matanster

문자 들여 쓰기 ... 흥미 롭습니다. 그 속성에 대해 몰랐습니다. 고마워요!
Froxx

9
이것은 하나의 특정 옵션에서만 작동하며 텍스트 들여 쓰기는 선택 상자 너비와 관련하여 옵션의 텍스트를 차지하는 수평 공간의 양에 따라 달라 지므로 불완전한 답변입니다. 텍스트 들여 쓰기를 사용하여 위의 Smee 씨가 제공했습니다.
Lu Roman

흥미로운 아이디어이지만 백분율로 작동하지 않으므로 모든 단일 항목을 어떻게 중앙에 배치 할 수 있습니까?
Buts

이것이 정답입니다. 텍스트 들여 쓰기 사용 : 50 %는 선택 내부에 옵션을 배치합니다.
John Smith

51

네 가능합니다. 마지막 텍스트 정렬을 사용할 수 있습니다

text-align-last: center;

1
닫을 때 선택에 표시된 값을 중앙에 배치하는 것 같습니다. 드롭 다운 메뉴의 옵션은 여전히 (크롬 적어도 2019년 9월 현재) 왼쪽으로 정렬
bjg222

1
네 중앙에 표시하고 싶습니다.
Pritesh

26

2020 년, 나는 다음을 사용하고있다 :

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

1
불행히도, 이것은 사파리에서 작동하지 않습니다 ... 2020 년 5 월 현재, 애플은 여전히 ​​iOS의 다른 모든 브라우저가 Safari의 렌더링 엔진을 사용하도록 강요합니다.
Doomd

22

그냥 이것을 사용하십시오 :

select {

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

}

3
"오른쪽 여백 : 29px;"를 포함 할 필요는 없습니다. "center"를 사용하는 경우 16 년 10 월 25 일부터 Aly-Elgarhy의 답변을 복사했기 때문에 당신이 의심합니다.
Jayden Lawson

다른 사람의 답변에서 복사 할 때 상대방의 이름을 언급해야합니다.
무임 문나

Nop, 내 코드에서 그대로 직접 복사 했으므로 padding-right를 넣은 이유는 다른 솔루션에서 내 코드로 솔루션을 복사 한 다음 솔루션을 코드에서 stackoverflow로 복사 한 것일 수 있습니다.
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));
});

전체 코드 펜 : 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>

왜 그냥 추가 text-indent<select>@marc의 카레라스 말했듯이 태그?
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>

phonegap 에서이 솔루션을 찾는 데 하루가 걸렸으므로 누군가에게 유용 할 수 있기를 바랍니다.


중간에 비!
Qui-Gon Jinn 2011

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 %는 아니지만이 스 니펫을 사용할 수 있습니다!

텍스트-마지막-마지막 : 중심; // Chrome 텍스트 정렬 : 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

-5

다음과 같이 & nbsp를 추가하세요.

    <option value="0"> &nbsp&nbsp&nbsp&nbsp&nbsp--Select Name--</option>

중심 정렬 텍스트의 효과를 얻을 때까지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.