ลบเค้าร่างออกจากกล่องเลือกใน FF


97

เป็นไปได้ไหมที่จะลบเส้นประรอบรายการที่เลือกในองค์ประกอบที่เลือก

ข้อความแสดงแทน

ฉันพยายามเพิ่มoutlineคุณสมบัติใน CSS แต่ไม่ได้ผลอย่างน้อยก็ไม่ใช่ใน FF

<style>
   select { outline:none; }
</style>

อัปเดต
ก่อนที่คุณจะดำเนินการต่อและลบโครงร่างโปรดอ่านสิ่งนี้
http://www.outlinenone.com/


สามเดือนที่แล้วฉันค้นหาสิ่งเดียวกัน แต่มีปุ่มตัวเลือก กว่าห้าหรือหกวิธีที่ฉันพบไม่มีอะไรได้ผล ดังนั้นฉันสงสัยว่าคุณไม่สามารถทำได้ ฉันหวังว่าฉันจะผิด
Arseni Mourzenko

ฉันกลัวว่าจะเป็นความจริงเช่นกัน แต่ก็ยังหวังว่าจะได้รับการพิสูจน์ว่าผิด: D
Martin

มีมนุษย์ทำงานที่ mozilla จริงๆหรือที่คิดว่าเส้นประโง่ ๆ ดูดี? ทำไมถึงเป็นสิ่งที่เราต้องลบ?
billynoah

คำตอบ:


74

ฉันพบวิธีแก้ปัญหา แต่มันเป็นแม่ของแฮ็กทั้งหมดหวังว่ามันจะเป็นจุดเริ่มต้นสำหรับโซลูชันที่มีประสิทธิภาพอื่น ๆ ข้อเสีย (ใหญ่เกินไปในความคิดของฉัน) คือเบราว์เซอร์ใด ๆ ที่ไม่รองรับtext-shadowแต่รองรับrgba(IE 9) จะไม่แสดงข้อความเว้นแต่คุณจะใช้ไลบรารีเช่น Modernizr (ไม่ได้ทดสอบเป็นเพียงทฤษฎี)

Firefox ใช้สีข้อความเพื่อกำหนดสีของเส้นประ พูดว่าถ้าคุณทำ ...

select {
  color: rgba(0,0,0,0);
}

Firefox จะแสดงเส้นประโปร่งใส แต่แน่นอนว่าข้อความของคุณก็จะโปร่งใสเช่นกัน! ดังนั้นเราต้องแสดงข้อความอย่างใด text-shadowมาช่วย:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

เราใส่เงาข้อความโดยไม่มีการชดเชยและไม่เบลอเพื่อแทนที่ข้อความ แน่นอนว่าเบราว์เซอร์รุ่นเก่าไม่เข้าใจสิ่งนี้ดังนั้นเราจึงต้องระบุทางเลือกสำหรับสี:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

นี่คือตอนที่ IE9 เข้ามาเล่น: รองรับrgbaแต่ไม่ใช่ text-shadow ดังนั้นคุณจะได้รับกล่องเลือกที่ว่างเปล่าอย่างเห็นได้ชัด รับ Modernizr เวอร์ชันของคุณด้วยtext-shadowการตรวจจับและทำ ...

.no-textshadow select {
  color: #000;
}

สนุก.


ขอบคุณเพื่อนฉันจะลองเร็ว ๆ นี้ :)
Martin

ทางออกเดียวที่ใช้งานได้จริง (โดยใช้ FF 20) ยินดีด้วย!
Gilberto Torrezan

4
สิ่งนี้ควรดูแล FF ทุกคนและ FF ทุกคนเท่านั้น:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen

จะมีผลกับ css ใน chrome และ browser อื่น ๆ หรือไม่?
Dadhich Sourav

166

ดีคำตอบ Duopixel ของเป็นที่สมบูรณ์แบบธรรมดา หากเราก้าวไปอีกขั้นเราสามารถทำให้มันกันกระสุนได้

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

เอาล่ะใช้ได้เฉพาะกับ Firefox และเส้นประที่น่าเกลียดรอบตัวเลือกที่เลือกจะหายไป


1
ที่น่าสนใจคือโซลูชันนี้ไม่สามารถกันกระสุนได้เหมือนคำตอบของ Duopixel หากคุณใช้เอฟเฟกต์การเปลี่ยนกับกล่องเลือกของคุณ (เช่น -moz-transition) ช่องจุดจะปรากฏขึ้นในช่วงเวลาของการเปลี่ยนจากนั้นจะหายไป ดังนั้นถ้าคุณระบุ '-moz-transition: all 0.5s อย่างง่ายดาย;' คุณจะเห็น combobox เป็นเวลาครึ่งวินาทีด้วยวิธีนี้ในขณะที่คุณจะไม่เห็นเลยด้วยคำตอบของ Duopixel คุณสามารถแก้ปัญหานี้ได้โดยตั้งค่าองค์ประกอบ Select ทั้งหมดให้มีแอตทริบิวต์สีโปร่งใส แต่คุณจะไม่เห็นข้อความใด ๆ เลยเมื่อกล่องไม่มีโฟกัส
จอน

