เปลี่ยนสีตัวยึดตำแหน่งของอินพุต HTML5 ด้วย CSS


3975

Chrome รองรับแอตทริบิวต์ตัวยึดตำแหน่งในinput[type=text]องค์ประกอบ (ส่วนอื่นอาจทำเช่นกัน)

แต่สิ่งต่อไปนี้CSSไม่ได้ทำอะไรกับมูลค่าของตัวแทน:

input[placeholder], [placeholder], *[placeholder] {
    color: red !important;
}
<input type="text" placeholder="Value">

Valueจะยังคงอยู่แทนgreyred

มีวิธีในการเปลี่ยนสีของข้อความตัวยึดตำแหน่งหรือไม่


375
Quick heads-up (ไม่ใช่วิธีแก้ปัญหาเพียงแค่เป็น FYI): หากฉันจำได้อย่างถูกต้องให้ป้อน [ตัวยึดตำแหน่ง] ตรงกับแท็ก <input> ที่มีแอตทริบิวต์ตัวยึดมันจะไม่ตรงกับแอตทริบิวต์ตัวยึดตำแหน่ง
pinkgothic

12
ย่ะความคิดของฉันทำให้ฉันคิดว่านี่อาจจะเป็นลักษณะของแอตทริบิวต์ "ชื่อ" ขององค์ประกอบ ดังนั้น +1 สำหรับการคิดเหมือนกัน!
David Murdoch

5
@MathiasBynens The: ตัวยึดตำแหน่งที่แสดงคลาส pseudo จับคู่กับอิลิเมนต์อินพุตที่แสดงข้อความตัวยึดตำแหน่งดังกล่าว ดังนั้นจึงตรงกับ<input>แท็กเช่นinputตัวเลือก แต่แสดงข้อความตัวยึดตำแหน่งในขณะนี้ นอกจากนี้ยังไม่ตรงกับแอตทริบิวต์ตัวยึดตำแหน่ง
HEX

3
@HEX มันไม่เหมือนกับinputตัวเลือกเพราะมันเลือกinputองค์ประกอบทั้งหมด :placeholder-shownเลือกinputองค์ประกอบที่แสดงตัวยึดตำแหน่งเท่านั้นในขณะนี้อนุญาตให้คุณกำหนดสไตล์องค์ประกอบเหล่านั้นเท่านั้นและจัดรูปแบบข้อความตัวยึดตำแหน่งได้อย่างมีประสิทธิภาพ คุณกำลังพยายามจะพูดว่าอะไร?
Mathias Bynens

1
@HEX (แน่นอนว่ามันเลือกtextareaองค์ประกอบที่แสดงข้อความตัวยึดตำแหน่ง)
Mathias Bynens

คำตอบ:


4809

การดำเนินงาน

มีการใช้งานที่แตกต่างกันสามแบบ: องค์ประกอบแบบหลอก, ชั้นเรียนแบบหลอกและไม่มีอะไร

  • WebKit, Blink (Safari, Google Chrome, Opera 15+) และ Microsoft ::-webkit-input-placeholderขอบใช้หลอกองค์ประกอบ: [ อ้างอิง ]
  • Mozilla Firefox 4 ถึง 18 กำลังใช้คลาส pseudo: :-moz-placeholder( หนึ่งโคลอน) [ อ้างอิง ]
  • Mozilla Firefox 19+ ใช้องค์ประกอบปลอม: ::-moz-placeholderแต่ตัวเลือกเก่าจะยังคงใช้งานได้ระยะหนึ่ง [ อ้างอิง ]
  • Internet Explorer 10 และ 11 :-ms-input-placeholderกำลังใช้หลอกชั้น: [ อ้างอิง ]
  • เมษายน 2017: เบราว์เซอร์ที่ทันสมัยส่วนใหญ่รองรับองค์ประกอบหลอกง่าย::placeholder [ อ้างอิง ]

Internet Explorer 9 และรุ่นที่ต่ำกว่าไม่รองรับplaceholderคุณสมบัติเลยขณะที่Opera 12 และรุ่นต่ำกว่าไม่รองรับตัวเลือก CSS ใด ๆ สำหรับตัวยึดตำแหน่ง

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

CSS selectors

ตัวแทนผู้ใช้จะต้องเพิกเฉยกฎกับตัวเลือกที่ไม่รู้จัก ดูตัวเลือกระดับ 3 :

