ตัวยึดตำแหน่ง HTML5 css padding


137

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

อย่างไรก็ตามนี่คือรหัสสำหรับ css ( แก้ไข : นี่คือ css ที่สร้างขึ้นจาก sass)

#search {
  margin-top: 1px;
  display: inline;
  float: left;
  margin-left: 10px;
  margin-right: 10px;
  width: 220px;
}

#search form {
  position: relative;
}

#search input {
  padding: 0 10px 0 29px;
  color: #555555;
  border: none;
  background: url('/images/bg_searchbar.png?1296191141') no-repeat;
  width: 180px;
  height: 29px;
  overflow: hidden;
}

#search input:hover {
  color: #00ccff;
  background-position: 0px -32px;
}

และนี่คือ html ง่ายๆ:

<div id="search">
  <form>
    <input type="text" value="" placeholder="Search..." name="q" autocomplete="off" class="">
  </form>
  <div id="jquery-live-search" style="display: block; position: absolute; top: 15px; width: 219px;">
    <ul id="search-results" class="dropdown">
    </ul>
  </div>
</div>

ค่อนข้างเรียบง่าย? ตัวยึดปิดอยู่ด้วยเหตุผลบางประการ แต่เมื่อคุณพยายามพิมพ์ในช่องป้อนข้อความจะถูกจัดแนว ดูเหมือนว่าคุณสามารถเปลี่ยนสี (สำหรับwebkit) ของตัวยึดตำแหน่งได้เท่านั้น แต่ถ้าฉันพยายามแก้ไขช่องว่างของอินพุตที่มีอยู่มันจะทำให้การออกแบบของอินพุตเสียหาย! ดึงผมออก

นี่คือหน้าจอของตัวยึดตำแหน่งและช่องป้อนข้อมูลที่มีการป้อนข้อความ:

ตัวยึด การป้อนข้อความ

แก้ไข :

ตอนนี้ฉันได้ใช้ปลั๊กอิน jqueryนี้แล้ว

ใช้งานได้ทันทีและแก้ไขปัญหา Chrome ของฉัน ฉันยังคงต้องการเปิดเผยว่าปัญหาคืออะไร (หากมีบางอย่างเกี่ยวข้องกับโครเมี่ยมของฉันหรือบางอย่าง)

ฉันค่อนข้างแน่ใจว่ามันไม่ใช่สไตล์เนื่องจาก John Catterfeld ทำซ้ำโดยไม่มีปัญหาดังนั้นฉันหวังว่าจะมีใครสักคนที่สามารถชี้ทางที่ถูกต้องให้ฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นกับฉัน (โครเมี่ยมของลูกค้าของฉันก็เช่นกัน สิ่งนี้อาจเป็นของ Chrome / OSX หาก John ใช้ windows)


2
คุณสามารถให้ CSS ที่สร้างขึ้นได้หรือไม่? นั่นจะง่ายกว่ามากในการทำงานกับแหล่งสัญญาณ SASS
RoToRa

+1 ปลั๊กอินนั้นยอดเยี่ยม - เรียบง่ายและมีตัวเลือกที่เหมาะสมที่ฉันต้องการ น่าจะเป็นวิธีแก้ปัญหาตัวยึดตำแหน่งที่ดีที่สุดที่ฉันเจอจนถึงตอนนี้
easwee

ถ้าใครมีปัญหากับ bootstrap การตั้งค่าสองตัวช่วยนี้: font-size: large; แทน px; และ line-height: normal;
necker

คำตอบ:


231

ฉันมีปัญหาเดียวกัน

ฉันแก้ไขโดยลบความสูงบรรทัดออกจากข้อมูลที่ฉันป้อน ตรวจสอบว่ามีความสูงของเส้นซึ่งเป็นสาเหตุของปัญหาหรือไม่


6
ไม่ถูกต้อง. ด้วยองค์ประกอบอินพุตตัวยึดตำแหน่งจะไม่ได้รับผลกระทบจากความสูงของเส้น แต่การเว้นช่องว่างไม่ใช่ทางออกที่ดีที่สุด สิ่งที่ดีที่สุดคือการใช้ (และฉันรู้ว่าโดยปกติไม่เคยทำอะไรเลย แต่ในกรณีนี้จะทำ) คุณสมบัติ VERTICAL-ALIGN CSS
RIK

1
ใช่น่าแปลกใจที่ DID แก้ไขปัญหาได้ และข้อความที่พิมพ์ยังคงอยู่กึ่งกลางในแนวตั้งแม้ว่าจะไม่ได้ใช้ความสูงของบรรทัดก็ตาม
hndcrftd

60
เมื่อไม่มีความสูงของบรรทัดบนอินพุตโดยตรงการเพิ่มline-height: normal;ก็เป็นเคล็ดลับสำหรับฉัน
philfreo