1
แก้ไข: ข้างต้นควรจะพูดว่า "... คุณจะเห็นกล่องประเป็นเวลาครึ่งวินาทีพร้อมกับโซลูชันนี้ ... " ฉันไม่สามารถแก้ไขความคิดเห็นได้อีกต่อไป อย่างไรก็ตาม 'color: rgba (0,0,0,0);' คุณสมบัติคือสิ่งที่แก้ไขการเปลี่ยนแปลงและต้องอยู่ในองค์ประกอบที่เลือก '-moz-focusring' จะไม่ทำ ที่น่าสนใจคือด้วยเหตุผลบางอย่างฉันไม่มีปัญหาใด ๆ ทั้งใน IE9 และ Chrome ด้วยโซลูชันของ Duopixel ดังนั้นสิ่งที่เขาพูดถึงกับ Modernizr ในตอนท้ายจึงไม่จำเป็นสำหรับฉัน
จอน

แน่นอนว่าจะปรากฏขึ้นหากคุณระบุการเปลี่ยนแปลง การใช้allภายในช่วงการเปลี่ยนภาพก็เหมือนกับการยิงด้วยปืน Gatling ในทันที
Fleshgrinder

1
โซลูชันนี้หรือ Duopixel ใช้ไม่ได้กับ FF 33.0.3 ใน Mac Mavericks แทนที่จะเป็นเส้นประมีเส้นขอบสีน้ำเงินเบลอ
Timo Kähkönen

1
สิ่งนี้จะแบ่งรูปแบบของเบราว์เซอร์ในตัวเลือกที่ปิดใช้งาน - เมื่อสิ่งที่เลือกเน้นพวกเขาจะกลายเป็นสีดำแทนที่จะเป็นข้อความที่เป็นสีเทาที่ควรจะเป็น
billynoah

19

นี่คือการทำงานร่วมกันของโซลูชันเพื่อแก้ไขปัญหาการจัดรูปแบบกับกล่องเลือก Firefox ใช้ตัวเลือก CSS นี้เป็นส่วนหนึ่งของการรีเซ็ต CSS ตามปกติของคุณ

คลาสจะลบโครงร่างตามคำถาม แต่ยังลบภาพพื้นหลังใด ๆ (เนื่องจากฉันมักใช้ลูกศรแบบเลื่อนลงที่กำหนดเองและลูกศรแบบเลื่อนลงของระบบ Firefoxes ไม่สามารถลบออกได้ในขณะนี้) หากใช้ภาพพื้นหลังสำหรับสิ่งอื่นที่ไม่ใช่ภาพแบบเลื่อนลงให้ลบเส้นออกbackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}

ยังมีการกำหนดสีข้อความตัวเลือกโดยใช้วิธีนี้หรือไม่?
user1063287

ที่จริงคุณสามารถลบลูกศร Firefox ใช้ในพื้นหลังเลือกโดยการตั้งค่าคุณสมบัติเฉพาะตัวของผู้ผลิตเพื่อ-moz-appearance none
yodabar

คำตอบอื่น ๆ ไม่มีselect::-moz-focus-innerตัวเลือกที่สำคัญทำให้มีประสิทธิภาพน้อยกว่า นั่นเป็นเหตุผลว่าทำไมสิ่งนี้ถึงได้รับ⬆ของฉัน
Dave Land

select:-moz-focusringพร้อมกับcolor: transparentและtext-shadow: 0 0 0 #000ออกชายแดนที่น่ารำคาญในการมุ่งเน้นใน Firefox v63
เจสันมัวร์

หมายเหตุ: url-prefix () fxsitecompat.dev/en-CA/docs/2018/…อ่านลิ้งค์ไม่เจอชัดเจนว่าจะเฟสออกหรือเปล่า แต่ขอแนะนำ.
user3342816

9

การดำเนินการนี้จะกำหนดเป้าหมายเวอร์ชัน Firefox ทั้งหมด

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

คุณอาจต้องการลบ! important ออกหากคุณวางแผนที่จะให้เค้าร่างปรากฏบนหน้าอื่น ๆ ในไซต์ของคุณที่ใช้สไตล์ชีตเดียวกัน


