【问题标题】:Moving or configuring ::-ms-clear in Internet Explorer 10在 Internet Explorer 10 中移动或配置 ::-ms-clear
【发布时间】:2013-03-06 06:07:40
【问题描述】:

在 IE10 中,包含值的焦点文本框的右侧会添加一个小 x。这个x 允许用户单击文本框以清除其值。

其他questions 已经谈到从用户视图中删除此功能,但除了在文本框右侧添加我自己的图标(例如搜索图标)之外,我还想保留该功能。不幸的是,这些图标最终会发生碰撞,因此我需要确定一种移动图标的方法,而我的搜索从未出现任何结果。

我一直试图回答的问题:IE10+ ::-ms-clear 伪元素可以使用哪些其他属性?

【问题讨论】:

    标签: css internet-explorer-10


    【解决方案1】:

    更新:正如另一位回答者所指出的,MS 文档已于 2013 年 6 月 19 日更新,以包含 ::-ms-clear 可用的所有属性。目前尚不清楚这是否适用于 IE10 而不是当前即将推出的 IE11,因此我将在下面留下其余答案。

    为了完整起见,他们还更新了::-ms-reveal 的文档,看起来与::-ms-clear 完全相同。

    下面的答案至少适用于 IE10。


    我找不到详尽的清单,因此我进行了实验:

    ::-ms-clear {
       margin: *; /* except margin-left */
       background: *;
       color: *;
       display: none|block;
       visibility: *;
    }
    

    不幸的是,我无法欺骗 IE 的开发人员模式 (F12) 来向我显示样式树中的 ::-ms-clear 属性,因此我不得不手动尝试并重新加载页面以进行实验。我什至尝试通过添加onblur=this.focus() 作弊,但没有奏效。

    CSS 属性做了一些事情,并且看起来很有用:

    • margin:边距给了我一种从文本框右侧移动它的方法。我将它移动了图标的大小,再加上 1-3 个像素以提供缓冲区。只有margin-left 似乎不起作用。
    • background:只是x的背景。应用任何background 设置会将您想要的内容置于其后面;它不会取代 x!
    • color:控制x的颜色。
    • display:正如让我来到这里的问题所指出的,none 将隐藏 x
    • visibility:似乎与display 类似。

    可以组合 colorbackground替换 x 使用不同的背景图片,只要它适合给定大小的x,看起来大约是 20px,但这只是我的眼睛。

    ::-ms-clear {
        color: transparent;
        background: no-repeat url("../path/to/image") center;
    }
    

    做了某事但似乎没用的CSS属性:

    • padding:它会影响x,但从未像我预期的那样影响它(一切似乎都隐藏了图标,或者至少将其移出视线)。
    • position:与padding 相同的行为。诚然,我更像是一名程序员而不是一名设计师,所以这可能是我自己的缺点。

    我猜测的 CSS 属性可能会做一些事情,但根本没有做任何事情:

    • text-align
    • float

    添加其他 CSS 伪元素不会影响::-ms-clear。具体来说,我用content: "y"尝试了::after::before,都没有结果。

    显然,这取决于您打算应用于文本框的伴随图标的大小,但我使用 14-16 像素的图标,我发现 margin-right: 17px 给了 x 一个明显的差距,这改变了 @987654359 @ 在我的右对齐图标的左侧。有趣的是,margin-left 似乎没有任何效果,但您可以对margin-right 使用负值。

    我最终使用的实际 CSS 阻止了我的图标被 x 覆盖。

    [class^="tbc-icon-"]::-ms-clear, [class*=" tbc-icon-"]::-ms-clear {
        margin-right: 17px;
    }
    

    我的图标都共享相同的基本名称tbc-icon-,这意味着::-ms-clear 伪元素会在应用时自动应用于所有图标。在所有其他情况下,伪元素以其默认方式运行。

    有趣的是,::-ms-reveal 的行为方式似乎相同,如果您要将图标应用于密码字段(我期望的可能性要小得多),那么您可以按照上面的示例:

    [class^="tbc-icon-"]::-ms-clear, [class*=" tbc-icon-"]::-ms-clear,
    [class^="tbc-icon-"]::-ms-reveal, [class*=" tbc-icon-"]::-ms-reveal {
        margin-right: 17px;
    }
    

    【讨论】:

    • 我认为::after::before没有任何效果的原因不是因为::-ms-clear,而是因为::-ms-clear属于input元素,不能生成内容,因为它们没有 any 内容(即是无效元素)。当然,除非 IE10/IE11 发生了一些变化,我怀疑是这种情况。
    • @BoltClock 我相当肯定你是对的。我想我只是希望它更具互动性,因为它很特别。
    【解决方案2】:

    至少可以在 MS 网站上找到一份清单。 http://msdn.microsoft.com/en-us/library/windows/apps/hh465740.aspx

    (但也许我误解了这个问题。)

    【讨论】:

    • 不,你完全理解正确。看起来 MS 在 6 月 19 日更新了他们的文档。这与我问题中的最后一个链接相同。
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多