วิธีรับความกว้างของอินพุตและเลือกฟิลด์เท่ากัน


109

ในแบบฟอร์มฉันมีช่องเลือกหนึ่งช่องและช่องป้อนข้อมูลสองช่อง องค์ประกอบเหล่านี้อยู่ในแนวตั้ง น่าเสียดายที่ฉันไม่สามารถรับความกว้างขององค์ประกอบเหล่านี้ได้เท่ากัน

นี่คือรหัสของฉัน:

<select name="name1" style="width:198px">
  <option>value1</option>
  <option>value2</option>
</select><br/>
<input type="text" name="id1" style="width:193px"><br/>
<input type="text" name="id2" style="width:193px">

ตัวอย่างข้างต้นความกว้างที่ดีที่สุดสำหรับองค์ประกอบที่เลือกคือ 198 หรือ 199 พิกเซล (แน่นอนว่าฉันลอง 193px แต่ความแตกต่างนั้นสำคัญมาก) ฉันคิดว่ามันขึ้นอยู่กับความละเอียดบนคอมพิวเตอร์และเบราว์เซอร์ต่างๆเนื่องจากองค์ประกอบเหล่านี้มีความกว้างไม่เท่ากัน (บางครั้งฉันคิดว่าความแตกต่างอยู่ที่ประมาณ 1 หรือ 2 พิกเซล) ฉันพยายามตั้งค่าองค์ประกอบเหล่านี้ในแถว div หรือตารางแล้ว แต่ก็ไม่ได้ผล

ถาม: ฉันจะรับความกว้างขององค์ประกอบเหล่านี้เท่ากันได้อย่างไร


1
คำถามเดียวกันถามที่นี่: stackoverflow.com/questions/895904/…
BlaM

คำตอบ:


134

คำตอบที่อัปเดต

นี่คือวิธีการเปลี่ยนโมเดลกล่องที่ใช้โดยองค์ประกอบอินพุต / textarea / เลือกเพื่อให้ทั้งหมดทำงานในลักษณะเดียวกัน คุณต้องใช้box-sizingคุณสมบัติที่ใช้กับคำนำหน้าสำหรับแต่ละเบราว์เซอร์

-ms-box-sizing:content-box;
-moz-box-sizing:content-box;
-webkit-box-sizing:content-box; 
box-sizing:content-box;

ซึ่งหมายความว่าความแตกต่าง 2px ที่เรากล่าวถึงก่อนหน้านี้ไม่มีอยู่ ..

ตัวอย่างที่http://www.jsfiddle.net/gaby/WaxTS/5/

หมายเหตุ: บน IE ใช้งานได้ตั้งแต่เวอร์ชัน 8 ขึ้นไป ..


ต้นฉบับ

ถ้าคุณตั้งค่าของพวกเขาพรมแดนแล้วselectองค์ประกอบจะเป็น 2 พิกเซลน้อยกว่าinputองค์ประกอบ ..

ตัวอย่าง: http://www.jsfiddle.net/gaby/WaxTS/2/


ขอบคุณสำหรับการตอบ. และถ้าฉันตั้งค่าเส้นขอบสำหรับ 2px จะมี 4 พิกเซลระหว่างอินพุตและฟิลด์ที่เลือกสำหรับเส้นขอบ 3px - 6px ... ?
luk4443

1
@ ลุกไม่มี. หากทั้งอินพุตและเลือกมีความกว้างของขอบเท่ากันความแตกต่างจะยังคงอยู่ที่ 2 พิกเซล ..
Gabriele Petrioli

ขอบคุณ. ฉันลองใช้รหัสของคุณในเบราว์เซอร์ต่างๆและใน Firefox ทุกอย่างถูกต้อง แต่ใช้ไม่ได้ใน IE 8 และ Opera (มีความแตกต่างในการป้อนข้อมูลและความกว้างที่เลือก) :(
luk4443

2
บางทีคุณอาจต้องการระบุ box-sizing: border-box? ฉันคิดว่านั่นคือสิ่งที่คุณหมายถึง Content-box คือค่าดีฟอลต์ที่ padding + margin เพิ่มให้กับ width
O'Rooney

1
มันควรจะเป็น: -ms-box-sizing: content-box; -moz-box-sizing: เนื้อหากล่อง; -webkit-box-sizing: content-box; ขนาดกล่อง: เนื้อหากล่อง; ไวยากรณ์มาตรฐานควรเป็นไปตามวิธีการเพิ่มประสิทธิภาพแบบก้าวหน้าดังนั้นในอนาคตเมื่อมีการนำมาตรฐานไปใช้อย่างกว้างขวางตัวแทนผู้ใช้จะเริ่มต้นใช้ไวยากรณ์มาตรฐานและคุณสามารถลบเวอร์ชันที่นำหน้าออกได้
user1739635

119

ฉันลองคำตอบของ Gaby (+1) ข้างต้นแล้ว แต่มันช่วยแก้ปัญหาของฉันได้เพียงบางส่วน ฉันใช้ CSS ต่อไปนี้แทนโดยที่ content-box เปลี่ยนเป็น border-box:

input, select {
    -webkit-box-sizing: border-box;
       -moz-box-sizing: border-box;
            box-sizing: border-box;
}

ใช่ดูเหมือนว่าช่องในรูปแบบเช่น textarea ช่องป้อนข้อมูลจะทำงานได้ดีกับรูปแบบกล่องชายแดน ปุ่มช่องทำเครื่องหมายวิทยุส่งรีเซ็ตและป้อนข้อมูลการค้นหาเป็นช่องขอบตามค่าเริ่มต้น
Vennsoh

2
นี่เป็นสิ่งที่ดีโต้แย้งว่าทำไมคุณควรใช้ box-sizing: border-boxสำหรับการนำไปใช้งานแบบสากลที่ดีให้พิจารณาการตั้งค่าในองค์ประกอบ html ระดับบนสุดแล้วสืบทอดลงมาเพื่อให้สามารถลบล้างได้ง่าย
KyleMit

content-box ไม่ได้ทำอะไรเลยในกรณีของฉัน ฉันต้องการเส้นขอบเพื่อให้พวกมันมีความกว้างเท่ากัน Border-box เป็นทางออกที่ดีกว่าแน่นอนขอบคุณ
Manuel Hoffmann


-4

สร้างคลาสอื่นและเพิ่มขนาดด้วยตัวอย่าง 2px

.enquiry_fld_normal{
width:278px !important; 
}

.enquiry_fld_normal_select{
width:280px !important; 
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.