Chọn vùng đệm tùy chọn không hoạt động trong chrome


83

Chọn vùng đệm tùy chọn không hoạt động trong chrome

<style>
select option { padding:5px 0px; }
</style>    
<select>
<option>1</option>
<option>2</option>
<option>3</option> 
</select>

2
Bạn đang cố gắng đạt được điều gì? Mỗi tùy chọn sẽ được đệm thêm 5px? Hay chỉ hộp chính?
DeeKayy90

vâng ... Tôi không cần đệm cho giá trị tùy chọn
Piyush Marvaniya

1
Mặc dù nó không phải là đệm hoàn toàn, đối với đệm đệm bên trái, bạn có thể sử dụng & nbsp; trong khi điều này được sửa: jsfiddle.net/chech/u5rcheqf/1
chech

Câu trả lời:


136

Tôi vừa tìm thấy một cách để áp dụng đệm cho đầu vào được chọn trong chrome

select{
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    padding: 5px;
}

Có vẻ như hoạt động trong chrome hiện tại 39.0.2171.71 (64-bit) và safari (tôi chỉ thử nghiệm điều này trên máy mac).

Điều này dường như loại bỏ kiểu mặc định được thêm vào đầu vào đã chọn (nó cũng loại bỏ mũi tên thả xuống), nhưng cho phép bạn sau đó sử dụng kiểu của riêng mình mà không cần chrome ghi đè nó.

Tôi tình cờ gặp bản sửa lỗi này khi sử dụng mã từ đây: http://fettblog.eu/style-select-elements/


1
Một giải pháp khác hoạt động trên tất cả các trình duyệt , là thêm &nbsp;vào Tùy chọn đầu tiên trong danh sách chọn, hãy kiểm tra điều nàyđiều này , Hy vọng sẽ giúp.
shaijut

2
@stom Điều đó có thể hoạt động với phần đệm bên trái và bên phải, nhưng tôi không nghĩ rằng nó sẽ hoạt động cho phần đệm trên và dưới.
rmmoul

Điều này không hoạt động nữa, ít nhất là trong máy của tôi! :)
Nuno cruz

1
Bạn cũng có thể sử dụng một plugin như select2 hoặc được chọn để chuyển đổi các <select><option/></select>phần tử của bạn thành các phần tử hoàn toàn có thể tùy chỉnh <ul><li/></ul>. Bằng cách này, bạn có thể tạo kiểu cho tất cả các menu thả xuống phù hợp với các trường nhập khác hoặc giao diện người dùng chung của bạn.
Tad Wohlrapp

3
các mũi tên bị mất với cái này :(
Raul H

40

Hack đơn giản này sẽ thụt lề văn bản. Hoạt động tốt.

select {
  text-indent: 5px;
}

1
Câu trả lời hoàn hảo. Hoạt động hoàn hảo.
Hussnain Cheema

13
Điều này thêm phần đệm vào chính lựa chọn, nhưng không thêm vào các tùy chọn. Và áp dụng một text-indent đến một tùy chọn không làm việc, hoặc trong Chrome 64.
chris.ribal

Chrome 71 gọi đây là "thuộc tính không xác định".
Đánh dấu

9

Có vẻ như

Rất tiếc, trình duyệt webkit chưa hỗ trợ tạo kiểu các thẻ tùy chọn.

bạn có thể tìm thấy câu hỏi tương tự ở đây

  1. Làm cách nào để tạo kiểu cho phần tử tùy chọn của thẻ chọn?
  2. Giá trị tùy chọn tạo kiểu trong html thả xuống được chọn không hoạt động trên Chrome & Safari

Giải pháp trình duyệt chéo được sử dụng rộng rãi nhất là sử dụng ul li

Hy vọng nó giúp!


9
Cảm ơn vì câu trả lời. Tôi thật ngạc nhiên là sau rất nhiều năm kể từ khi các trang web, HTML và CSS ra đời, vẫn còn thiếu khả năng tạo kiểu cho những thứ như đệm tùy chọn. Các yếu tố tạo kiểu và định vị có thể gây khó chịu, nhưng trong quá trình phát triển Android, điều đó dễ dàng hơn nhiều. Tôi không hiểu tại sao môi trường web với HTML và CSS lại có vẻ "chưa hoàn thành", một "công việc đang tiến hành" so với môi trường máy tính để bàn và thiết bị di động gốc.
Bryan

2
có thể trong tương lai gần web sẽ đẹp hơn và các nhà phát triển sẽ nhận được sự giúp đỡ của shadow dom - robdodson.me/shadow-dom-styles :) hy vọng các nhà phát triển sẽ kiểm soát được lớp bên trong của các phần tử biểu mẫu. RIP IE mặc dù.
Pravin Waychal

