【问题标题】:There is no attribute "allowtransparency"没有属性“allowtransparency”
【发布时间】:2011-04-14 00:46:18
【问题描述】:

我正在寻找一些替代方法:

<iframe transparency=true   ...

当我进行 W3C 验证时,我收到了错误:

Column 31: there is no attribute "allowtransparency"

如果使用这个 CSS,

.iframe-trans-fix{
   opacity: 0;
   filter:alpha(opacity=0);
}

对于上面的 sn-p,我得到一个空白 iframe。

【问题讨论】:

    标签: html css w3c w3c-validation


    【解决方案1】:

    虽然 W3C 的 HTML 规范确实没有定义它,但它有一个 allowTransparency 属性,所有现代浏览器(和 Internet Explorer)都支持它。正如HTML5 告诉我们的那样,马车应该在马前。

    假设您的主页上有这个 HTML,index.html:

    <html>
        <body>
            <iframe src="source.html" 
                    allowTransparency="true" 
                    style="background-color:lightgreen;" 
                    width="400" height="200">
            </iframe>
        </body>
    </html>
    

    你的 source.html 看起来像这样:

    <html>
        <body>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin gravida, magna
               id bibendum sollicitudin, tellus tortor consequat enim, et mollis mauris 
               augue et dui. </p>
        </body>
    </html>
    

    当您在浏览器中打开主页 (index.html) 时,您会在 iframe 中看到 source.html 中的文本,但它的背景是浅绿色。

    (在 Mac OS X 和 Internet Explorer 8 和 Windows XP 上使用 Safari、Firefox 和 Chrome 测试)

    编辑:关键是:源页面不能设置自己的背景。如果是,它会忽略透明背景。

    更新:刚刚在 macOS High Sierra 上使用 Safari 12、Chrome 73 和 Firefox 65 进行了测试(2019 年 3 月),它仍然有效。

    【讨论】:

    • 这个属性可能没有你想象的那么广泛使用,你看到它是否真的改变了除 IE 之外的浏览器的行为吗?据我所知,这是一个特定于 IE 的属性,其他浏览器默认允许 iframe 透明,而忽略此属性。
    • 重读我的答案。您的问题已经有了答案。
    • @james.garriss 我读了你的回答,你特别写了所有浏览器都支持该属性,而不是它的功能。非 Internet Explorer 浏览器的行为类似于 Internet Explorer(显然是 8 及以下)的行为(当为其设置了属性时),即使没有为它们设置属性。 Chrome 似乎不支持 DOM 属性。你认为它到底支持什么?
    • 我真的不明白你在问什么。您是否尝试运行我提供的代码?这段代码展示了这些浏览器支持透明性(或者至少在我 3 年前测试它们时支持透明性)。自己试试代码。
    【解决方案2】:

    我不确定你想在这里做什么,但这应该是你要找的:

    iframe {
        background-color: transparent;
    }
    

    当然,这是假设您希望iframe 的背景是透明的。

    【讨论】:

      【解决方案3】:

      如果你已经包含了 jQuery 文件,你可以使用 jQuery 来做到这一点 -

      <!--[if lt IE 9]><script> $(".classname").attr("allowTransparency", "true"); </script><![endif]-->
      

      将 .classname 更改为 iframe 的名称,如果没有,则创建一个。 (也从 iframe 中取出属性) 将其直接放在 iframe 结束标记之后,它会为 IE9 之前的浏览器添加所需的 allowTransparency 标记。由于它位于 IE 条件语句中,因此 W3C 验证器不会读取它。如果您仍然使用最新的 jQuery 版本,它还通过添加人们已经提到的所有 CSS 消除了跨浏览器兼容性和内容隐藏问题。 allowTransparency 属性是根据明确定义的目的创建的,因此当您可以静默插入它时,尝试使用 CSS 重新创建它是没有意义的。 希望这对某人有帮助!

      (此方法假设您已经拥有iframe {background-color:transparent},它不适用于旧版 IE)

      【讨论】:

      • +1 表示实际尝试提供另一种方式,这是请求的。不过我还没有真正尝试过。
      • 这里不需要涉及jQuery。这足够了: document.getElementById("yourframeid").allowTransparency = true;
      • 自我引用“如果你已经安装了它”。我没有说你必须安装它才能做到这一点。如果你没有,那么我同意你的方式会更好。
      【解决方案4】:

      首先,没有 'transparency="true"' 这样的东西,所以这是行不通的。

      第二,你是想让背景透明还是整个iframe透明?

      CSS Opacity 属性使您使用的任何元素内的所有内容都透明。不透明度范围从 0 到 1,其中 0 表示完全透明,0.5 表示半透明,1 表示完全可见。

      如果你在 div 或 iframe(或任何东西)上使用它,背景和文本都将同样淡化。

      另一方面,在每个现代浏览器中,您都可以使用 RGBA 颜色将背景设置为部分透明。你应该这样做:

      iframe.transparent {
          background-color: #FFF; /*this gives a background color for browsers that can't do RGBA color, like internet explorer*/
          background-color: rgba(255,255,255,0.5);
      }
      

      RGBA 颜色定义与 opacity 属性一样工作(0 = 透明,1 = 纯色),不同之处在于它只会使您设置为透明的特定项目而不影响该项目内的项目(即它不影响iframe 中的文本)。前三个数字是颜色的红色、绿色和蓝色值,范围从 0 到 255。

      不过,如果您想要一个更好的跨浏览器解决方案,我建议您只使用透明的 .png 文件作为背景图像。您必须在 IE 上对此进行测试,不确定它是否适用于 iframe,但您可以在 iframe 上不设置背景,然后将透明图像设置为您在 iframe 中加载的页面的背景(应用它到该页面的正文元素)。

      希望这会有所帮助!

      【讨论】:

      • 这是变化,根据您上面的示例, 但仍然没有更新,在 IE 我的 iframe是白色的,但站点是黑色的 BG
      • 您能否分享您正在处理的页面的链接,以便我查看整个代码?
      【解决方案5】:
      1. 没有名为transparency 的HTML 属性,因此您将总是收到iframe transparency=true 的错误

      2. 如果将不透明度设置为零,则根本看不到元素 - 您需要定义不透明度:

        opacity: 0.25; /* all modern browsers */
        filter: alpha(opacity=25) /* IE */
        

      上面的 CSS(注意:不透明度值对于 IE 是 0-100,对于其他浏览器是 0-1)将允许后面的其他元素(例如页面背景图像)显示出来,即使具有 opacity 设置的元素有彩色背景。

      要对透明度进行更多控制,请参阅RGBA (A = alpha),但请注意可变浏览器支持。

      【讨论】:

      • 在 IE 中,我的 iframe 变得透明,但问题是我也无法在 iframe 中看到我的内容..
      • 你能提供一个示例页面吗?如果 iframe 的内容完全不可见,那么我猜测(没有看到):它没有获取 iframe 内容,内容正在继承另一个 CSS 设置,或者(很明显,但值得检查)它的颜色属性与背景颜色。将其颜色设置为红色,并删除不透明度规则 - 它仍然无法显示吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多