อย่างไรก็ตามคุณต้องเพิ่มความสูงของบรรทัดสำหรับเบราว์เซอร์เช่น แต่นั่นทำงานได้สำหรับซาฟารี
Kaloyan Stamatov

102

ฉันมีปัญหาคล้ายกันปัญหาของฉันคือช่องว่างด้านข้างและวิธีแก้ปัญหาคือการเยื้องข้อความฉันไม่ทราบว่าการเยื้องข้อความมีผลต่อตำแหน่งด้านตัวยึด

input{
  text-indent: 10px;
}

28

หากคุณต้องการคงความสูงของบรรทัดไว้และบังคับให้ตัวยึดตำแหน่งเท่ากันคุณสามารถแก้ไข CSS ตัวยึดตำแหน่งได้โดยตรงเนื่องจากเบราว์เซอร์เวอร์ชันใหม่กว่า นั่นเป็นเคล็ดลับสำหรับฉัน:

input::-webkit-input-placeholder { /* WebKit browsers */
  line-height: 1.5em;
}
input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
  line-height: 1.5em;
}
input::-moz-placeholder { /* Mozilla Firefox 19+ */
  line-height: 1.5em;
}
input:-ms-input-placeholder { /* Internet Explorer 10+ */
  line-height: 1.5em;
}


3

การตั้งค่าline-height: 0px;แก้ไขให้ฉันใน Chrome


2
คุณช่วยอธิบายได้ไหมว่าสิ่งนี้เพิ่มอะไรให้กับคำตอบที่ยอมรับเมื่อสี่ปีก่อน
Nathan Tuggy

1
@NathanTuggy สำหรับฉันคำตอบที่ยอมรับได้แนะนำให้คุณลบline-heightแอตทริบิวต์ทั้งหมดออกจากองค์ประกอบ สำหรับฉันที่ไม่ได้ทำอะไรเลยและสิ่งที่แก้ไขปัญหาสำหรับฉันคือการตั้งค่าline-height: 0px
JobJob

เหมือนกันนี่คือสิ่งที่แก้ไขปัญหาให้ฉันได้จริง
aeroson

2

การลบความสูงของบรรทัดจะทำให้ข้อความของคุณสอดคล้องกับตัวยึดตำแหน่ง แต่ก็ไม่สามารถแก้ปัญหาของคุณได้อย่างถูกต้องเนื่องจากคุณต้องปรับการออกแบบของคุณให้เข้ากับข้อบกพร่องนี้ (ไม่ใช่ข้อบกพร่อง) การเพิ่มแนวตั้งจะไม่ทำข้อตกลงเช่นกัน ฉันไม่ได้ลองในเบราว์เซอร์ทั้งหมด แต่ใช้ไม่ได้ใน Safari 5.1.4 อย่างแน่นอน

ฉันเคยได้ยินเกี่ยวกับการแก้ไข jQuery สำหรับสิ่งนี้นั่นไม่ใช่การสนับสนุนตัวยึดตำแหน่งข้ามเบราว์เซอร์ (jQuery.placeholder) แต่สำหรับการจัดรูปแบบตัวยึดตำแหน่ง แต่ฉันยังไม่พบ

ในระหว่างนี้คุณสามารถแก้ไขตารางในหน้านี้ซึ่งแสดงการรองรับเบราว์เซอร์ที่แตกต่างกันสำหรับสไตล์ต่างๆ

แก้ไข: พบปลั๊กอิน! jquery.placeholder.min.jsให้คุณมีทั้งความสามารถในการจัดแต่งทรงผมเต็มรูปแบบและการสนับสนุนข้ามเบราว์เซอร์ในการต่อรองราคา


กำลังพยายามค้นหาการแก้ไขที่ไม่ใช่ตัวยึดแม้ว่าฉันใช้ปลั๊กอิน jquery ด้านบนแล้ว :) ขอบคุณสำหรับความช่วยเหลือ!
สึกกร่อน

โปรดทราบว่านี่เป็นปลั๊กอินสองตัวที่แตกต่างกัน ฉันไม่แน่ใจว่าสิ่งที่คุณใช้ทำ (การสาธิตไม่ทำงานในเบราว์เซอร์ใด ๆ ของฉัน) แต่อันนี้ใช้แอตทริบิวต์ตัวยึดตำแหน่งขององค์ประกอบและสร้างช่วงเวลาที่แสดงผลเหนือช่องป้อนข้อมูลแบบไดนามิกซึ่ง ให้ความเป็นไปได้ในการจัดแต่งทรงผมสูงสุด
zykadelic

2

ฉันมีปัญหาซึ่งปรากฏใน Internet Explorer เท่านั้น ช่องป้อนข้อมูลเป็นรูปแบบ