1
นี่ควรเป็นคำตอบที่เลือก
brandonscript

9

โดยทั่วไปแล้วตัวควบคุมแบบฟอร์มไม่สามารถกำหนดสไตล์ให้มีความแม่นยำได้ ไม่มีเบราว์เซอร์ใดที่ฉันทราบว่ารองรับคุณสมบัติที่เหมาะสมในการควบคุมทั้งหมด นั่นเป็นเหตุผลว่าทำไมจึงมีไลบรารี JavaScript กว่าพันล้านรายการที่ควบคุมรูปแบบ "ปลอม" ด้วยรูปภาพและองค์ประกอบ HTML อื่น ๆ และเลียนแบบฟังก์ชันการทำงานเดิมด้วยโค้ด:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...


ขอบคุณฉันเดาว่าฉันต้อง "สร้างรายการของตัวเอง" เลือกเพื่อให้บรรลุเป้าหมายนี้ น่าเสียดายที่การควบคุมแบบฟอร์มไม่สม่ำเสมอกันในเบราว์เซอร์
Martin

1
@Martin: ไม่มีอะไรเทียบได้กับความไม่ยืดหยุ่นของการควบคุมการอัปโหลดไฟล์ซึ่งไม่สามารถกำหนดสไตล์ได้เลยในเบราว์เซอร์ส่วนใหญ่ ;)
Arseni Mourzenko

3

<select onchange="this.blur();">

หากคุณใช้สิ่งนี้เส้นขอบจะคงอยู่จนกว่าคุณจะเลือกรายการจากรายการ


2
ขออภัยโซลูชันนี้ไม่เคารพหลักเกณฑ์การช่วยสำหรับการเข้าถึงและการใช้งาน นอกจากอินเทอร์เฟซ TTS สำหรับผู้ใช้ที่ตาบอดแล้วยังปิดการนำทางด้วยแป้นพิมพ์ องค์ประกอบที่โฟกัสควรมีลักษณะแตกต่างจากคนอื่น ๆ ปัญหาของคำถามปัจจุบันคือ Firefox ไม่ยอมให้คุณตัดสินใจว่าอย่างไร
yodabar

1

ลองทำอย่างใดอย่างหนึ่งต่อไปนี้:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

ข้อมูลอ้างอิง


6
ขอบคุณสำหรับความพยายาม แต่โชคไม่ดีที่มันไม่ได้ผล บางทีอาจใช้งานได้กับaองค์ประกอบ แต่ใช้ไม่ได้กับselectองค์ประกอบ
Martin

1

วิธีแก้ปัญหามาที่นี่

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
ทดสอบแล้ว. ไม่ทำงาน Firefox รู้จักคุณสมบัตินี้ แต่ดูเหมือนจะไม่ทำอะไรเลย พยายามตั้งค่าเป็น10px solid redแต่ไม่พบว่าจะแสดงที่ใด
mpen

สิ่งนี้ใช้ได้ผลจริงสำหรับฉันเมื่อคำตอบอื่น ๆ ที่ได้รับการโหวตสูงกว่าทั้งหมดไม่ได้
Tashows

0

ลบเส้นขอบ / เส้นประจาก Firefox All Selectable Tags

ใส่รหัสบรรทัดนี้ในสไตล์ชีตของคุณ:

*:focus{outline:none !important;}   


0

ขั้นตอนที่ 1) เพิ่ม HTML: เพิ่มตัวเลือกที่คุณเลือกและเพิ่มแอตทริบิวต์: contenteditable = "true"

ขั้นตอนที่ 2) เพิ่ม CSS: ใช้ตัวเลือก [แอตทริบิวต์] เพื่อเลือกองค์ประกอบทั้งหมดที่สามารถแก้ไขได้และลบเส้นขอบที่มีคุณสมบัติเค้าร่าง:

[contenteditable] {
  outline: 0px solid transparent;
}
select {
  border: none;
}
<select contenteditable="true">
  <option value="option1">Option 1</option>
  <option value="option2">Option 2</option>
  <option value="option3">Option 3</option>
</select>



-4

การดำเนินการนี้จะลบโฟกัสออกจากselectองค์ประกอบและโครงร่าง :

$("select").click(function(){
    $(this).blur();
});

แม้ว่าจะไม่มีข้อบกพร่องในเบราว์เซอร์อื่น คุณจะต้องตรวจสอบเบราว์เซอร์ที่ผู้ใช้ใช้:

if (FIREFOX) {
    //implement the code
}

โปรดอธิบายว่าข้อมูลโค้ดของคุณทำอะไรได้บ้างนอกเหนือจากการให้ข้อมูลโค้ด
sayan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.