2015-03-26 3 views
10

मेरे पास निम्नलिखित हैं: http://jsfiddle.net/mb76koj3/सामग्री में प्लेसहोल्डर कैरेट को केंद्रित करने योग्य तत्व

[contentEditable=true]:empty::before{ 
 
    content:attr(data-ph); 
 
    color: #CCC; 
 
    text-align: center; 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
}
<h1 contenteditable="true" data-ph="Name"></h1>

समस्या <h1> केंद्रित है है, लेकिन प्लेसहोल्डर कैरट केंद्रित नहीं है (जब तक आप लिखना शुरू)। देखभाल बाईं तरफ है, मैं इसे कैसे बदल सकता हूं?

+0

दिलचस्प बात यह है कि IE11 में कर्सर सामग्री के अंत में शुरू होता है, क्रोम और फ़ायरफ़ॉक्स इसे बाएं-गठबंधन प्रस्तुत करता है। क्रोम एक नीली सीमा भी दिखाता है जहां अन्य दो नहीं करते हैं। – adamdc78

उत्तर

10

कोई आदर्श समाधान नहीं है लेकिन कर्सर को बीच में दिखाई देने के लिए :empty तत्व पर 50% के padding-left को लागू करके हम नकली प्रभाव डाल सकते हैं।

और उसके बाद पूर्ण स्थिति और translateX परिवर्तन फ़ंक्शन का नकारात्मक मान का उपयोग करके प्लेसहोल्डर (छद्म-तत्व) को बीच में संरेखित करें।

* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
@-moz-document url-prefix() { /* CSS Hack to fix the position of cursor on FF */ 
 
    [contentEditable=true]:empty { 
 
    padding-top: 1em; 
 
    padding-bottom: .25em; 
 
    -moz-box-sizing: content-box; 
 
    } 
 
} 
 

 
[contentEditable=true]:empty { 
 
    padding-left: 50%; 
 
    text-align: left; /* Fix the issue on IE */ 
 
} 
 

 
[contentEditable=true]:empty::before{ 
 
    content:attr(data-ph); 
 
    color: #CCC; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 50%; 
 
    -webkit-transform: translateX(-50%); 
 
    -moz-transform: translateX(-50%); 
 
    -ms-transform: translateX(-50%); 
 
    -o-transform: translateX(-50%); 
 
    transform: translateX(-50%); 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
    position: relative; 
 
}
<h1 contenteditable="true" data-ph="Name"></h1>

केवल समस्या यह है कि रहता है - के रूप में ओ पी द्वारा प्रदान किए गए कोड में देखा जा सकता - यह है कि Firefox पर, एक खाली <br> तत्व contentEditable तत्व है जो का कारण बनता है :empty छद्म वर्ग नहीं में जोड़ा जाता है अब तत्व से मेल खाते हैं। इसलिए प्लेसहोल्डर को बहाल नहीं किया जाएगा।

हालांकि चूंकि कर्सर की स्थिति के बारे में सवाल है, मुझे लगता है कि यह व्यवहार ओपी के लिए ठीक है।

2

Hashem Qolami's answer को देखने के बाद, मैं इस के साथ आया था:

[contentEditable=true]:empty { 
 
    padding-left: 50%; 
 
} 
 

 
[contentEditable=true]:empty::before{ 
 
    content:attr(data-ph); 
 
    color: #CCC; 
 
    text-align: center; 
 
    margin-left: -100%; 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
}
<h1 contenteditable="true" data-ph="Name"></h1>

हालांकि, adamdc78 2 समस्याओं की खोज की:

  • IE11 में, कर्सर प्लेसहोल्डर बाद दिखाई देता है ।
  • फ़ायरफ़ॉक्स में, प्लेसहोल्डर टाइपिंग और खाली करने के बाद पुनर्स्थापित नहीं किया जाता है।

इस समय, मैं यह समझ नहीं सकता कि इसे कैसे हल किया जाए।

संबंधित मुद्दे