强制IE8重新渲染/重新绘制:之前/:在伪元素之后

所以我一直在玩这个日历,

  • div格子(模仿一张桌子)
  • 将鼠标悬停在表格单元格上会显示一个包含2个图标的工具提示,每个图标都包含div:before和after元素
  • 图标会根据徘徊的单元格颜色和其以前的同级单元格颜色(单元格的颜色类别应用于图标)更改颜色。
  • 剥离小提琴:http://jsfiddle.net/e9PkA/1/

    这在每个浏览器中都能正常工作,但IE8及以下版本(IE lte 7和我绝不会是朋友,但IE8会很高兴)。

    IE8注意到classNames的更改并相应地更新了div的颜色,但完全忽略了之前和之后隐含的颜色更改:在声明之后,例如:

    .wbscal_icon_arrival:before {
        width: 12px;
        height: 4px;
    
        left: -8px;
        top: 6px;
        background-color: silver;
    }
    
    .wbscal_icon_arrival.wbscal_full:before {
        background-color: #ff0000 !important; 
    }
    

    在上面的提琴中,:之前/之后:元素仅被着色一次:第一次显示工具提示。

    在另一个版本中,每次我将鼠标移出“表格”div时都会更新,但如果在悬停“单元格”div边框时隐藏了工具提示,则不会更新。

    我尝试了通过向元素/它的父母/主体添​​加/删除其他类,编辑/访问样式属性以及其他类型来强制触发重绘,所以我想这不是您的平均重绘问题。

    有没有一个JS黑客解决这个问题,并强制:在/之前更新?


    一直试图弄清楚同样的事情。 除非您对内容进行更改,否则基本上IE8不会重新绘制伪元素。 所以我修改了你的例子(只是CSS):http://jsfiddle.net/lnrb0b/VWhv9/。 我添加了width:0overflow:hidden到伪元素,然后向每个颜色选项添加content:"x" ,其中x是一个递增的空格数。

    这个对我有用; 希望它可以帮助你!


    添加content:"x"每个声明的psuedo元素和递增元素的每个不同状态的空间数DEFINITELY修复问题。

    基本上,这个想法是告诉IE8每个状态的内容略有不同,所以重新绘制每个状态的内容。 所以,如果内容是相同的,我们用空格来“伪造”它。 辉煌!!


    @lnrbob真的很好的答案!

    我遇到了一个问题,那就是我使用了复选框输入的前后伪指令,这些伪指令使用一些父属性来显示其内容(由于易于在那里实现翻译)。

    所以他们看起来像:

    input:before {
        content: "" attr(data-on) "";
    }
    
    input:after {
        content: "" attr(data-off) "";
    }
    

    标记看起来像这样:

    <div class="switch off" data-on="It is ON" data-off="It is OFF">
        <input id="switch" name="switch" type="checkbox" class="off">
    </div>
    

    和我在jQuery中做的修改如下所示:

    var mSwitch = $('div.switch'),
        on = $.trim(mSwitch.attr('data-on')),
        off = $.trim(mSwitch.attr('data-off'));
    // remove any spaces due to trim
    mSwitch .attr('data-on', on);
    // add a space
    mSwitch .attr('data-on', on + ' ');
    mSwitch .attr('data-off', off);
    mSwitch .attr('data-off', off + ' ');
    

    我在设置/删除类之后调用这个修改来改变“复选框”的样式,在这种情况下它是一个开关按钮:D

    因此,如果某些硬核测试人员自动点击无限时间的输入,则不会从太多空间字符中获得堆栈溢出;)

    像那样:

    <div class="switch on" data-on="ON" data-off="OFF                                                                                                                                                                                                                                                 ">
    
    链接地址: http://www.djcxy.com/p/88393.html

    上一篇: Forcing IE8 to rerender/repaint :before/:after pseudo elements

    下一篇: Can the :not() pseudo