Select first letter of input value and change it's color via CSS

前端 未结 5 1707
忘了有多久
忘了有多久 2021-01-05 20:48

Is there a way to select the text input values first letter and change its color via CSS in the stylesheet? so for example, I have



        
5条回答
  •  粉色の甜心
    2021-01-05 21:03

    Edit: I just noticed that there is a bug in Chrome that causes the cursor to become in the wrong spot with contenteditable and ::first-letter. It would work for any other case.

    I rolled my own (mostly CSS) solution for using

    combined with an a while ago, and I now share it with you. It emulates a text input, yet is a div. If the div is class text then input is forced to be on 1 line (otherwise it is closer to a textarea). The div comes with a placeholder that is its data-placeholder attribute. The form-remote-input attribute signals to the JS which input to fill hold the value of the div. To meet the requirements, I added ::first-letter {color: #F00;} to the div. Run the code snippet to see my false input.

    function remote_input_updater(element, scope) {
      var scope = typeof scope !== 'undefined' ?  scope : document;
      var remote_id = element.getAttribute('form-remote-input');
      var remote_element = scope.querySelector("#" + remote_id);
      // Load initial value
      element.textContent = remote_element.value;
      // Add blur event updater 
      var update_remote = function(e){
        remote_element.value = element.textContent;
        if(element.textContent == "") { // Remove extra 
    s that get added while (element.firstChild) { element.removeChild(element.firstChild); } } } element.addEventListener('blur', update_remote); }; [].forEach.call(document.querySelectorAll('[form-remote-input]'), function(element){remote_input_updater(element)});
    [contenteditable] {
      color: #000;
      border: 1px solid black;
      padding: 3px;
      min-height: 1.2em;
    }
    
    [contenteditable]:empty::before{
        content: attr(data-placeholder);
        color: #666;
    }
    
    [contenteditable=true]:empty:focus::before{
        content: "\00a0";
    }
    
    [contenteditable]:focus {
      outline: none;
    }
    
    /* Forces single line */
    .text[contenteditable] br{
        display:none;
    }
    
    .text[contenteditable] * {
      display: inline;
    }
    
    #first-red::first-letter {
      color: #F00;
    }
    
    

提交回复
热议问题