Próbowałem tego: 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; }
Jak widać, to nie działa. Czy istnieje sposób wyśrodkowania tekstu w polu wyboru (tylko CSS)?
Odpowiedzi:
Obawiam się, że nie jest to możliwe w przypadku zwykłego CSS i nie będzie możliwe uzyskanie pełnej zgodności z różnymi przeglądarkami.
Jednak używając wtyczki jQuery, możesz stylizować menu:
https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html
Ta wtyczka ukrywa
select
element i tworzyspan
elementy itp. W locie, aby wyświetlić niestandardowy styl listy rozwijanej. Jestem pewien, że byłbyś w stanie zmienić style przęseł itp., Aby wyśrodkować elementy.źródło
Istnieje częściowe rozwiązanie dla Chrome :
select { width: 400px; text-align-last:center; }
Wyśrodkowuje wybraną opcję, ale nie opcje w menu rozwijanym.
źródło
text-align: center
.width
to nie jest konieczne.To do wyrównania w prawo. Spróbuj:
select{ text-align-last:right; padding-right: 29px; direction: rtl; }
obsługę tego
text-align-last
atrybutu przez przeglądarkę można znaleźć tutaj: https://www.w3schools.com/cssref/css3_pr_text-align-last.asp Wygląda na to, że tylko Safari nadal go nie obsługuje.źródło
text-align-last: right;
sięcenter
, jak chciałem etykiet w środku).Musisz umieścić regułę CSS w wybranej klasie.
Użyj wcięcia tekstu CSS
Przykład
<select class="day"> /* option 1 option 2 option 3 option 4 option 5 here */ </select>
Kod CSS
select { text-indent: 5px; }
źródło
Tak to mozliwe. Możesz użyć text-align-last
text-align-last: center;
źródło
2020, używam:
select { text-align: center; text-align-last: center; -moz-text-align-last: center; }
źródło
po prostu używając tego:
select { text-align-last: center; padding-right: 29px; }
źródło
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>
źródło
Ta funkcja JS powinna działać dla Ciebie
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)); });
Pełny kod Codepen tutaj: http://codepen.io/anon/pen/NxyovL
źródło
Zawsze udawałem się z następującym hackiem, aby działał tylko z CSS.
padding-left: 45%; font-size: 50px;
dopełnienie wyśrodkuje tekst i można je dostosować do rozmiaru tekstu :)
To oczywiście nie jest w 100% poprawne z punktu widzenia walidacji, ale chyba spełnia swoje zadanie :)
źródło
Alternatywne „fałszywe” rozwiązanie, jeśli masz listę z opcjami podobnymi pod względem długości tekstu (na przykład wybierz stronę):
padding-left: calc(50% - 1em);
Działa to w Chrome, Firefox i Edge. Sztuczka polega na tym, aby przesunąć tekst od lewej do środka, a następnie odjąć połowę długości w px, em lub cokolwiek innego z tekstu opcji.
Najlepsze rozwiązanie IMO (w 2017 r.) Nadal zastępuje selekcję przez JS i buduje własne fałszywe pole wyboru z elementami div lub czymkolwiek i wiąże zdarzenia kliknięcia na nim w celu obsługi wielu przeglądarek.
źródło
Niezupełnie wyśrodkowane, ale korzystając z powyższego przykładu, możesz zrobić lewy margines w polu wyboru.
<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>
źródło
text-indent
do<select>
tagu, jak powiedział @marc carreras?to zadziałało dla mnie:
text-align: center; text-align-last: center;
źródło
Spróbuj tego :
select { padding-left: 50% !important; width: 100%; }
źródło
Nie możesz tak naprawdę dostosować
<select>
ani<option>
dużo. Jedynym sposobem (w różnych przeglądarkach) byłoby ręczne utworzenie listy rozwijanej z elementami div i css / js, aby utworzyć coś podobnego.źródło
Jeśli nie znalazłeś żadnego rozwiązania, możesz użyć tej sztuczki na angularjs lub użyć js do zmapowania wybranej wartości z tekstem na div, to rozwiązanie jest w pełni zgodne z CSS na angular, ale wymaga mapowania między select i 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>
Mam nadzieję, że to może być przydatne dla kogoś, ponieważ znalezienie tego rozwiązania na phonegap zajęło mi pewnego dnia.
źródło
Chociaż nie możesz wyśrodkować tekstu opcji w zaznaczeniu, możesz umieścić absolutnie umieszczony element div na górze zaznaczenia, aby uzyskać ten sam efekt:
#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>
Upewnij się, że zarówno element div, jak i select mają ustalone pozycje w dokumencie.
źródło
Nie jest jeszcze w 100%, ale możesz użyć tego fragmentu!
text-align-last: center; // Wyrównywanie tekstu w Chrome: center; // W przeglądarce Firefox
Na razie nie działa w Safari ani Edge!
źródło
jeśli opcje są statyczne, możesz nasłuchiwać zdarzenia zmiany w polu wyboru i dodać dopełnienie dla każdego pojedynczego elementu
$('#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; } });
źródło
dodaj & nbsp w ten sposób ...
<option value="0">      --Select Name--</option>
aż uzyskasz efekt wyśrodkowanego tekstu
źródło