2010-09-18 3 views
29

Я ищу какой-то альтернативный способ сделать:Там нет атрибута «allowtransparency»

<iframe transparency=true ... 

Когда я делаю проверку W3C, я получаю сообщение об ошибке:

Column 31: there is no attribute "allowtransparency" 

Если использовать этот CSS,

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

для вышеуказанного фрагмента Я получаю пустой iframe.

ответ

31

Хотя верно, что спецификация HTML W3C не определяет его, существует атрибут 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> 

При открытии главной страницы (индекс. html) в вашем браузере, вы увидите текст из source.html в iframe, но он будет иметь светло-зеленый фон.

(Испытано с Safari, Firefox и Chrome на Mac OS X и Internet Explorer 8 и Chrome на Windows XP)

Edit: Ключ заключается в следующем: исходная страница не может установить свой собственный фон. Если это так, он игнорирует прозрачный фон.

+1

Этот атрибут может быть не так широко распространен, как вы думаете, вы видели, действительно ли это изменило поведение в браузерах, кроме IE? Насколько я могу судить, это особый атрибут IE и другие браузеры по умолчанию, позволяющие прозрачность в iframe и просто игнорировать этот атрибут. –

+0

Перечитайте мой ответ. Ответ на ваш вопрос уже есть. –

+0

@ james.garriss Я прочитал ответ, и вы специально пишете, что все браузеры поддерживают атрибут, а не его функциональность. Не браузеры Internet Explorer ведут себя так же, как Internet Explorer (8 и ниже, по-видимому) ведет себя (когда атрибут установлен для него) даже тогда, когда атрибут не установлен для них. Кажется, что Chrome не поддерживает свойство DOM. Как вы думаете, что он поддерживает? – PhistucK

12

Я не уверен, что вы пытаетесь сделать здесь, но это должно быть то, что вы ищете:

iframe { 
    background-color: transparent; 
} 

Это, конечно, при условии, что вы хотите предысторию iframe быть прозрачным.

1
  1. Там нет атрибута HTML с именем transparency, так что вы будете всегда получите ошибку с iframe transparency=true

  2. если вы установите непрозрачность до нуля, то вы не увидите элемент на всех - вам нужно определить степень непрозрачности:

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

выше CSS (примечание: значения непрозрачности 0-100 для IE, 0-1 для других браузеров) позволит другим элементам (например, фоновое изображение страницы) для отображения, даже если элемент с настройкой непрозрачности имеет цветной фон.

Для получения дополнительной информации о прозрачности см. Раздел RGBA (A = alpha), но обратите внимание на поддержку переменных браузеров.

+0

в IE, мой IFrame идет прозрачным, но дело в том, я не могу в состоянии видеть мое содержание внутри фрейма также .. – Bharanikumar

+0

Можете ли вы поднять образец страницы? Если содержимое iframe полностью невидимо, я бы предположил (не видя), что: он не получает контент iframe, содержимое наследует другой параметр CSS или (очевидно, но стоит проверить), что это свойство цвета такое же, как и фоновый цвет. Установите цвет в красный цвет и удалите правило непрозрачности - оно все еще не отображается? –

1

Во-первых, нет такой вещи, как «transparent =» 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 определение цвета работает точно так же, как атрибут непрозрачности (0 = ясном, 1 = твердый), за исключением того, что только делает конкретный элемент вы установите его на прозрачной и не влияет на элементы внутри этого элемента (то есть он не влияет на текст внутри вашего iframe). Первые три цифры - это красные, зеленые и синие значения вашего цвета по шкале от 0 до 255.

Если вы хотите улучшить кросс-браузерное решение, я бы порекомендовал просто использовать прозрачный .png файл как фоновое изображение.Вам нужно будет проверить это на IE, не уверен, что он будет работать для iframe специально, но вы не можете установить фон в iframe, а затем установить прозрачное изображение в качестве фона страницы, загружаемой внутри iframe (применить ее к элементу body для этой страницы).

Надеюсь, это поможет!

+0

Это изменение, согласно вам выше образца, <тело BGCOLOR = "# 000000"> , но до сих пор нет обновления, в IE мой ifram белый, но сайт черный BG – Bharanikumar

+0

Можете ли вы поделиться ссылкой на страницу, над которой работаете, поэтому я могу взглянуть на весь код? – Andrew

3

Там есть способ, которым Вы можете сделать это с помощью JQuery, если вы включили файл JQuery -

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

Изменение .classname к тому, что из вашего фрейма или сделать один, если есть не один. (Извлеките атрибут из iframe) Поместите это прямо после тега закрытия iframe и добавьте в требуемый тег allowTransparency для браузеров до IE9. Поскольку он находится в условном выражении IE, он не считывается валидатором W3C. Это также исключает кросс-браузерную совместимость и проблемы со скрытием содержимого с добавлением всех CSS, о которых уже говорили люди, если вы все равно используете последнюю версию jQuery. Атрибут allowTransparency был создан с четко определенной целью, поэтому нет смысла пытаться воссоздать его с помощью CSS, когда вы можете просто его вставить. Надеюсь, это поможет кому-то!

(Этот метод предполагает, что у вас уже есть iframe {background-color:transparent}, который не работает на старых версиях IE)

+0

+1 для фактического использования альтернативного способа, который был запрошен. Однако я не пробовал. –

+4

Здесь нет необходимости включать jQuery. Этого достаточно: document.getElementById ("yourframeid"). AllowTransparency = true; – tomg

+0

Для самостоятельной цитаты «** если ** вы ее установили». Я не утверждал, что вам нужно было установить его только для этого. Если вы этого не сделали, я согласен, что ваш путь будет лучше. –