【问题标题】:Can not insert css image into pseudo :before无法将css图像插入伪:之前
【发布时间】:2012-04-22 17:50:23
【问题描述】:

我正在尝试将背景图片插入到 header:before 元素中,但 jquery 失败。

HTML 内容

 <a href="image.jpg" class="image-source">Try insert image into .header:before</a>

JS

 $('.image-source').click(function() {
   var src = $(this).attr('href');
    // slash is okay
    $('.header:before').css('backgroundImage', 'url(/' + src + ')'); 
    return false;
 });

CSS:

.header {
  position: relative;
  background: url(anotherimage.jpg) no-repeat;
}
.header:before  {
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
  margin:auto;
  min-width:50%;
  min-height:50%;
  content: "";
}

有谁知道我是在这里处理一个错误,还是错过了一个明显的错误? 请注意,我不能使用.header 本身,因为我正在处理多个背景图像,这就是我需要:before 的原因。

更新: 可能是这样的:

【问题讨论】:

  • 您是否尝试过只更改一个类而不是直接设置图像?
  • 谢谢,不过没课,我有很多动态图
  • @Rob W,我不认为这是一个骗局,谢谢
  • @RobW 就是这样,但content: url(attr(data-src)); 无效且不起作用...

标签: jquery


【解决方案1】:

您可以将背景图像作为直接内容插入,而不是使用 javascript

.header:before  {
  ...
  content: url(...);
}

【讨论】:

  • 如果他需要以编程方式更改背景怎么办?这不是 OPs 问题的答案。
  • 谢谢,但我正在尝试玩 jquery。而且我也不能使用内容插入动态图像
【解决方案2】:

我认为最好的办法是这样做: css:

header.first:after{/* your image etc */}
header.second:after{/* your image etc */}
header.third:after{/* your image etc */}

然后是 jQuery:

var headers = ["first","second","third"];
var i = 0;
$(".next").click(function(){
  i %= headers.length;
  $("header").removeClass(headers[i-1]).addClass(headers[i]);
  i++;
});

【讨论】:

  • 谢谢,有 20 张图片可以玩,听起来有点多余 :(
  • @swan,是的,一定有更好的方法,你不能在你的 html 中添加一个元素吗?更改实际在 DOM 中的元素上的 BG 图像会更容易...
  • 不,恐怕。它动态插入图像以供选择。图像也是从不同位置的一两个文件夹聚合而成的。不可避免的是图像可能会超时增长到数百个。
  • @swan 我已经减少了 JS 中的冗余...检查一下,但是如果你有数百个 CSS 似乎不是最好的答案。
  • “你不能在你的 html 中添加一个元素吗”。这欺骗了我做相反的事情。 .header 用于动态图像,.header:before 用于静态 dom。这并不能解决最初的问题,而是让球滚。非常感谢
【解决方案3】:

您不能使用 jQuery 操作伪元素。它们不是 DOM 的一部分。您可能还想避免丑陋的解决方法。

这是最丑陋但我最好的解决方法之一

var css = '.image:after { content: url("https://www.google.com/images/srpr/logo3w.png");  width: 400px; height: 100px; }';

$("#replaceable").html(css);
$("div").addClass('image');

$("div").click(function() {
    var css = '.image:after { content: url("http://www.google.com/logos/2012/elias_lonnrot-2012-hp.jpg");  width: 400px; height: 100px; }';
    $("#replaceable").html(css);
});

Demo

【讨论】:

  • 是的,谢谢,这正是 T.J.克劳德在这里说:stackoverflow.com/questions/5814810/…
  • @swan,我有没有提到它正是你需要的。
  • 仍在消化。听起来比我想做的更复杂。
  • @swan,没有让你满意,是吗?
  • 它很好,谢谢,但是额外的标记 id="replaceable" 打败了我的干净标记。还在消化
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 2017-06-28
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多