ในทางเทคนิคแล้วมันเป็นไปไม่ได้ที่จะได้รับ:before
และ:after
องค์ประกอบหลอกทำงานกับinput
องค์ประกอบ
จากW3C :
12.1 The: before and: after pseudo-elements
ผู้เขียนระบุสไตล์และที่ตั้งของเนื้อหาที่สร้างด้วย: before และ: after pseudo-elements ตามที่ชื่อระบุไว้: ก่อนและ: หลังจากองค์ประกอบแบบหลอกระบุตำแหน่งของเนื้อหาก่อนและหลังเนื้อหาต้นไม้เอกสารขององค์ประกอบ คุณสมบัติ 'เนื้อหา' ร่วมกับองค์ประกอบหลอกเหล่านี้ระบุสิ่งที่ถูกแทรก
ดังนั้นฉันจึงมีโครงการที่ฉันส่งปุ่มในรูปแบบของinput
แท็กและด้วยเหตุผลบางอย่างที่ผู้พัฒนารายอื่น จำกัด ให้ฉันใช้<button>
แท็กแทนปุ่มส่งอินพุตปกติดังนั้นฉันจึงหาวิธีแก้ปัญหาอื่นโดยห่อหุ้มปุ่มไว้ในspan
ชุด เพื่อposition: relative;
แล้ววางตำแหน่งไอคอนอย่างแน่นอนโดยใช้:after
หลอก
หมายเหตุ: ซอฟเดดเดิ้ลใช้รหัสเนื้อหาสำหรับ FontAwesome 3.2.1 ดังนั้นคุณอาจจำเป็นต้องเปลี่ยนค่าของcontent
คุณสมบัติตามนั้น
HTML
<span><input type="submit" value="Send" class="btn btn-default" /></span>
CSS
input[type="submit"] {
margin: 10px;
padding-right: 30px;
}
span {
position: relative;
}
span:after {
font-family: FontAwesome;
content: "\f004"; /* Value may need to be changed in newer version of font awesome*/
font-size: 13px;
position: absolute;
right: 20px;
top: 1px;
pointer-events: none;
}
Demo
ตอนนี้ที่นี่ทุกอย่างอธิบายตนเองที่นี่เกี่ยวกับสถานที่หนึ่งคือpointer-events: none;
ฉันเคยใช้เพราะเมื่อวางเมาส์เหนือ:after
เนื้อหาที่สร้างขึ้นหลอกปุ่มของคุณจะไม่คลิกดังนั้นการใช้ค่าnone
จะบังคับให้การกระทำการคลิกผ่านเนื้อหานั้น .
จากMozilla Developer Network :
นอกเหนือจากการระบุว่าองค์ประกอบนั้นไม่ใช่เป้าหมายของเหตุการณ์เมาส์ค่าที่ไม่สั่งให้เหตุการณ์เมาส์จะ "ผ่าน" องค์ประกอบและกำหนดเป้าหมายสิ่งที่ "ใต้" องค์ประกอบนั้นแทน
เลื่อนตัวอักษร / ไอคอนหัวใจDemoและดูว่าจะเกิดอะไรขึ้นหากคุณไม่ได้ใช้pointer-events: none;