2

我对 a 进行了一些自定义,checkbox并尝试使不透明度在 IE8 中工作。-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; _ 正在处理 div,但是当我使用复选框时,它不起作用。在 chrome 和 firefox 中,不透明度工作正常。不透明度适用于输入/标签元素?

HTML:

    <div class="col-xs-4 col-sm-4 col-md-4 data-stats">
       <div class="check-user-data">
          <input type="checkbox" value="checked" id="review-username" name="check"/>
          <label for="review-username"></label>
       </div>
    </div>

CSS:

input[type=checkbox] {
        visibility: hidden;
    }

    .check-user-data {
        height: 50px;
        text-align: center;
    }

    .check-user-data label {
        cursor: pointer;
        position: absolute;
    }

    .check-user-data label:after {
        font-family: 'Glyphicons Halflings';
        content: "\e013";
        position: absolute;

        /* IE 8 */
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";

        opacity: 0.2;
    }

    .check-user-data label:hover::after {
        color: #49FF90;

        /* IE 8 */
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

        opacity: 0.5;
    }

    .check-user-data input[type=checkbox]:checked + label:after {
        color: #3BCC73;

        /* IE 8 */
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";

        opacity: 1;
    }
4

1 回答 1

2

确保包含所有相关的不透明度属性:

/* IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";

/* IE 5-7 */
filter: alpha(opacity=20);

/* Netscape Based Browsers (Mozilla */
-moz-opacity: 0.2;

/* For early Safari's (1.x) */
-khtml-opacity: 0.2;

/* Official CSS property */
opacity: 0.2;

我不知道您支持哪种浏览器,但这应该可以为您提供对当今使用的大多数主流浏览器版本的支持。

另外,我自己在一些代码中遇到了这个问题。确保有问题的复选框在z-index具有不透明度的父级上方没有。我发现,与官方规范相反,如果父级不透明,Chrome 和 Firefox 将使父级内的所有元素不透明。IE实际上正确地实现了它,它不仅考虑了元素所在的父元素,还考虑了元素与父元素相关的z-index。

示例 1:

<!-- Markup -->
<div id="parent" class="transparent">
    <div id="child"></div>
</div>

/* CSS */
.transparent {
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
    filter: alpha(opacity=20);
    -moz-opacity: 0.2;
    -khtml-opacity: 0.2;
    opacity: 0.2;
}

在这种情况下,父元素和子元素都将应用不透明度属性。

示例 2:

<!-- Markup -->
<div id="parent" class="transparent">
    <div id="child"></div>
</div>

/* CSS */
#parent {
    position: relative;
    z-index: 0;
}

#child {
    position: relative;
    z-index: 1;
}

.transparent {
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
    filter: alpha(opacity=20);
    -moz-opacity: 0.2;
    -khtml-opacity: 0.2;
    opacity: 0.2;
}

在此示例中,子元素的 z-index 大于父元素。本质上,如果您能够将标记绕 x 轴旋转 90 度,您将在 z 轴上看到两个单独的层。在上面的示例中,我发现 Chrome 和 Firefox 将这两个元素呈现为不透明,即使这些元素位于两个不同的层上。在 IE 中,它们没有(根据官方规范)。是关于 opacity 属性的官方规范。以下是相关片段:

由于不透明度小于 1 的元素是由单个屏幕外图像合成的,因此其外部的内容无法在其内部的内容块之间按 z 顺序分层。出于同样的原因,实现必须为不透明度小于 1 的任何元素创建新的堆叠上下文。如果未定位不透明度小于 1 的元素,则实现必须在其父堆叠上下文中同时绘制它创建的层如果它是具有“z-index:0”和“不透明度:1”的定位元素,将使用的堆叠顺序。如果定位了不透明度小于 1 的元素,则应用“z-index”属性,如 [CSS21] 中所述,除了“auto”被视为“0”,因为总是创建新的堆叠上下文。有关堆叠上下文的更多信息,请参见 [CSS21] 的第 9.9 节和附录 E。

我知道这可能比您想要的要多一点,但是我看到您在 CSS 中进行了定位,并且我之前一直被这个问题所困扰,所以我想我会分享。

祝你好运,编码愉快!

于 2013-10-24T13:21:14.520 回答