วิธีการจัดรูปแบบตัวเลือกขององค์ประกอบ "เลือก" html


202

นี่คือ HTML ของฉัน:

<select id="ddlProducts" name="ddProducts"> 
    <option>Product1 : Electronics </option>
    <option>Product2 : Sports </option>
</select>

ฉันต้องการสร้างชื่อของผลิตภัณฑ์ (เช่น 'Product1', 'Product2' ฯลฯ ) เป็นตัวหนาและหมวดหมู่ (ได้แก่ อิเล็กทรอนิกส์, กีฬา, ฯลฯ ) เป็นตัวเอียงโดยใช้ CSS เท่านั้น ฉันพบคำถามเก่าที่กล่าวถึงมันเป็นไปไม่ได้โดยใช้ HTML และ CSS แต่หวังว่าจะมีวิธีแก้ปัญหา


ไม่แน่ใจเกี่ยวกับอันนี้ โดยที่ฉันไม่คิด คุณจะต้องใช้เวทย์มนตร์ JavaScript (jQuery) เพื่อที่จะเกิดขึ้น
ผีของมาดาราระ

6
ตัวเลือกยังคงน่ารำคาญตามสไตล์เท่าที่เคยมีมา สิ่งที่คุณอาจต้องการใช้คือ optgroup: htmlhelp.com/reference/html40/forms/optgroup.html สิ่งนี้จะทำให้คุณมีหมวดหมู่ที่เป็นตัวหนาและเป็นตัวเอียง (เช่นอิเล็กทรอนิกส์) ซึ่งมีตัวเลือกมากมาย
wolv2012

คำตอบ:


200

มีคุณลักษณะสไตล์เพียงไม่กี่อย่างที่สามารถใช้กับ<option>องค์ประกอบได้

นี่เป็นเพราะองค์ประกอบประเภทนี้เป็นตัวอย่างของ "องค์ประกอบที่ถูกแทนที่" มันขึ้นอยู่กับระบบปฏิบัติการและไม่ได้เป็นส่วนหนึ่งของ HTML / เบราว์เซอร์ ไม่สามารถจัดสไตล์CSSได้

มีปลั๊กอิน / ไลบรารีทดแทนที่มีลักษณะคล้าย<select>แต่ประกอบไปด้วยHTMLองค์ประกอบปกติที่สามารถจัดรูปแบบได้


2
พฤติกรรมนี้แตกต่างกันไปตามเบราว์เซอร์และระบบปฏิบัติการที่แตกต่างกัน คุ้มค่าที่จะอธิบายหากคุณกำลังพูดถึง IE เป็นหลักใน Windows
Vince Bowdren

4
คุณสามารถจัดสไตล์select > optionได้ แต่ไม่มี crossbrowser solution ที่น่าเชื่อถือสำหรับการทำเช่นนั้นและอย่างน้อยที่สุดคุณสามารถกำหนดขนาดตัวอักษร, ครอบครัว, พื้นหลังและสีพื้นหน้าได้มากที่สุด อาจมีการปรับแต่งเพิ่มเติมบางอย่าง แต่สิ่งต่าง ๆ เช่น padding, สีโฮเวอร์และเช่นฉันไม่สามารถประสบความสำเร็จในการเปลี่ยนแปลง อันที่จริงอาจมีทางเลือก แต่ขึ้นอยู่กับโครงการแท็ก <select> อาจจำเป็นสำหรับตัวอย่างสำหรับการตรวจสอบเชิงมุมหรือเหตุผลอื่น ๆ
Felype

3
@ ไม่มีฉันโพสต์คำตอบไปที่แท็กตัวเลือกการออกแบบ มันไม่ได้แสดงวิธีการสไตล์<option>แต่มันจะแสดงวิธีการเลียนแบบ<select>เพื่อให้คุณสามารถจัดรูปแบบตัวเลือก
UndoingTech

3
แม้ว่านี่จะเป็นคำตอบที่ยอมรับ แต่ก็เป็นไปได้ที่จะจัดสไตล์OPTIONด้วย CSS พร้อมเบราว์เซอร์ที่ทันสมัย ​​- เพิ่มแท็กสไตล์ให้กับตัวเลือก
Jimmery

