Editing input type=“search” Pseudo-element Button ('x')

后端 未结 5 915
攒了一身酷
攒了一身酷 2020-12-05 03:46

I\'m trying to make a search bar that will look nice. What I did is, I made an image of an search bar and I\'m adding the image to the back-ground of the input and I\'m edit

相关标签:
5条回答
  • 2020-12-05 04:31

    For anyone finding themselves here (as I did) thinking "how do I inspect this element to apply custom styles?", you'll need to enable the user agent shadow DOM to make these vendor elements accessible.

    For WebKit (Safari) & Blink (Chrome,Edge,Opera,Brave) browsers, follow these steps:

    1. Open DevTools (Ctrl+Shift+I)
    2. Find the 3x vertical dots, top-right and click to open up the dropdown menu
    3. Click "Settings" from this dropdown menu (2nd to last option in the list)
    4. In the context menu that opens, under "Preferences", find "Elements" towards the bottom and enable "Show user agent shadow DOM"

    As you can see, I'm a man of culture, if there is a dark theme, I use it

    0 讨论(0)
  • 2020-12-05 04:33

    I want to move [the small 'x' icon] a little bit left so it will fix my search bar image.

    Users expect things not to move much is UIs. If you decide to move the 'x' icon consider using pseudo-classes and move your search icon instead:

    If the search icon is embedded your background image move it into a second image with role="presentation" attribute and place it immediately after your input in the markup:

    <input id="search" name="Search" type="search" value="Search" />
    <svg role="presentation" class="i-search" viewBox="0 0 32 32" width="14" height="14" fill="none" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3">
      <circle cx="14" cy="14" r="12" />
      <path d="M23 23 L30 30" />
    </svg>
    

    Position it where the user expects:

    #search + svg {
      margin-left: -30px;
      margin-bottom: -2px;
    }
    

    Then hide and show it using the :placeholder-shown pseudo-classes:

    #search + svg {
      visibility: hidden;
    }
    #search:placeholder-shown + svg {
      visibility: visible;
    }
    

    You may style the 'x' icon if you wish. But you might not want to anymore.

    0 讨论(0)
  • 2020-12-05 04:42

    I'm not sure is this what you were looking for, but you can style your search bar like this

    fiddle

    HTML

    <div id="input">
    <input type="text" id="tb" />
        <a id="close" href="#"><img src="http://www.ecoweb.info/sites/default/files/tips-close.png"></a>
    </div>
    

    CSS

    #tb
    {
        border:none;
    }
    #input
    {
        padding:0px;
        border: 1px solid #999;
        width:150px;
    }
    
    #close
    {
        float:right;
    }
    
    0 讨论(0)
  • 2020-12-05 04:44

    Styling the "x" cancel search button in Webkit browsers

    Assuming you're talking about "Cancel search" [X] icon that appeas in Webkit browsers only (Chrome, Safari, Opera) you can use -webkit-search-cancel-button pseudo-element. E.g:

    #Search::-webkit-search-cancel-button{
        position:relative;
        right:20px;    
    }
    

    Demo: http://jsfiddle.net/5XKrc/1/

    Screenshot:

    Using this approach you can even create your own cancel button, for example this style:

    #Search::-webkit-search-cancel-button{
        position:relative;
        right:20px;  
    
        -webkit-appearance: none;
        height: 20px;
        width: 20px;
        border-radius:10px;
        background: red;
    }
    

    Instead of [X] will create a red circle.

    Demo http://jsfiddle.net/5XKrc/3/

    Screenshot:

    For IE10 and above you can use following to move the button:

    #Search::-ms-clear{
       margin-right:20px
    }
    

    Oh and do use placeholder="Search" instead of value="Search" - it will display word "search" when input is empty - and will automatically remove it when user types something.

    0 讨论(0)
  • 2020-12-05 04:44

    2020 Cross-browser consistent approach

    Here is a cross-browser implementation of the Clear Search "x" button, It uses the solid times-circle SVG from FontAwesome for the icon and works for both dark and light backgrounds. It also standardizes Safari to adopt the Chrome implementation to only show the icon when the form field has focus.

    input[type="search"] {
      border: 1px solid gray;
      padding: .2em .4em;
      border-radius: .2em;
    }
    
    input[type="search"].dark {
      background: #222;
      color: #fff;
    }
    
    input[type="search"].light {
      background: #fff;
      color: #222;
    }
    
    input[type="search"]::-webkit-search-cancel-button {
      -webkit-appearance: none;
      height: 1em;
      width: 1em;
      border-radius: 50em;
      background: url(https://pro.fontawesome.com/releases/v5.10.0/svgs/solid/times-circle.svg) no-repeat 50% 50%;
      background-size: contain;
      opacity: 0;
      pointer-events: none;
    }
    
    input[type="search"]:focus::-webkit-search-cancel-button {
      opacity: .3;
      pointer-events: all;
    }
    
    input[type="search"].dark::-webkit-search-cancel-button {
      filter: invert(1);
    }
    <input type="search" placeholder="search" class="light">
    <input type="search" placeholder="search" class="dark">

    NB. Though Edge is also webkit based and currently supports some modifications with the ::-webkit-search-cancel-button pseudo-class, my findings show that as soon as you set a background image using the url() syntax in css, the button disappears in Edge. For this reason, the above solution currently does not work in Edge.

    0 讨论(0)
提交回复
热议问题