กลุ่มของตัวเลือกที่มีตัวเลือกที่ไม่ถูกต้องไม่ถูกต้อง

ดังนั้นเราจึงต้องการกฎแยกต่างหากสำหรับแต่ละเบราว์เซอร์ มิฉะนั้นเบราว์เซอร์ทั้งหมดจะถูกละเว้นทั้งกลุ่ม

::-webkit-input-placeholder { /* WebKit, Blink, Edge */
    color:    #909;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
   color:    #909;
   opacity:  1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
   color:    #909;
   opacity:  1;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
   color:    #909;
}
::-ms-input-placeholder { /* Microsoft Edge */
   color:    #909;
}

::placeholder { /* Most modern browsers support this now. */
   color:    #909;
}
<input placeholder="Stack Snippets are awesome!">

บันทึกการใช้งาน

  • ระมัดระวังเพื่อหลีกเลี่ยงความแตกต่างที่ไม่ดี ตัวยึดตำแหน่งของ Firefox ดูเหมือนจะเริ่มต้นด้วยความทึบลดลงดังนั้นจึงจำเป็นต้องใช้opacity: 1ที่นี่
  • โปรดทราบว่าข้อความตัวยึดจะถูกตัดออกหากไม่พอดี - ปรับขนาดองค์ประกอบอินพุตของคุณemและทดสอบด้วยการตั้งค่าขนาดตัวอักษรขั้นต่ำสุดใหญ่ อย่าลืมคำแปล: บางภาษาต้องการพื้นที่มากขึ้นสำหรับคำเดียวกัน
  • เบราว์เซอร์ที่รองรับ HTML placeholderแต่ไม่สนับสนุน CSS สำหรับ (เช่น Opera) ควรทำการทดสอบเช่นกัน
  • เบราว์เซอร์บางตัวใช้ CSS เริ่มต้นเพิ่มเติมสำหรับบางinputประเภท ( email, search) สิ่งเหล่านี้อาจส่งผลกระทบต่อการแสดงผลในรูปแบบที่ไม่คาดคิด ใช้คุณสมบัติ -webkit-appearanceและ-moz-appearanceเพื่อเปลี่ยนแปลง ตัวอย่าง:
    [type="search"] {
        -moz-appearance:    textfield;
        -webkit-appearance: textfield;
        appearance: textfield;
    }

27
โปรดทราบว่าแม้ว่า Webkit จะถือว่าสิ่งนี้มีความเฉพาะเจาะจงค่อนข้างแรง Mozilla ก็ไม่ได้ คุณมีแนวโน้มที่จะต้องปรากฏสองสาม! ผู้นำเข้าที่นั่นเพื่อให้สิ่งต่าง ๆ ปรากฏขึ้น
dmnc

18
@toscho: ขอบคุณสำหรับคำตอบที่ดี ผมเพียงแค่ต้องการการสาธิตเล็ก ๆ น้อย ๆ ของมัน "ชีวิต" ดังนั้นตัวอย่างของคุณยังสามารถเข้าถึงได้ที่นี่: jsfiddle.net/Sk8erPeter/KyVXK ขอบคุณอีกครั้ง.
Sk8erPeter

90
ตัวยึดตำแหน่งของ Firefox ดูเหมือนจะเริ่มต้นด้วยความทึบลดลง สำหรับคนอื่นที่ทำให้สดชื่นและสงสัยว่าทำไมห่าสิ่งนี้ถึงไม่ทำงาน ("ทำไมข้อความสีขาวของฉันถึงยังเป็นสีเทา .. ") ให้ใช้ความทึบ: 1
jwinn

8
ใน IE10 *:-ms-input-placeholderและ:-ms-input-placeholderด้วยตัวเองไม่ทำงาน แต่INPUT:-ms-input-placeholderทำ แปลก
Jared

37
หมายเหตุสำหรับ Bootstrap 3: คลาส "form-control" จะแทนที่สีเนื่องจากความเฉพาะของ CSS (เช่น "form-control :: - webkit-input-placeholder") ดังนั้นคุณต้องมีอย่างน้อยตามที่ระบุหรือใช้ "! สำคัญ" ใน CSS ของคุณ (นี่เป็นนรกที่จะดีบั๊กเนื่องจากทั้ง Firebug และ Devtools ไม่แสดงชั้นเรียนเทียมนี้)
Costa

725