2
ในการแนะนำอุปกรณ์พกพาสิ่งนี้มีความเป็นสไตล์ที่น้อยลงเนื่องจากองค์ประกอบตัวเลือกไม่ได้แสดงให้เห็นเมื่อเทียบกับการเลือกในโฟลว์หน้า - มันถูกลิสต์ในส่วนเลื่อนแยกที่ด้านล่างของหน้าจอ วิธีที่คุณคาดหวังในเบราว์เซอร์แบบดั้งเดิม
ความกลัว

74

ไม่เป็นไปไม่ได้เนื่องจากสไตล์ขององค์ประกอบเหล่านี้ได้รับการจัดการโดยระบบปฏิบัติการของผู้ใช้ MSDN จะตอบคำถามของคุณที่นี่ :

ยกเว้นbackground-colorและcolorการตั้งค่าสไตล์ที่ใช้ผ่านวัตถุสไตล์สำหรับองค์ประกอบตัวเลือกจะถูกละเว้น


ดังนั้นข้อสรุปคือ: "ตัวเลือกของตัวเลือกไม่สามารถกำหนดสไตล์ได้เพียงบางส่วนด้วย CSS" ใช่ไหม ??? :(
MrClan

27
จุดสำคัญที่นี่คือพวกเขาสามารถจัดสไตล์เพียงเล็กน้อยเท่านั้น
devios1

1
ในการเพิ่มไปยังจุดของ devios - การเลือกเนทีฟสามารถกำหนดสไตล์ให้เล็กที่สุดสำหรับ Windows แต่ไม่จำเป็นสำหรับ OS อื่น ๆ ตามที่ระบุไว้ด้านล่างคุณจะต้องสลับการเลือกสำหรับองค์ประกอบอื่น ๆ (โดยปกติจะเป็น ul) และฟังก์ชั่นการเลือกที่ซ้ำกันใน JavaScript เพื่อควบคุมรูปแบบทั้งหมด
Benjamin Robinson

3
<option style = "color: 'red';"> ไม่ได้ผลสำหรับฉัน ... คำแนะนำใช่ไหม
fabio

1
style="background-color: red;color: red;"ไม่ได้ผลสำหรับฉัน แก้ไข: หลังจากปิดคอนโซลนักพัฒนาแล้วจะมีการนำสไตล์ไปใช้
Black

33

คุณสามารถจัดสไตล์องค์ประกอบของตัวเลือกได้ในระดับหนึ่ง

การใช้แท็ก * CSS คุณสามารถจัดรูปแบบตัวเลือกภายในกล่องที่ระบบวาดขึ้น

ตัวอย่าง:

#ddlProducts *
{
 border-radius:15px;
 background-color:red;
}

ที่จะมีลักษณะเช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่


2
นั่นเป็นความจริงเพียงเพราะตัวเลือกทั้งหมดกำหนดเป้าหมายเงาภายในเครื่อง DOM คุณสามารถกำหนดเป้าหมายด้วยตนเองต่อเบราว์เซอร์
mystrdat

20

ฉันพบและใช้ตัวอย่างที่ดีของการจัดแต่งทรงผมให้เลือกและตัวเลือกคุณสามารถทำกับตัวเลือกนี้ทั้งหมดที่คุณต้องการนี่คือซอ

HTML

<select id="selectbox1">
    <option value="">Select an option&hellip;</option>
    <option value="aye">Aye</option>
    <option value="eh">Eh</option>
    <option value="ooh">Ooh</option>
    <option value="whoop">Whoop</option>
</select>
<select id="selectbox2">
    <option value="">Month&hellip;</option>
    <option value="january">January</option>
    <option value="february">February</option>
    <option value="march">March</option>
    <option value="april">April</option>
    <option value="may">May</option>
    <option value="june">June</option>
    <option value="july">July</option>
    <option value="august">August</option>
    <option value="september">September</option>
    <option value="october">October</option>
    <option value="november">November</option>
    <option value="december">December</option>
</select>

CSS

body {
    padding:50px;
    background-color:white;
}
.s-hidden {
    visibility:hidden;
    padding-right:10px;
}
.select {
    cursor:pointer;
    display:inline-block;
    position:relative;
    font:normal 11px/22px Arial, Sans-Serif;
    color:black;
    border:1px solid #ccc;
}
.styledSelect {
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    left:0;
    background-color:white;
    padding:0 10px;
    font-weight:bold;
}
.styledSelect:after {
    content:"";
    width:0;
    height:0;
    border:5px solid transparent;
    border-color:black transparent transparent transparent;
    position:absolute;
    top:9px;
    right:6px;
}
.styledSelect:active, .styledSelect.active {
    background-color:#eee;
}
.options {
    display:none;
    position:absolute;
    top:100%;
    right:0;
    left:0;
    z-index:999;
    margin:0 0;
    padding:0 0;
    list-style:none;
    border:1px solid #ccc;
    background-color:white;
    -webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
    -moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
    box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
}
.options li {
    padding:0 6px;
    margin:0 0;
    padding:0 10px;
}
.options li:hover {
    background-color:#39f;
    color:white;
}

JS

// Iterate over each select element
$('select').each(function () {

    // Cache the number of options
    var $this = $(this),
        numberOfOptions = $(this).children('option').length;

    // Hides the select element
    $this.addClass('s-hidden');

    // Wrap the select element in a div
    $this.wrap('<div class="select"></div>');

    // Insert a styled div to sit over the top of the hidden select element
    $this.after('<div class="styledSelect"></div>');

    // Cache the styled div
    var $styledSelect = $this.next('div.styledSelect');

    // Show the first select option in the styled div
    $styledSelect.text($this.children('option').eq(0).text());

    // Insert an unordered list after the styled div and also cache the list
    var $list = $('<ul />', {
        'class': 'options'
    }).insertAfter($styledSelect);

    // Insert a list item into the unordered list for each select option
    for (var i = 0; i < numberOfOptions; i++) {
        $('<li />', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }

    // Cache the list items
    var $listItems = $list.children('li');

    // Show the unordered list when the styled div is clicked (also hides it if the div is clicked again)
    $styledSelect.click(function (e) {
        e.stopPropagation();
        $('div.styledSelect.active').each(function () {
            $(this).removeClass('active').next('ul.options').hide();
        });
        $(this).toggleClass('active').next('ul.options').toggle();
    });

    // Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item
    // Updates the select element to have the value of the equivalent option
    $listItems.click(function (e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        /* alert($this.val()); Uncomment this for demonstration! */
    });

    // Hides the unordered list when clicking outside of it
    $(document).click(function () {
        $styledSelect.removeClass('active');
        $list.hide();
    });

});

1
คุณช่วยกรุณาโพสต์รหัสที่นี่เพราะอาจจะบางวันมันจะถูกลบออก แต่ที่นี่มันจะอยู่ในสถานที่ที่บันทึก
Mohammad Alabed

มันเป็นวิธีที่มีชีวิตชีวามากในการทำสิ่งที่คุณต้องการด้วยการเลือกถ้าคุณจะมีตัวเลือกที่ดีกว่าฉันยินดีที่จะเห็นมันเป็นคำตอบที่นี่ @ahnbizcad
Anahit DEV

17
นี่ไม่ใช่ html แบบดั้งเดิม <select>เพียงแค่แสดงผลอีกครั้งด้วยรหัส jQuery ถ้าคุณจะทำอาจนี้เป็นอย่างดีใช้ปลั๊กอิน jQuery ที่ตอบสนององค์ประกอบอื่น ๆ ที่แป้นพิมพ์จับขึ้น / ลง, typeahead / ค้นหา ฯลฯ
จอห์น Culviner

10

นี่คือวิธีในการจัดสไตล์<option>พร้อมกับ<select>หากคุณใช้ Bootstrap และ / หรือ jquery ฉันเข้าใจว่านี่ไม่ใช่สิ่งที่ผู้โพสต์ดั้งเดิมถาม แต่ฉันคิดว่าฉันสามารถช่วยเหลือผู้อื่นที่สะดุดกับคำถามนี้ได้

คุณยังสามารถบรรลุเป้าหมายของการจัดแต่งทรงผมแต่ละคน<option>แยกกัน แต่อาจจะต้องใช้สไตล์บางอย่างเพื่อ<select>ได้เป็นอย่างดี ฉันชอบคือห้องสมุด "Bootstrap Select" ที่กล่าวถึงด้านล่าง


Bootstrap Select Library (jquery)

หากคุณใช้ bootstrap อยู่แล้วคุณสามารถลองใช้Bootstrap Select libraryหรือไลบรารี่ด้านล่าง (เพราะมันมีธีม bootstrap)

โปรดทราบว่าคุณสามารถจัดselectองค์ประกอบทั้งหมดหรือoptionแยกองค์ประกอบได้

ตัวอย่าง :

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

Dependencies : ต้องการjQuery v1.9.1 +, Bootstrap , ส่วนประกอบ dropdown.js ของ Bootstrap และ CSS ของ Bootstrap

ความเข้ากันได้ : ไม่แน่ใจ แต่ bootstrap กล่าวว่า "รองรับเบราว์เซอร์และแพลตฟอร์มที่สำคัญทั้งหมดที่ออกล่าสุด"

การสาธิต : https://developer.snapappointments.com/bootstrap-select/examples/

.special {
  font-weight: bold !important;
  color: #fff !important;
  background: #bc0000 !important;
  text-transform: uppercase;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/css/bootstrap-select.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/js/bootstrap-select.min.js"></script>

<select class="selectpicker">
  <option>Mustard</option>
  <option class="special">Ketchup</option>
  <option style="background: #5cb85c; color: #fff;">Relish</option>
</select>


เลือก 2 (JS lib)

มีห้องสมุดที่คุณสามารถใช้เรียกว่าเป็นSelect2

Select2

การพึ่งพา : ไลบรารีคือ JS + CSS + HTML เท่านั้น (ไม่ต้องการ JQuery)

ความเข้ากันได้ : IE 8+, Chrome 8+, Firefox 10+, Safari 3+, Opera 10.6+

การสาธิต : https://select2.org/getting-started/basic-usage

นอกจากนี้ยังมีชุดรูปแบบการบูตใช้ได้

ไม่มีตัวอย่าง Bootstrap:

$(function() {
  var $select = $('.select2');
  
  $select.select2({
    theme: 'paper'
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/>

<select class="select2 form-control" placeholder="Country">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
</select>

ตัวอย่าง Bootstrap:

$(function() {
  var $select = $('.select2');
  
  $select.select2({
    theme: 'paper'
  });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.2/paper/bootstrap.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/>

<select class="select2 form-control" placeholder="Country">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
</select>


MDBootstrap ($ & Bootstrap & JQuery)

ถ้าคุณมีเงินเพิ่มคุณสามารถใช้MDBootstrap ไลบรารี่แบบพรีเมี่ยมได้ (นี่เป็นชุด UI ทั้งหมดดังนั้นจึงไม่เบา)

นี้ช่วยให้คุณเลือกสไตล์และตัวเลือกในองค์ประกอบของคุณโดยใช้การออกแบบวัสดุ

ป้อนคำอธิบายรูปภาพที่นี่

มีรุ่นฟรี แต่จะไม่อนุญาตให้คุณใช้การออกแบบวัสดุที่สวยงาม!

การพึ่งพา : Bootstrap 4 , JQuery,

ความเข้ากันได้ : "รองรับรุ่นล่าสุดที่เสถียรของเบราว์เซอร์และแพลตฟอร์มที่สำคัญทั้งหมด"

การสาธิต : https://mdbootstrap.com/docs/jquery/forms/select/#color


19
เนื่องจากคำถามเกี่ยวกับการกำหนดสไตล์องค์ประกอบตัวเลือกไม่ใช่องค์ประกอบที่เลือก
Jsalinas

5
คำตอบนี้ทำให้เข้าใจผิดเนื่องจากในขณะที่คุณแสดงให้เห็นอย่างชัดเจนว่าคุณสามารถเลือกรูปแบบได้คุณอ้างว่าตัวเลือกนั้นเป็นสิ่งที่สามารถจัดสไตล์ได้แม้ว่าจะเป็นองค์ประกอบของระบบปฏิบัติการที่ยอมรับสไตล์ CSS เพียงเล็กน้อยเท่านั้น
แอนดรูเกรย์

@Jalina ขออภัยคำตอบก่อนหน้าของฉันโหดเหี้ยม ฉันแทนที่มันด้วยอันที่ฉันหวังว่าจะดีกว่า
Katie

1
คำตอบที่ดี! ตัวอย่างที่ดี!
cskwg

Select2 4.0 นั้นไม่ได้เป็นของบริสุทธิ์อีกต่อไป
galmok

9

ดูเหมือนว่าฉันจะสามารถตั้งค่า CSS สำหรับselectใน Chrome ได้โดยตรง โค้ด CSS และ HTML ที่ให้ไว้ด้านล่าง:

.boldoption {
	font-weight: bold;
}
<select>
	<option>Some normal-font option</option>
	<option>Another normal-font option</option>
	<option class="boldoption">Some bold option</option>
</select>
ป้อนคำอธิบายรูปภาพที่นี่


2
@Muhamed Al Khalil: ฉันอัปเดตตัวอย่างให้ชัดเจนยิ่งขึ้นเนื่องจากตัวเลือกที่เลือกในปัจจุบันมีสไตล์เป็นของตัวเองเช่นกัน หากไม่ได้ผลฉันสงสัยว่าปัญหาความเข้ากันได้ของเบราว์เซอร์นั้น = \
HoldOffHunger

3
@Akash: น่าสนใจใช้งานได้กับ Firefox ก่อนปล่อย Firefox Quantum และยังคงใช้งานได้บน Chrome (ผู้ใช้ 60% +) ฉันเดิมพันมันเป็นข้อผิดพลาด!
HoldOffHunger

1
ใช้งานได้เฉพาะกับดรอปดาวน์ไม่ใช่สิ่งที่แสดงตามที่เลือก เลวร้ายเกินไป.
WebDude0482

3

ตามที่ได้กล่าวไปแล้ววิธีเดียวคือใช้ปลั๊กอินที่แทนที่<select>ฟังก์ชั่น

รายการปลั๊กอิน jQuery: http://plugins.jquery.com/tag/select/

ลองดูตัวอย่างโดยใช้Select2ปลั๊กอิน: http://jsfiddle.net/swsLokfj/23/


ใน jQuery ปัจจุบัน Select2 4.x วิธีการทำเช่นนี้แตกต่างกันในขณะนี้ ดู: ตัวอย่าง , เอกสาร
tanius

3

Bootstrap ช่วยให้คุณใช้การกำหนดสไตล์ผ่าน data-content:

<select class="selectpicker">
  <option data-content="<span class='label label-success'>Relish</span>">Relish</option>
</select>

ตัวอย่าง: https://silviomoreto.github.io/bootstrap-select/examples/


9
HTML ที่ฝังอยู่ในคุณลักษณะของข้อมูลทำให้ฉันรู้สึกอึดอัดใจจริงๆ
Ben Hull

2

คุณสมบัติบางอย่างสามารถจัดรูปแบบสำหรับ<option>แท็ก:

  • font-family
  • color
  • font-*
  • background-color

นอกจากนี้คุณสามารถใช้ตัวอักษรที่กำหนดเองสำหรับแต่ละ<option>แท็กเช่นใดตัวอักษร Google , ไอคอนวัสดุหรือแบบอักษรไอคอนอื่น ๆ จากicomoonหรือเหมือนกัน (อาจเป็นประโยชน์สำหรับตัวเลือกแบบอักษรและอื่น ๆ )

เมื่อพิจารณาแล้วคุณสามารถสร้างสแต็กครอบครัวแบบอักษรและแทรกไอคอนใน<option>แท็กเช่น

    <select>
        <option style="font-family: 'Icons', 'Roboto', sans-serif;">a    ★★★</option>
        <option style="font-family: 'Icons', 'Roboto', sans-serif;">b    ★★★★</option>
    </select>

ที่จะนำมาจากส่วนที่เหลือจากIconsRoboto

โปรดทราบว่าแบบอักษรที่กำหนดเองนั้นใช้ไม่ได้กับมือถือที่เลือก


<option style = "color: 'red';"> ไม่ได้ผลสำหรับฉัน ... คำแนะนำใช่ไหม
fabio

1
ลบเครื่องหมายคำพูดออกred: <option style = "color: red;">
dy_

1

ที่จริงแล้วคุณสามารถเพิ่ม: ก่อนและ: หลังจากและสไตล์เหล่านั้น อย่างน้อยมันก็เป็นอะไรบางอย่าง

option{
    font-size:18px;
    background-color:#ffffff;
}
option:before{
    content: ">";
    font-size:20px;
    display:none;
    padding-right:10px;
    padding-left:5px;
    color:#fff;
}
option:hover:before{
    display:inline;
}


1

ปี 2017 และเป็นไปได้ที่จะกำหนดเป้าหมายเฉพาะตัวเลือกการเลือก ในโครงการของฉันฉันมีตารางที่มีclass = "รูปแบบ"และเลือกตัวเลือกอยู่ในเซลล์ของตารางtd = "ค่า"และเลือกมี ID เลือก # pa_color องค์ประกอบตัวเลือกยังมี class option = "พ่วง" (ท่ามกลางแท็กคลาสอื่น ๆ ) หากผู้ใช้เข้าสู่ระบบในฐานะลูกค้าขายส่งพวกเขาสามารถเห็นตัวเลือกสีทั้งหมด แต่ลูกค้ารายย่อยไม่ได้รับอนุญาตให้ซื้อ 2 ตัวเลือกสีดังนั้นฉันจึงปิดใช้งาน

<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>

ใช้ตรรกะเล็กน้อย แต่นี่คือวิธีที่ฉันกำหนดเป้าหมายตัวเลือกตัวเลือกที่ปิดใช้งาน

CSS

table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}

ด้วยเหตุนี้ตัวเลือกสีของฉันจึงปรากฏแก่ลูกค้าขายส่งเท่านั้น


1

ออกจากที่นี่เป็นทางเลือกที่รวดเร็วโดยใช้การสลับคลาสบนโต๊ะ ลักษณะการทำงานคล้ายกันมากกับตัวเลือก แต่สามารถจัดสไตล์ด้วยการเปลี่ยนฟิลเตอร์และสีเด็กแต่ละคนแยกกัน

function toggleSelect(){ 
 if (store.classList[0] === "hidden"){
    store.classList = "viewfull"
  }
  else {
    store.classList = "hidden"
  }
}
#store {
  overflow-y: scroll;
  max-height: 110px;
  max-width: 50%
 }
 
.hidden {
  display: none
 }
 
.viewfull {
  display: block
}

#store :nth-child(4) {
  background-color: lime;
}

span {font-size:2rem;cursor:pointer}
<span onclick="toggleSelect()"></span>
 <div id="store" class="hidden">
 
<ul><li><a href="#keylogger">keylogger</a></li><li><a href="#1526269343113">1526269343113</a></li><li><a href="#slow">slow</a></li><li><a href="#slow2">slow2</a></li><li><a href="#Benchmark">Benchmark</a></li><li><a href="#modal">modal</a></li><li><a href="#buma">buma</a></li><li><a href="#1526099371108">1526099371108</a></li><a href="#1526099371108o">1526099371108o</a></li><li><a href="#pwnClrB">pwnClrB</a></li><li><a href="#stars%20u">stars%20u</a></li><li><a href="#pwnClrC">pwnClrC</a></li><li><a href="#stars ">stars </a></li><li><a href="#wello">wello</a></li><li><a href="#equalizer">equalizer</a></li><li><a href="#pwnClrA">pwnClrA</a></li></ul>
 
 </div>


1

คุณสามารถใช้รูปแบบอินไลน์เพื่อเพิ่มสไตล์ของ custome ให้กับ<option>แท็ก

ตัวอย่างเช่น: <option style="font-weight:bold;color:#09C;">Option 1</option> สิ่งนี้จะใช้สไตล์กับ<option>องค์ประกอบเฉพาะนี้เท่านั้น

จากนั้นคุณสามารถใช้ javascript magic เพื่อใช้สไตล์อินไลน์กับ<option>องค์ประกอบทั้งหมดภายใน<select>แท็กดังนี้:

var select = $(document).getElementById('#select-element-id')

var option = select.children('#option-element-id')

option.css('font-weight', 'bold')

option.css('font-size', '24px')

คุณยังสามารถใช้<option value="" disabled> <br> </option>เพื่อเพิ่มตัวแบ่งบรรทัดระหว่างตัวเลือก


0

องค์ประกอบนี้แสดงผลโดยระบบปฏิบัติการไม่ใช่ HTML ไม่สามารถกำหนดสไตล์ผ่าน CSS ได้

	$(function() {
    var clicky;
    var t=0;
    $(document).mousedown(function(e) {
        clicky = $(e.target);
    });
    $(document).mouseup(function(e) {
        clicky = null;
    });

    $("select").focusout(function(e) {
        if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
        	$(this).parents().children("span.selected").html(clicky.html());
        	$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
		}
        
        $(this).parents().children("span.lists").html('');
        

    });
    $('select > option').text(function(i, text) {
				var attr = $(this).attr('selected');
				if (typeof attr !== typeof undefined && attr !== false) {
        				$(this).parents().parents().children("span.selected").html(text);
				}
	});

		$("select").focusin(function(){
			$(this).children('option').text(function(i, text) {
    			$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
				});
		});

	});
select {
  width: 0px;
  height: 0px;
  overflow:hidden;
  outline: none;
  border: none;
  appearance:none;
  -moz-appearance: none;

}
label{
	display: inline-block;
	padding: 5px 10px;
	position: relative;
	width: 100px;
	height: 20px;
	background-color:#ccc;

}
label .selected{
	display: inline-block;
	overflow: hidden;
	width: 100%;
	height: 100%;
}
label span.lists{
	width: 100%;
	display: inline-block;
	position: absolute;
	top: 100%;
	left: 0px;
	box-shadow: 0px 0px 2px 0px #ccc;
	background-color:#fff;
	z-index: 9;
}
label span.item{
	display: inline-block;
	width: 100%;
	border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<form action="?" method="GET">
	<label><span class="selected">select..</span> <span class="lists"></span>
	<select name="test">
		<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
		<option value="2" selected>item 2</option>
		<option value="3">item 3</option>
		<option value="4">item 4</option>
	</select>
	</label><br>
	<label><span class="selected">select..</span> <span class="lists"></span>
	<select name="test2">
		<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
		<option value="2">item 2</option>
		<option value="3" selected>item 3</option>
		<option value="4">item 4</option>
	</select>
	</label><br>
	<button>Submit</button>
</form>

</body>
</html>

ลองสิ่งนี้มันอาจช่วยคุณได้

[ https://codepen.io/venu9l/pen/jeNXzY][1]

0

คุณสามารถเพิ่มคลาสและให้น้ำหนักแบบอักษร: 700; ในตัวเลือก แต่ด้วยการใช้ข้อความทั้งหมดนี้จะกลายเป็นตัวหนา


0

มันจะทำงานได้อย่างแน่นอน ตัวเลือกที่เลือกนั้นถูกแสดงผลโดยOSไม่ใช่ด้วย html นั่นเป็นเหตุผลที่สไตล์ CSS ไม่มีผลกระทบโดยทั่วไป option{font-size : value ; background-color:colorCode; border-radius:value; }
จะใช้งานได้ แต่เราไม่สามารถกำหนดช่องว่างภายในระยะขอบ ฯลฯ

ด้านล่างโค้ด 100% ทำงานเพื่อปรับแต่งแท็กเลือกที่นำมาจากตัวอย่างนี้

var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
  selElmnt = x[i].getElementsByTagName("select")[0];
  /*for each element, create a new DIV that will act as the selected item:*/
  a = document.createElement("DIV");
  a.setAttribute("class", "select-selected");
  a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
  x[i].appendChild(a);
  /*for each element, create a new DIV that will contain the option list:*/
  b = document.createElement("DIV");
  b.setAttribute("class", "select-items select-hide");
  for (j = 1; j < selElmnt.length; j++) {
    /*for each option in the original select element,
    create a new DIV that will act as an option item:*/
    c = document.createElement("DIV");
    c.innerHTML = selElmnt.options[j].innerHTML;
    c.addEventListener("click", function(e) {
        /*when an item is clicked, update the original select box,
        and the selected item:*/
        var y, i, k, s, h;
        s = this.parentNode.parentNode.getElementsByTagName("select")[0];
        h = this.parentNode.previousSibling;
        for (i = 0; i < s.length; i++) {
          if (s.options[i].innerHTML == this.innerHTML) {
            s.selectedIndex = i;
            h.innerHTML = this.innerHTML;
            y = this.parentNode.getElementsByClassName("same-as-selected");
            for (k = 0; k < y.length; k++) {
              y[k].removeAttribute("class");
            }
            this.setAttribute("class", "same-as-selected");
            break;
          }
        }
        h.click();
    });
    b.appendChild(c);
  }
  x[i].appendChild(b);
  a.addEventListener("click", function(e) {
      /*when the select box is clicked, close any other select boxes,
      and open/close the current select box:*/
      e.stopPropagation();
      closeAllSelect(this);
      this.nextSibling.classList.toggle("select-hide");
      this.classList.toggle("select-arrow-active");
  });
}
function closeAllSelect(elmnt) {
  /*a function that will close all select boxes in the document,
  except the current select box:*/
  var x, y, i, arrNo = [];
  x = document.getElementsByClassName("select-items");
  y = document.getElementsByClassName("select-selected");
  for (i = 0; i < y.length; i++) {
    if (elmnt == y[i]) {
      arrNo.push(i)
    } else {
      y[i].classList.remove("select-arrow-active");
    }
  }
  for (i = 0; i < x.length; i++) {
    if (arrNo.indexOf(i)) {
      x[i].classList.add("select-hide");
    }
  }
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
  position: relative;
  font-family: Arial;
}
.custom-select select {
  display: none; /*hide original SELECT element:*/
}
.select-selected {
  background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
  position: absolute;
  content: "";
  top: 14px;
  right: 10px;
  width: 0;
  height: 0;
  border: 6px solid transparent;
  border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
  border-color: transparent transparent #fff transparent;
  top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
  color: #ffffff;
  padding: 8px 16px;
  border: 1px solid transparent;
  border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
  cursor: pointer;
}
/*style items (options):*/
.select-items {
  position: absolute;
  background-color: DodgerBlue;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
  display: none;
}
.select-items div:hover, .same-as-selected {
  background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
  <select>
    <option value="0">Select car:</option>
    <option value="1">Audi</option>
    <option value="2">BMW</option>
    <option value="3">Citroen</option>
    <option value="4">Ford</option>
    <option value="5">Honda</option>
    <option value="6">Jaguar</option>
    <option value="7">Land Rover</option>
    <option value="8">Mercedes</option>
    <option value="9">Mini</option>
    <option value="10">Nissan</option>
    <option value="11">Toyota</option>
    <option value="12">Volvo</option>
  </select>
</div>


จากการทบทวน: สวัสดีโปรดอย่าตอบเพียงแค่มีซอร์สโค้ด พยายามให้คำอธิบายที่ดีเกี่ยวกับวิธีการแก้ปัญหาของคุณ ดู: ฉันจะเขียนคำตอบที่ดีได้อย่างไร . ขอบคุณ
sɐunıɔןɐqɐp

รหัสนี้ตรงจาก w2schools w3schools.com/howto/tryit.asp?filename=tryhow_custom_select
devpato

0

แม้ว่าจะมีคุณสมบัติไม่มากที่จะเปลี่ยน แต่คุณสามารถบรรลุสไตล์ต่อไปนี้กับ css เท่านั้น:

ป้อนคำอธิบายรูปภาพที่นี่

HTML:

<div class="options">
    <select>
        <option value="">Apple</option>
        <option value="">Banana</option>
        <option value="">Orange</option>
        <option value="">Mango</option>
    </select>
</div>

CSS:

.options {

    border: 1px solid #e5e5e5;
    padding: 10px;

    select {
        font-size: 14px;
        border: none;
        width: 100%;
        background: white;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.