2
@Bryan Web là một công nghệ cũ và do đó nó có một số ý tưởng cũ chưa được cải tiến. Do hỗ trợ trình duyệt, các tính năng mới luôn chậm đến với bất kỳ ai và do thiếu nhạy bén (có những cách giải quyết hiện có, mọi người làm và người dùng cuối không nhận thấy rằng các trình duyệt này đang thiếu) nên không có gì thay đổi.
csga5000,

6

Tôi đã sửa nó với cái này

select {
    max-height: calc(1.2em + 24px);
    height: calc(1.2em + 24px);
}


max-height: calc(your line height + (top + bottom padding));
height: calc(your line height + (top + bottom padding));

Đây là giải pháp tốt nhất cho đến nay mà tôi thấy. Nhưng nó chỉ hoạt động với tôi khi nó height: calc(1.2em + 24px);khôngmax-height: calc(1.2em + 24px);
Julius

Julius Tôi đã kiểm tra với tất cả các trình duyệt chính max-height đều hoạt động tốt. nhưng sử dụng thuộc tính chiều cao cũng là một cơ hội tốt.
Ali Sufyan

3

Ý tưởng rất, RẤT đơn giản, nhưng bạn có thể sửa đổi nó cho phù hợp. Điều này không được thiết lập để trông đẹp, chỉ để cung cấp ý tưởng. Hy vọng nó giúp.

CSS:

ul {
    width: 50px;
    height: 20px;
    border: 1px solid black;
    display: block;

}

li {
    padding: 5px 0px;
    width: 50px;
    display: none;

}

HTML:

<ul id="customComboBox">
&nbsp
    <li>Test</li>
    <li>Test 2</li>
    <li>Test 3</li>
</ul>

Kịch bản:

$(document).ready(function(){
    $("#customComboBox").click(function(){
        $("li").toggle("slow");
    });
});

BẢN GIỚI THIỆU


1
@PiyushMarvaniya Tôi hiểu, tuy nhiên, tôi nhớ rằng không thể sửa đổi các phần tử đơn lẻ với tùy chọn select. Đó là lý do tại sao tôi đưa ra một giải pháp thay thế.
DeeKayy90,

1
Ví dụ này không cung cấp điều hướng bàn phím (mũi tên hoặc phím tắt mac), công cụ hỗ trợ truy cập web.
Piotr Łużecki

Một lần nữa, câu hỏi không phải là tạo một menu thả xuống tùy chỉnh, mà là thêm vào phần đệm. Tôi đã đưa ra một cơ sở sinple để OP xây dựng theo yêu cầu của họ, tuy nhiên, tôi sẽ không tạo điều khiển tùy chỉnh cho chúng. =)
DeeKayy90 28/09/15

1
Nếu bạn định sử dụng menu thả xuống UL / LI, tôi khuyên bạn chỉ nên sử dụng tiện ích thả xuống của Bootstrap. Phiên bản 2 và 3 hỗ trợ role = "menu" và role = "navigation" để bật các phím mũi tên. Hợp lý khi sử dụng thứ gì đó đã được IMO kiểm tra kỹ lưỡng.
mbokil

@mbokil +1, chắc chắn là một lựa chọn tốt thay vì phát minh lại bánh xe, hãy sử dụng những gì ở đó.
DeeKayy90

2

Điều đó không hoạt động khi optionnhập bởi vì đó là trình đơn thả xuống do "hệ thống" tạo nhưng bạn có thể đặt tùy paddingchọn.

Chỉ cần đặt lại thuộc box-sizingtính content-boxtrong CSS của bạn.

Giá trị mặc định của selectborder-box.

select {
 box-sizing: content-box;
 padding: 5px 0;
}