height:38px;
line-height:38px;

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

วิธีแก้ปัญหาของฉันคือการตั้งค่า:

line-height:normal;

2

ลบความสูงของบรรทัดหรือตั้งค่าโดยใช้ช่องว่างภายใน ... มันใช้งานได้ในเบราว์เซอร์ทั้งหมด


1

ฉันได้สร้างซอโดยใช้ภาพหน้าจอของคุณเป็นภาพพื้นหลังและลอกการทำเครื่องหมายพิเศษออกและดูเหมือนว่าจะทำงานได้ดี

http://jsfiddle.net/fLdQG/2/ (ต้องใช้เบราว์เซอร์ webkit)

สิ่งนี้เหมาะกับคุณหรือไม่? ถ้าไม่คุณสามารถอัปเดตซอด้วยมาร์กอัปและ CSS ที่แน่นอนได้หรือไม่


อืมฉันตรวจสอบลิงค์แล้วและมันก็ใช้ไม่ได้สำหรับฉันเช่นกัน คุณคิดว่ามีปลั๊กอิน / บางอย่างใน Chrome ของฉันที่เป็นสาเหตุหรือไม่ สกรีนช็อต
สึกกร่อน

ตรวจสอบโดยใช้ซาฟารีและใช้งานได้ โครเมี่ยมและซาฟารีไม่ควรแสดงสิ่งเดียวกัน?
สึกกร่อน

อืมฉันไม่ทราบว่ามีปลั๊กอินที่จะส่งผลต่อเลย์เอาต์ของคุณในลักษณะนี้ แต่ Chrome และ Safari ทำงานได้ดีสำหรับฉัน (และใช่พวกเขาควรแสดงผลเหมือนกัน)
ajcw

1
ฉันใช้ 9.0.597.84 (chrome) บน Mac คุณใช้ตัวไหน
สึกกร่อน

ฉันใช้ Chrome 8.0.552.237 บน Windows 7
ajcw

1

ฉันสังเกตเห็นปัญหาเมื่อฉันอัปเดต Chrome บน os x เป็นเวอร์ชันเสถียรล่าสุด (9.0.597.94) ดังนั้นนี่จึงเป็นข้อบกพร่องของ Chrome และหวังว่าจะได้รับการแก้ไข

ฉันไม่อยากแม้แต่จะพยายามแก้ไขปัญหานี้และรอการแก้ไข มันจะหมายถึงการมีงานทำมากขึ้น


อืมจึงได้รับการยืนยันแล้ว? มีวิธี "ดาวน์เกรด" Chrome ของเราเพื่อตรวจสอบว่าเป็น Chrome จริงหรือไม่?
สึกกร่อน

1
เป็นปี 2013 และฉันยังคงมีปัญหานี้ใน chrome เวอร์ชันล่าสุด: เวอร์ชัน 27.0.1453.116 m
Postscripter

1

ตัวยึดจะไม่ได้รับผลกระทบจากline-heightและpaddingไม่สอดคล้องกันบนเบราว์เซอร์

ฉันพบวิธีแก้ปัญหาอื่นแล้ว

VERTICAL-ALIGN. นี่อาจเป็นครั้งเดียวที่ใช้งานได้ แต่ลองใช้รหัส CSS หลายบรรทัดแทน


2
ไม่ได้ทำอะไรให้ฉัน
Postscripter

1

ผมพบคำตอบที่แก้ความผิดหวังของฉันเกี่ยวกับเรื่องนี้ในบล็อกของจอห์น Catterfeld ของ

... Chrome (v20-30) ใช้งานได้เกือบทุกสไตล์ แต่มีข้อแม้สำคัญคือรูปแบบตัวยึดตำแหน่งจะไม่ปรับขนาดช่องป้อนข้อมูลดังนั้นอย่าลืมสิ่งต่างๆเช่นความสูงของเส้นและช่องว่างด้านบนหรือด้านล่าง

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


1

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

<input type="email" placeholder="  Your email" />

1

ฉันได้ทดสอบวิธีการเกือบทั้งหมดที่ให้ไว้ที่นี่ในหน้านี้สำหรับแอป Angular ของฉัน มีเพียงฉันเท่านั้นที่พบวิธีแก้ปัญหาผ่าน&nbsp;ช่องว่างแทรกเช่น

วัสดุเชิงมุม

<input matInput type="text" class="pl-2" placeholder="&nbsp;&nbsp;Email">

วัสดุที่ไม่ใช่เชิงมุม

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>

<div class="container m-3 d-flex flex-column align-items-center justify-content-around" style="height:100px;">
<input type="text" class="pl-0" placeholder="Email with no Padding" style="width:240px;">
<input type="text" class="pl-3" placeholder="Email with 1 rem padding" style="width:240px;">
</div>

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