当前位置: 首页 > 面试题库 >

CSS background-size:封面+ background-attachment:固定的剪辑背景图片

谈琛
2023-03-14
问题内容

我有一个包含背景图像的数字列表。类似于以下内容:

<ul>
  <li>
    <figure style="background-image: url(...);"></figure>
  </li>
  <li>
    <figure style="background-image: url(...);"></figure>
  </li>
  <li>
    <figure style="background-image: url(...);"></figure>
  </li>
</ul>

这些图像中的每个图像都将其background-size设置为,coverbackground-attachment设置为fixed

figure {
  width: 100%;
  height: 100%;
  background-size: cover;
  background-attachment: fixed;
}

当每个图形都占据整个视口时,这可以正常工作,但是如果存在任何偏移,则背景图像将被裁剪。

我希望图像可以垂直或水平剪切,但不能同时剪切,并且要以图形本身的大小为中心。

我知道有JavaScript解决方案,但是有没有办法使用CSS做到这一点?


问题答案:

不幸的是,这只是固定位置在CSS中的工作原理,而在纯CSS中则无法解决-您必须使用Javascript。

之所以出现这种情况是由于组合background-attachment: fixedbackground-size: cover。当您指定background-attachment: fixed它时,它实际上会使background- image行为就像是一幅position: fixed图像,这意味着它是从页面流和定位上下文中取出的,并且相对于视口而不是相对于其背景图像的元素。

因此,每当您同时使用这些属性时,cover无论元素本身的大小如何,都会相对于视口的大小来计算值,这就是为什么当元素与视口的大小相同但被裁剪时,它可以按预期工作的原因元素小于视口时的意外方式。

为了解决这个问题,您基本上需要使用background-attachment: scroll事件监听器并将其绑定到scrollJS中的事件,该事件监听器手动更新background- position相对于窗口已滚动的距离的相对值,以模拟固定位置,但仍background-size: cover相对于容器元素而不是视口进行计算。



 类似资料:
  • 描述 (Description) background-attachment确定平铺上下文和背景图像的滚动状态。 可能的值 (Possible Values) scroll - 设置为滚动的背景图像将与文档的其余部分一起滚动。 fixed - 设置为固定的背景图像将保持锁定到位,同时文档的其余部分滚动。 适用于 (Applies to) 所有HTML元素。 DOM语法 (DOM Syntax) o

  • 问题内容: 我有这个HTML: 使用此CSS: 我正在应用的背景图像是200x100像素,但我只想显示200x50像素的背景图像的裁剪部分。 似乎不是正确的CSS属性。我该怎么用呢? 不应使用,因为我在Sprite上下文中使用了上述CSS,在该Sprite上下文中,我要显示的图像部分小于定义CSS的元素。 问题答案: 您可以将图形放置在具有其自身尺寸上下文的伪元素中: 浏览器支持很好,但是如果需要

  • 问题内容: 我正在尝试在属性不足的属性中混合使用和属性。基于W3C的文档 应以斜杠()分隔属性之后。 W3C示例: 等效于: 但这是行不通的!还不清楚如何在和分别具有和或具有相同的值时使用简写属性。尚不清楚slash()是如何发生的?在我的Chrome15中无法正常运行。 我试图简化的示例是此CSS代码: 一个更清洁的例子 这不起作用 这也行不通 问题答案: 您的jsfiddle使用代替 似乎是“

  • 问题内容: 我想让div元素延伸到33%的宽度,并在CSS中完成背景图片 如何在mouseover或mouseneter上对div中的背景图像进行动画处理,是否有可以执行此操作的插件?background div必须使用background-size:cover,因为它是一个弹性页面。 我还没有小提琴,因为我不知道从哪里开始或如何开始 问题答案: 对于那些想要破解CSS过渡缩放以应用于背景尺寸的人

  • 尽管CSS允许给任何元素添加背景,但通常用在块级元素上。 背景属性应用在目标元素上,不过考虑到大部分HTML元素是具有透明背景的,那么在 body 上应用一个背景色,看起来将是给所有透明背景元素添加了一个默认背景。 背景色(background-color) 缺省值:transparent 可被子元素继承:不能。 我们在CSS颜色单位课程中已经学习过如何定义颜色,背景色也一样: body{ bac

  • 以下是具有背景颜色的折线图的示例。 我们已经在Google Charts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在,让我们看一个带背景颜色的折线图的示例。 配置 (Configurations) 我们使用background配置来更改图表的背景颜色。 options.setBackgroundColor("#f1f8e9"); 例子 (Example) H