bạn có thể đặt vùng đệm của một lựa chọn - hoạt động hoàn hảo trong Chrome 75
danday74

1

Tôi có một mẹo nhỏ cho vấn đề của bạn. Nhưng bạn phải sử dụng javascript. Nếu bạn phát hiện rằng trình duyệt là Chrome, hãy chèn các tùy chọn " giả " vào giữa mọi tùy chọn. Cung cấp một lớp mới cho các tùy chọn " giả " đó và làm cho chúng bị vô hiệu hóa. Chiều cao của các tùy chọn " dummy " mà bạn có thể xác định bằng thuộc tính font-size .

CSS:

option.dummy-option-for-chrome {
  font-size:2px;
  color:transparent;
}

Kịch bản:

function prepareHtml5Selects() {

  var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
  if(!is_chrome) return;

  $('select > option').each(function() {
    $('<option class="dummy-option-for-chrome" disabled></option>')
     .insertBefore($(this));
  });
  $('<option class="dummy-option-for-chrome" disabled></option>')
    .insertAfter($('select > option:last-child'));
}

1

Không phải đệm nhưng nếu mục tiêu của bạn chỉ đơn giản là làm cho nó lớn hơn, bạn có thể tăng font-size. Và sử dụng nó với việc font-size-adjustgiảm kích thước phông chữ trở lại bình thường trên các tùy chọn được chọn và không phải trên các tùy chọn, vì vậy nó sẽ làm cho kích thước phông chữ optionlớn hơn.

Không chắc liệu nó có hoạt động trên tất cả các trình duyệt hay sẽ tiếp tục hoạt động hiện tại.

Đã thử nghiệm trên Chrome 85 và Firefox 81.

ảnh chụp màn hình (trên Firefox)

select {
    font-size: 2em;
    font-size-adjust: 0.3;
}
<label>
  Select: <select>
            <option>Option 1</option>
            <option>Option 2</option>
            <option>Option 3</option>
          </select>
</label>


0

Không có Jquery - Không có tệp js của bên thứ ba

function clickComboBox(){
  comboOpt = document.getElementsByClassName("opt");
  for (i = 0; i < comboOpt.length; i++) {
      if (comboOpt[i].style.display === "block") {
        comboOpt[i].style.display = "none";
      } else {
        comboOpt[i].style.display = "block";
      }
  }    
}
function clickOpt(value1,text1){
  document.getElementById("selectedValue").value=value1;
  document.getElementById("customComboBox").innerHTML=text1;
  clickComboBox();
}
#customComboBox{
width: 150px;
height: 20px;
border: 1px solid #CCCCCC;
display: block;
padding: 2px 5px;
}
.opt{
padding: 5px 0px;background-color:#CCCCCC;
width: 160px;
display: none;
}
<div id="customComboBox"  onClick="clickComboBox()">
-Select Value-
</div>
<input type="hidden" id="selectedValue">
  <div class="opt">
  <div onClick="clickOpt('01','Test1')"><img  src="https://pasteboard.co/J6940Vs.png" height="20">Test1</div>
  <div style="padding-left:10px;" onClick="clickOpt('02','Test2')">Test2</div>
  <div onClick="clickOpt('03','Test3')">Test3</div>
  </div>

mã thông minh - sử dụng jquery


-2

Bạn có thể sử dụng font-sizetài sản cho tùy chọn nếu bạn cần.


Điều này dường như hoạt động trong chrome nhưng không hoạt động trong Firefox (phiên bản mới nhất) Firefox vẫn chỉ nhắm mục tiêu phong cách tại hộp không được chọn trước trình đơn thả xuống.

-8

Chỉ cần đặt chiều cao của thẻ chọn

select{
    height: 30px;
    max-height: 30px;
}

Đây chỉ là lặp lại những gì các câu trả lời khác alreay đã nói, bạn có thể đưa ra điều gì mới cho câu trả lời này không?
Tiw

-9

Bạn nên nhắm mục tiêu chọn cho CSS của mình thay vì chọn tùy chọn.

select { 
padding: 10px;
margin: 0;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
}

Xem bài viết này Hộp chọn tạo kiểu với CSS3 để có thêm tùy chọn tạo kiểu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.