【问题标题】:Editing input type="search" Pseudo-element Button ('x')编辑输入 type="search" 伪元素按钮 ('x')
【发布时间】:2014-01-15 05:48:09
【问题描述】:

我正在尝试制作一个看起来不错的搜索栏。我所做的是,我制作了一个搜索栏的图像,并将图像添加到输入的背景,我正在编辑字体将出现的位置和大小。 我唯一找不到编辑方法的是在我使用输入类型搜索时出现的小“x”按钮。 我想将它向左移动一点,以便修复我的搜索栏图像。

这是我的 HTML:

<input id="search" name="Search" type="search" value="Search" />

这是我的 CSS:

#search{
    width: 480px;
    height: 49px;
    border: 3px solid black;
    padding: 1px 0 0 48px;
    font-size: 22px;
    color: blue;
    background-image: url('images/search.jpg');
    background-repeat: no-repeat;
    background-position: center;
    outline: 0;
}

【问题讨论】:

  • 您的问题不完整。您提供的示例无法重现您描述的问题。
  • @hakre 确实如此,但仅在 Webkit 中。
  • @Yuriy 实际上,在 IE 11 中,您可以在输入字段中获得 x,但是如何更改它有点困难,在 FireFox 中您还没有。
  • @Paraíso 感谢您的提示。更新了我对 IE10+ 的回答以使用 -ms-clear
  • 这是我尝试过的解决方案。 jsfiddle.net/chandrasekarg/eb2yvgLd/1

标签: css search input webkit pseudo-element


【解决方案1】:

在 Webkit 浏览器中设置“x”取消搜索按钮的样式

假设您正在谈论仅在 Webkit 浏览器(Chrome、Safari、Opera)中出现的“取消搜索”[X] 图标,您可以使用 -webkit-search-cancel-button 伪元素。例如:

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

演示:http://jsfiddle.net/5XKrc/1/

截图:

使用这种方法,您甚至可以创建自己的取消按钮,例如这种样式:

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

    -webkit-appearance: none;
    height: 20px;
    width: 20px;
    border-radius:10px;
    background: red;
}

而不是 [X] 将创建一个红色圆圈。

演示http://jsfiddle.net/5XKrc/3/

截图:

对于 IE10 及以上版本,您可以使用以下方式移动按钮:

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

哦,请使用placeholder="Search" 而不是value="Search" - 当输入为空时它会显示单词“search” - 当用户输入内容时会自动删除它。

【讨论】:

【解决方案2】:

我不确定这是否是您要查找的内容,但您可以像这样设置搜索栏的样式

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;
}

【讨论】:

    【解决方案3】:

    我想将 [小“x”图标] 向左移动一点,以便修复我的搜索栏图像。

    用户希望 UI 不会发生太大变化。如果您决定移动“x”图标,请考虑使用伪类并移动您的搜索图标:

    如果嵌入了搜索图标,则将您的背景图片移动到具有role="presentation" 属性的第二张图片中,并将其放在标记中您的input 之后:

    <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>
    

    将其放置在用户期望的位置:

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

    然后使用:placeholder-shown 伪类隐藏和显示它:

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

    您可以根据需要设置“x”图标的样式。但你可能不想再这样做了。

    【讨论】:

    • 很好的解决方案imo ...浏览器解决方案的工作方式很花哨(仅在悬停或焦点等时显示,并且在浏览器中不一样)
    【解决方案4】:

    对于任何发现自己(和我一样)在这里思考“如何检查此元素以应用自定义样式?”的人,您需要启用用户代理影子 DOM 使这些供应商元素可访问。

    对于 WebKit (Safari) 和 Blink (Chrome、Edge、Opera、Brave) 浏览器,请执行以下步骤:

    1. 打开 DevTools (Ctrl+Shift+I)
    2. 找到右上角的齿轮图标,然后点击打开下拉菜单
    3. 在打开的上下文菜单中,在“Preferences”下,找到底部的“Elements”并启用“Show user agent shadow DOM"

    如你所见,我是一个有文化的人,如果有黑暗的主题,我会使用它

    【讨论】:

    • 这不是对所提问题的回答。
    • @JoshHabdas 不是,但它很有帮助。当我不得不处理像 OP 的问题这样的问题时,学到了一些新东西。
    【解决方案5】:

    2020 跨浏览器一致方法

    这是清除搜索“x”按钮的跨浏览器实现,它使用来自 FontAwesome 的实心时间圆 SVG 作为图标,适用于深色和浅色背景。它还标准化 Safari 以采用 Chrome 实现,仅在表单字段具有焦点时显示图标。

    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">

    注意。虽然 Edge 也是基于 webkit 的,并且目前支持使用 ::-webkit-search-cancel-button 伪类进行 一些 修改,但我的发现表明,只要您在 css 中使用 url() 语法设置背景图像,按钮消失在边缘。因此,上述解决方案目前在 Edge 中不起作用。

    【讨论】:

    • 我刚刚在 Edge 中运行了 sn-p,一切似乎都正常
    • 哦,有趣! (那太好了!)我想知道是什么搞砸了我的测试?
    • 在 Safari 中不起作用。 :(
    • @jmargolisvt 它在 Safari 中对我有用,但由于 safari 是新的 IE,ymmv。如果您能详细说明您是如何测试它的,将不胜感激。这是一个可能有助于为您隔离问题的小提琴jsfiddle.net/09gmet7r 请注意,有证据表明 Safari 中的支持存在问题:stackoverflow.com/a/35709128 它对我有用的屏幕截图:i.imgur.com/r7NzXOi.pngi.imgur.com/N0iCYW9.png
    • 我的错……它在 Firefox 中不起作用。
    【解决方案6】:
    #input[type="search"]::-webkit-search-cancel-button {
            // Using the two lines below will allow you to insert a image
            -webkit-appearance: none;
            -webkit-user-modify: read-write !important;
            height: 28px;
            content: url("clear button.png");
    

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 2013-05-29
      • 2016-06-05
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2021-02-23
      相关资源
      最近更新 更多