/* do not group these rules */
*::-webkit-input-placeholder {
    color: red;
}
*:-moz-placeholder {
    /* FF 4-18 */
    color: red;
    opacity: 1;
}
*::-moz-placeholder {
    /* FF 19+ */
    color: red;
    opacity: 1;
}
*:-ms-input-placeholder {
    /* IE 10+ */
    color: red;
}
*::-ms-input-placeholder {
    /* Microsoft Edge */
    color: red;
}
*::placeholder {
    /* modern browser */
    color: red;
}
<input placeholder="hello"/> <br />
<textarea placeholder="hello"></textarea>

นี้จะทุกรูปแบบinputและtextareaตัวยึด

หมายเหตุสำคัญ:อย่าจัดกลุ่มกฎเหล่านี้ ให้สร้างกฎแยกต่างหากสำหรับตัวเลือกทุกตัว (ตัวเลือกที่ไม่ถูกต้องหนึ่งตัวในกลุ่มทำให้ทั้งกลุ่มไม่ถูกต้อง)


2
เอกสาร MSDN ที่คุณเชื่อมโยงระบุว่ารองรับเฉพาะใน Internet Explorer 10 ยังคงเป็นสิ่งที่ดี แต่ก็ไม่ค่อยมีประโยชน์จนกว่าผู้ใช้ IE10 จะมีความสำคัญมาก
danishgoel

1
ในความเป็นจริงคุณจะต้องการจัดวางตำแหน่งตัวยึดทั่วทั้งไซต์อย่างสม่ำเสมอไม่ใช่สไตล์การป้อนข้อมูลแต่ละรายการตาม ID
BadHorsie

10
หลังจาก FF19 คุณต้องใช้ :: - moz-placeholder
viplezer

1
คุณต้องใส่ CSS นี้ที่ด้านล่างของสไตล์ชีทของคุณถ้าคุณใช้คลาสกับอินพุตเพื่อให้มันทำงานบน IE (11) ดูส้อมนี้ JSFiddle jsfiddle.net/9kkef เปิดหน้าทั้งใน IE และเบราว์เซอร์อื่นใน IE คุณจะเห็นว่าข้อความตัวยึดจะเป็นสีของคลาสที่ใช้
Timo002

บางครั้งหากไม่ได้ผลโปรดเพิ่ม <! important> ในคุณสมบัติสี
อาเหม็ดนา

277

นอกจากนี้คุณยังอาจต้องการสไตล์ข้อความ:

input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
  color: #636363;
}
input:-moz-placeholder, textarea:-moz-placeholder {
  color: #636363;
}

