【问题标题】:Manipulate Pseudo Elements with Custom Fields使用自定义字段操作伪元素
【发布时间】:2016-01-15 16:46:19
【问题描述】:

我需要做的与post 类似,但我需要用户能够使用自定义字段更改伪元素。仍在学习 JavaScript,这一直很困难!

用户需要能够改变 ~border-right: 500px solid #4679BD;

自定义字段是~$angle = get_field('contact_angle_color');

这是我的代码,没有失败的 JavaScript 尝试:

.relative-wrap {
position: relative; 
min-height: 150px;
}

    .triangle-down-right {
    width: 50%;
    height: 0;
    padding-top: 54%;
    overflow: hidden;
    position: absolute;
    top: 0;
    right: 0;
    }
    
    .triangle-down-right:after {
    content: "";
    display: block;
    width: 0;
    height: 0;
    margin-top:-500px;
    border-top: 500px solid transparent;
    border-right: 500px solid #4679BD;
    }
<div class="triangle-down-right"></div>

【问题讨论】:

  • 你不能用javascript影响伪元素...你需要换掉类。
  • 你可以,但它很乱。你为什么对我的帖子投了反对票?
  • 我没有投反对票。 其他人可能是因为问题不清楚。

标签: javascript css pseudo-element


【解决方案1】:

我无法理解关于 自定义字段 的部分,但如果您计划对伪元素进行无限控制,那么祝您好运。目前,可以通过将内联 css 注入 DOM 来使用 Javascript 操作伪元素,如 this post 中所述,但不建议这样做,除非你绝对必须这样做。

因此,更改伪元素的另一种方法是在元素上添加/删除/修改类名。请参阅下面的示例代码和 JSFiddle:https://jsfiddle.net/9w4d6mts/

HTML:

<input type="button" id="direction" value="Change Direction">
<br>
<input type="button" id="color" value="Change Color">
<div id="demo" class="triangle-down-right alt"></div>

CSS:

.relative-wrap {
  position: relative;   
  min-height: 150px;
}

.triangle-down-right,
.triangle-down-left {
    width: 50%;
    height: 0;
    padding-top: 54%;
    overflow: hidden;
    position: absolute;
    top: 0;
    right: 0;
}

.triangle-down-right:after,
.triangle-down-left:after {
    content: "";
    display: block;
    width: 0;
    height: 0;
    margin-top:-500px;
    border-top: 500px solid transparent;
}

.triangle-down-right:after {
  border-right: 500px solid #4679BD;
}

.triangle-down-left:after {
  border-left: 500px solid #4679BD;
}

.triangle-down-right.alt:after,
.triangle-down-left.alt:after {
  border-color: transparent #D4679B transparent;
}

JS:

document.getElementById('direction').addEventListener('click', function(){
    var d = document.getElementById('demo');
  d.className = (d.className.replace(' alt','') === "triangle-down-right") ? d.className.replace('right','left') : d.className.replace('left','right');
});

document.getElementById('color').addEventListener("click", function(){
    var d = document.getElementById('demo');
    console.log(d.className);
    d.className = (d.className.slice(-3) === "alt") ? d.className.replace(' alt','') : d.className + ' alt';
});

基本上,我们预先准备好 CSS 中的类,并根据用户交互使用 Javascript 切换它们。就是这样。

【讨论】:

  • 我构建了一个自定义的 WordPress 模板,我需要让用户能够更改角度的颜色(自定义发布一个他们可以输入十六进制值的区域)。我可以根据这个来解决这个问题,但你会建议只使用 Javascript 来设计这个吗?我尽可能多地使用 CSS 的原因是因为他们的客户倾向于使用较旧的网络浏览器。
  • 我不知道你还能用什么,除了用 PHP 构建一个主题生成器(并且基于项目,这可能意味着一些严肃的工作)。另一种选择可能是为这个角度预定义一些样式,为每个样式创建一个单独的样式表,并根据用户选择的颜色提供相关的样式表,但这也有两个缺点:(1)额外的样式表意味着额外的服务器请求, (2) 颜色数量有限。
  • 非常感谢你把我拉回来,因为你是对的。我将使它适用于具有更简洁代码的新浏览器并为旧浏览器设置默认值。
猜你喜欢
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2019-07-02
  • 2014-06-13
相关资源
最近更新 更多