【问题标题】:How to clip an element's background to display only a part of the image?如何裁剪元素的背景以仅显示图像的一部分?
【发布时间】:2012-08-11 12:58:52
【问题描述】:

为了清楚起见,请查看以下图片。
第一个是我打算实现的。这是一个带有两个背景图像的文本输入元素,每侧一个。
第二张图片是包含我需要的图标的精灵图片。
现在我的问题是,是否可以剪切背景图像以仅显示图像的一部分?此外,是否可以在多种背景下使用它?

第一张图片:

第二张图片:

【问题讨论】:

    标签: html css background-image css-sprites clip


    【解决方案1】:

    目前,您将不得不使用两个单独的图标图像才能使其按预期工作。

    使用 CSS 精灵,背景被元素的大小剪裁,有一个名为 background-clip 的实验性 CSS3 属性,但它不能按照您想要的方式工作(它会剪裁到边框、填充或内容盒子,而不是特定的尺寸。)

    所以创建两个图标,在元素的每一侧使用一个background-position

    As you can see here,使用 spritesheet,它将显示整个背景图像,而不是您想要的两个图标。目前还没有办法以您想要的方式剪辑 BG 图像。 (希望有一天!)

    【讨论】:

    • 这就是我想出的。你确定没有别的办法吗?
    • 不幸的是,这是目前唯一的方法,也许有一天它会实现,但目前,2个图标是唯一的方法:)
    • 希望这一天能尽快过去!谢谢。 ;)
    【解决方案2】:

    您需要使用单独的图标,或者您需要在输入框顶部叠加 2 个附加元素(用于显示图标)。后者会让你使用精灵本身。

    【讨论】:

    • 后者不允许在不重新排序 spritesheet 布局的情况下在主 input 上使用 sprite。
    • @KyleSevenoaks - 精灵需要作为背景应用到覆盖的元素,而不是输入框本身。正如你所说,bg 不能用当今的 CSS 技术进行裁剪。
    • 啊,现在我明白了。好的,这可行,但需要一些不需要的标记。
    • @KyleSevenoaks - 实际上,这可以完全通过 CSS 使用 :before 和 :after 伪元素来完成,从而避免需要额外的标记。
    【解决方案3】:

    使用CSS3,您可以为一个元素使用多个背景图像。要显示图像中的特定部分,您需要设置其background-position 属性。

    例如:

    background-image: url(sprites.png), url(sprites.png);
    background-position: center bottom, left top;
    

    您还可以以像素为单位定义background-postion,例如:

    background-position: -5px 10px, -35px 10px;
    

    更多信息请查看link

    【讨论】:

    • 谢谢,但这不是我问的。我知道如何使用多个背景。我的主要问题是如何剪辑背景图像。
    【解决方案4】:

    设置你的元素(比如说 div)你的大背景图片,然后用background-position 调整。您的图像将根据您的元素大小(例如 div)进行裁剪。

    在你的情况下,它会在:

    background-position: -87 -35;
    

    和 div 大小:

    width: 28px; height: 30px
    

    【讨论】:

    • 请重新阅读问题。我有一个输入元素,我需要它与上图中显示的一样大。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多