2
ในการพิมพ์ในโครเมี่ยมไม่ทำงาน ... ความช่วยเหลือใด ๆ @ สื่อพิมพ์ {input [type = text] .form-control :: - webkit-input-placeholder, input [type = textarea] .form-control :: - webkit -input-placeholder {color: #FFFFFF; }}
Mahdi Alkhatib

107

สำหรับBootstrapและLess users มี mixin .placeholder:

// Placeholder text
// -------------------------
.placeholder(@color: @placeholderText) {
  &:-moz-placeholder {
    color: @color;
  }
  &:-ms-input-placeholder {
    color: @color;
  }
  &::-webkit-input-placeholder {
    color: @color;
  }
}

16
หรือง่ายยิ่งขึ้นให้แก้ไขตัวแปร@input-color-placeholderซึ่งมักพบในตัวแปรไม่มี
William

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

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

@ วิลเลียมขอโทษที่ฉันใช้ถ้อยคำแบบนี้ฉันคิดว่ามันคงจะดีกว่าถ้าคุณใช้มิกซ์อินกับข้อโต้แย้งของสีอินพุตที่คุณต้องการแม้ว่าจะค่อนข้างตรงไปตรงมา m ใช้เพื่อจัดแต่งทรงผม (ใส่สไตล์การค้นหาตัวยึดตำแหน่งที่มีพื้นหลังเป็นสี: P) ขออภัย แต่คุณพูดถูกต้องขอโทษ
Brandito

99

นอกจากคำตอบของ toscho ฉันได้สังเกตเห็นความไม่สอดคล้องกันของ webkit ระหว่าง Chrome 9-10 และ Safari 5 ด้วยคุณสมบัติ CSS ที่สนับสนุนซึ่งคุ้มค่ากับการสังเกต

โดยเฉพาะ Chrome 9 และ 10 ไม่สนับสนุนbackground-color, border, text-decorationและtext-transformเมื่อจัดแต่งทรงผมตัวยึด

การเปรียบเทียบข้ามเบราว์เซอร์เต็มรูปแบบที่นี่


76

สำหรับผู้ใช้Sass :

// Create placeholder mixin
@mixin placeholder($color, $size:"") {
  &::-webkit-input-placeholder {
    color: $color;
    @if $size != "" {
      font-size: $size;
    }
  }
  &:-moz-placeholder {
    color: $color;
    @if $size != "" {
      font-size: $size;
    }
  }
  &::-moz-placeholder {
    color: $color;
    @if $size != "" {
      font-size: $size;
    }
  }
  &:-ms-input-placeholder {
    color: $color;
    @if $size != "" {
      font-size: $size;
    }
  }
}

// Use placeholder mixin (the size parameter is optional)
[placeholder] {
  @include placeholder(red, 10px);
}

วิธีที่ยืดหยุ่นมากขึ้น - การใช้@content;
milkovsky

60

มันจะทำงานได้ดี สาธิตที่นี่:

input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
  color: #666;
}
input:-moz-placeholder,
textarea:-moz-placeholder {
  color: #666;
}
input::-moz-placeholder,
textarea::-moz-placeholder {
  color: #666;
}
input:-ms-input-placeholder,
textarea:-ms-input-placeholder {
  color: #666;
}
<input type="text" placeholder="Value" />


1
ฉันต้องเพิ่ม! สำคัญใน Firefox v56 ด้วย
Savage

49

ใน Firefox และ Internet Explorer สีข้อความอินพุตปกติจะแทนที่คุณสมบัติสีของตัวยึดตำแหน่ง ดังนั้นเราต้อง

::-webkit-input-placeholder { 
    color: red; text-overflow: ellipsis; 
}
:-moz-placeholder { 
    color: #acacac !important; text-overflow: ellipsis; 
}
::-moz-placeholder { 
    color: #acacac !important; text-overflow: ellipsis; 
} /* For the future */
:-ms-input-placeholder { 
    color: #acacac !important; text-overflow: ellipsis; 
}

41

โซลูชันข้ามเบราว์เซอร์:

/* all elements */
::-webkit-input-placeholder { color:#f00; }
::-moz-placeholder { color:#f00; } /* firefox 19+ */
:-ms-input-placeholder { color:#f00; } /* ie */
input:-moz-placeholder { color:#f00; }

/* individual elements: webkit */
#field2::-webkit-input-placeholder { color:#00f; }
#field3::-webkit-input-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
#field4::-webkit-input-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }

/* individual elements: mozilla */
#field2::-moz-placeholder { color:#00f; }
#field3::-moz-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
#field4::-moz-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }

เครดิต: David Walsh


41

ใช้ตัวเลือกใหม่::placeholderหากคุณใช้ตัวแก้ไขอัตโนมัติ

โปรดทราบว่า. placeholder mixin จากBootstrapไม่ได้รับการสนับสนุนในเรื่องนี้

ตัวอย่าง:

input::placeholder { color: black; }

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


40

ตอนนี้เรามีวิธีการมาตรฐานที่จะใช้ CSS เพื่อการป้อนข้อมูลของตัวจองพื้นที่: ::placeholderหลอกองค์ประกอบจากนี้ CSS โมดูลระดับที่ 4 ร่าง


สิ่งนี้ใช้ได้ใน Firefox 51 ฉันแค่จะใช้วิธีนี้ เบราว์เซอร์อื่น ๆ จะทันเร็วพอสำหรับฉัน (เนื่องจากไม่มีการทำงานที่เสียหายหากไม่ได้ใช้สไตล์ที่เป็นมาตรฐาน)
Lonnie Best

36

ฉันเพิ่งรู้อะไรบางอย่างสำหรับ Mozilla Firefox 19+ ที่เบราว์เซอร์ให้ค่าความทึบสำหรับตัวยึดตำแหน่งดังนั้นสีจะไม่เป็นอย่างที่คุณต้องการ

input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
    color: #eee; opacity:1;
}
input:-moz-placeholder, textarea:-moz-placeholder {
    color: #eee; opacity:1;
}
input::-moz-placeholder, textarea::-moz-placeholder {
    color: #eee; opacity:1;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
    color: #eee; opacity:1;
}

ฉันเขียนทับopacity1 สำหรับดังนั้นมันจะดีไป


35

ฉันจำไม่ได้ว่าฉันพบข้อมูลโค้ดนี้ทางอินเทอร์เน็ตที่ใด (ไม่ได้เขียนโดยฉันไม่จำได้ว่าฉันพบที่ไหนและไม่ได้เขียน)

$('[placeholder]').focus(function() {
        var input = $(this);
        if (input.val() == input.attr('placeholder')) {
            input.val('');
            input.removeClass('placeholder');
        }
    }).blur(function() {
        var input = $(this);
        if (input.val() == '' || input.val() == input.attr('placeholder')) {
            input.addClass('placeholder');
            input.val(input.attr('placeholder'));
        }
    }).blur();
    $('[placeholder]').parents('form').submit(function() {
        $(this).find('[placeholder]').each(function() {
            var input = $(this);
            if (input.val() == input.attr('placeholder')) {
                input.val('');
            }
        })
    });

เพียงโหลดรหัส JavaScript นี้จากนั้นแก้ไขตัวยึดตำแหน่งของคุณด้วย CSS โดยเรียกกฎนี้:

form .placeholder {
   color: #222;
   font-size: 25px;
   /* etc. */
}

3
นี่เป็นวิธีเก่า ๆ ในการทำซึ่งฉันใช้มาไม่นาน ข้อเสียคือข้อความตัวแทนจะหายไปเมื่อคุณมุ่งเน้น ฉันพบว่าสิ่งนี้น่ารำคาญเมื่อ UI ไม่รวมป้ายกำกับถัดจากอินพุต ในช่วงหลายเดือนที่ผ่านมาฉันเริ่มแทนที่วิธีนี้ด้วยการใช้ข้อความตัวยึดซึ่งฉันคิดว่าเป็นการปรับปรุง UX
Redtopia

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

34

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

input[type="text"]::-webkit-input-placeholder {
    color: red;
}

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

33

สำหรับผู้ใช้Bootstrapถ้าคุณใช้class="form-control"อาจมีปัญหาเฉพาะ CSS คุณควรได้รับความสำคัญสูงกว่า:

.form-control::-webkit-input-placeholder {
    color: red;
}
//.. and other browsers

หรือถ้าคุณใช้Less :

.form-control{
    .placeholder(red);
}

19

หากคุณใช้Bootstrapและไม่สามารถใช้งานได้คุณอาจพลาดความจริงที่ว่า Bootstrap เพิ่มตัวเลือกเหล่านี้ นี่คือ Bootstrap v3.3 ที่เรากำลังพูดถึง

หากคุณพยายามที่จะเปลี่ยนตัวยึดตำแหน่งในคลาส CSS. formform controlคุณควรแทนที่มันเช่นนี้

.form-control::-webkit-input-placeholder { /* WebKit, Blink, Edge */
    color:    #777;
}
.form-control:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
    color:    #777;
    opacity:  1;
}
.form-control::-moz-placeholder { /* Mozilla Firefox 19+ */
    color:    #777;
    opacity:  1;
}
.form-control:-ms-input-placeholder { /* Internet Explorer 10-11 */
    color:    #777;
}

17

รหัสสั้นและสะอาดนี้:

::-webkit-input-placeholder {color: red;}
:-moz-placeholder           {color: red; /* For Firefox 18- */}
::-moz-placeholder          {color: red; /* For Firefox 19+ */}
:-ms-input-placeholder      {color: red;}

17

เกี่ยวกับเรื่องนี้

<input type="text" value="placeholder text" onfocus="this.style.color='#000'; 
    this.value='';" style="color: #f00;" />

ไม่มี CSS หรือตัวยึดตำแหน่ง แต่คุณจะได้รับฟังก์ชันการทำงานเดียวกัน


15
จะเกิดอะไรขึ้นถ้ามีคนคลิกอีกครั้งหลังจากเขียนบางสิ่ง .. ข้อความต้นฉบับที่พวกเขาเขียนจะหายไป!
Lucky Soni

3
@ LuckySoni คุณสามารถทำได้ แต่โดยส่วนตัวแล้วฉันชอบคนแรก <input type="text" value="placeholder text" onfocus="if(!this.haswriting){this.style.color='#000'; this.value='';}" onblur="if(!this.value){this.style.color='#f00'; this.value='placeholder text'; this.haswriting=false;}else{this.haswriting=true};" style="color: #f00;"/>
user1729061

9
แม้แต่รุ่นที่สองของคุณก็ไม่มีฟังก์ชั่นการใช้งานเหมือนกัน หากผู้ใช้ส่ง<form>ด้วยการป้อนข้อมูลนี้ตัวยึดข้อความจะถูกส่งไปยังเซิร์ฟเวอร์ ฉันเห็นเว็บไซต์จำนวนมากทำสิ่งนี้ผิด
lqc

สิ่งนี้เป็นอันตราย! หากคุณกลับมาที่แบบฟอร์มคุณสูญเสียทุกอย่าง!
Mobarak Ali

15

ฉันลองทุกชุดที่นี่เพื่อเปลี่ยนสีบนแพลตฟอร์มมือถือของฉันและในที่สุดมันก็เป็น:

-webkit-text-fill-color: red;

ซึ่งทำเคล็ดลับ


2
This property allows you to specify a fill color for text. If it is not set, then the color property will be used to do the fill.ฟังดูเหมือนว่าคุณจะมีกฎ CSS อื่น ๆ ที่ตั้งค่าcolorคุณสมบัติ
David Murdoch

8

สำหรับผู้ใช้ SASS / SCSS ที่ใช้Bourbonจะมีฟังก์ชั่นในตัว

//main.scss
@import 'bourbon';

input {
  width: 300px;

  @include placeholder {
    color: red;
  }
}

CSS Output คุณสามารถคว้าส่วนนี้และวางลงในโค้ดของคุณ

//main.css

input {
  width: 300px;
}

input::-webkit-input-placeholder {
  color: red;
}
input:-moz-placeholder {
  color: red;
}
input::-moz-placeholder {
  color: red;
}
input:-ms-input-placeholder {
  color: red;
}

8

ลองใช้รหัสนี้สำหรับองค์ประกอบอินพุตที่แตกต่างกันสไตล์ที่แตกต่าง

your css selector::-webkit-input-placeholder { /*for webkit */
    color:#909090;
    opacity:1;
}
 your css selector:-moz-placeholder { /*for mozilla */
    color:#909090;
    opacity:1;
}
 your css selector:-ms-input-placeholder { /*for for internet exprolar */ 
   color:#909090;
   opacity:1;
}

ตัวอย่างที่ 1:

input[type="text"]::-webkit-input-placeholder { /*for webkit */
    color: red;
    opacity:1;
}
 input[type="text"]:-moz-placeholder { /*for mozilla */
    color: red;
    opacity:1;
}
 input[type="text"]:-ms-input-placeholder { /*for for internet exprolar */ 
   color: red;
   opacity:1;
}

ตัวอย่างที่ 2:

input[type="email"]::-webkit-input-placeholder { /*for webkit */
    color: gray;
    opacity:1;
}
 input[type="email"]:-moz-placeholder { /*for mozilla */
    color: gray;
    opacity:1;
}
 input[type="email"]:-ms-input-placeholder { /*for for internet exprolar */ 
   color: gray;
   }


5

การเพิ่มความเป็นไปได้ที่ดีและเรียบง่าย: css ฟิลเตอร์ !

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

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

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

มันจะจัดรูปแบบทุกอย่างรวมถึงตัวยึดตำแหน่ง

ต่อไปนี้จะตั้งค่าอินพุตทั้งสองบนพาเล็ตเดียวกันโดยใช้ฟิลเตอร์ hue เพื่อเปลี่ยนสี มันแสดงผลได้ดีมากในเบราว์เซอร์ (ยกเว้นเช่น ... )

input {
  filter: sepia(100%) saturate(400%) grayscale(0) contrast(200%) hue-rotate(68deg) invert(18%);
}
<input placeholder="Hello world!" />
<input type="date" /><br>
<input type="range" />
<input type="color" />

ในการอนุญาตให้ผู้ใช้เปลี่ยนแบบไดนามิกโดยใช้สีประเภทอินพุตสำหรับการเปลี่ยนแปลงหรือค้นหาความแตกต่างลองดูตัวอย่างนี้:

จาก: https://codepen.io/Nico_KraZhtest/pen/bWExEB

function stylElem() {
  stylo.dataset.hue = ((parseInt(stylo.value.substring(1), 16))/46666).toFixed(0)
  Array.from(document.querySelectorAll('input, audio, video')).forEach(function(e){
      e.style.cssText += ";filter:sepia(100%) saturate(400%)grayscale(0)contrast(200%)hue-rotate("+ stylo.dataset.hue+"deg)invert("+(stylo.dataset.hue/3.6)+"%)"
  out.innerText = e.style.cssText
})()}

stylElem()
<div id="out"></div> <p>
  <input placeholder="Hello world!" />
  <input type="date" /><br>
  <input type="range" />
  <input type="color" />
Colors (change me)-> 
<input type="color" id="stylo" oninput="stylElem()" /> <br><br>
<audio controls src="#"></audio> <br><br> 
<video controls src="#"></video>

ตัวกรอง Css: https://developer.mozilla.org/en-US/docs/Web/CSS/filter


4

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

*::-webkit-input-placeholder { /* WebKit browsers */
    color:    #ccc;
}
*:-moz-placeholder { /* Mozilla Firefox <18 */
    color:    #ccc;
    opacity:  1;
}
*::-moz-placeholder { /* Mozilla Firefox 19+ */
    color:    #ccc;
    opacity:  1;
}
*:-ms-input-placeholder { /* Internet Explorer 10-11 */
    color:    #ccc;
}

3

คุณสามารถเปลี่ยนสีตัวยึดตำแหน่งของอินพุต HTML5 ด้วย CSS หากบังเอิญความขัดแย้ง CSS ของคุณรหัสบันทึกนี้ใช้งานได้คุณสามารถใช้ (! สำคัญ) ด้านล่าง

::-webkit-input-placeholder { /* WebKit, Blink, Edge */
    color:#909 !important;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
   color:#909 !important;
   opacity:1 !important;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
   color:#909 !important;
   opacity:1 !important;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
   color:#909 !important;
}
::-ms-input-placeholder { /* Microsoft Edge */
   color:#909 !important;
}

<input placeholder="Stack Snippets are awesome!">

หวังว่าจะช่วยได้


3

คุณสามารถใช้สิ่งนี้สำหรับรูปแบบการป้อนข้อมูลและการโฟกัส:

input::-webkit-input-placeholder  { color:#666;}
input:-moz-placeholder  { color:#666;}
input::-moz-placeholder { color:#666;}
input:-ms-input-placeholder  { color:#666;}
/* focus */
input:focus::-webkit-input-placeholder { color:#eee; }
input:focus:-moz-placeholder { color:#eee } /* FF 4-18 */
input:focus::-moz-placeholder { color:#eee } /* FF 19+ */
input:focus:-ms-input-placeholder { color:#eee } /* IE 10+ */

2

วิธีที่ง่ายที่สุดคือ:

#yourInput::placeholder {
    color: red;/*As an example*/
}
/* if that would not work, you can always try styling the attribute itself: */
#myInput[placeholder] {
    color: red;
}


1

นี่คือวิธีแก้ปัญหาด้วยตัวเลือก CSS

::-webkit-input-placeholder { /* WebKit, Blink, Edge */
    color:    #909;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
   color:    #909;
   opacity:  1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
   color:    #909;
   opacity:  1;
}
::-ms-input-placeholder { /* Microsoft Edge */
   color:    #909;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
   color:    #909;
}
  • WebKit, Blink (Safari, Google Chrome, Opera 15+)และMicrosoft Edgeกำลังใช้องค์ประกอบปลอม:
    :: - webkit-input-placeholder
  • Mozilla Firefox 4 ถึง 18กำลังใช้คลาส pseudo
    :: -moz-placeholder (หนึ่งโคลอน)
    Mozilla Firefox 19+ใช้ pseudo-element:
    :: - moz-placeholder แต่ตัวเลือกเก่าจะยังคงใช้งานได้ระยะหนึ่ง
  • Internet Explorer 10 และ 11กำลังใช้คลาส pseudo
    :: -ms-input-placeholder
  • Internet Explorer 9และรุ่นที่ต่ำกว่าไม่รองรับคุณสมบัติตัวยึดตำแหน่งทั้งหมดในขณะที่ Opera 12 และรุ่นต่ำกว่าไม่รองรับตัวเลือก CSS ใด ๆ สำหรับตัวยึดตำแหน่ง

0

ส่วนหนึ่งของ HTML:

 <form action="www.anything.com">
 <input type="text" name="name"
  placeholder="Enter sentence"/>
  </form>

ฉันจะแสดงวิธีเปลี่ยนสีการแสดงออกของ 'ใส่ประโยค' โดย CSS:

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