Непрозорість CSS не працює в IE8


143

Я використовую CSS для позначення тексту тригера для розсувного розділу jQuery: тобто, коли навести курсор на текст тригера, курсор змінюється на покажчик, і непрозорість тексту тригера зменшується, щоб вказати, що текст має дію натискання .

Це добре працює у Firefox та Chrome, але в IE8 непрозорість не змінюється.

Я спробував безліч успіхів у налаштуваннях CSS.

Наприклад

HTML:

<h3 class="slidedownTrigger">This is the trigger text</h3>

CSS:

.slidedownTrigger
{
    cursor: pointer;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: alpha(opacity=75);
    -khtml-opacity: 0.75;
    -moz-opacity: 0.75;
    opacity: 0.75;
}

Що зупиняє IE, змінюючи непрозорість? Примітка. Я спробував це на різних елементах, змінюючи порядок висловлювань CSS та просто використовуючи IE-елементи самостійно. Я також спробував використовувати

-ms-filter: "alpha(opacity=75)";

але без успіху.

У мене не вистачає речей, щоб спробувати змінити непрозорість, працюючи в IE8.

Будь-які ідеї?


На це пов’язане / повторне запитання є ваша відповідь, я думаю. stackoverflow.com/questions/859000/opacity-in-web-pages
Джефф Мартін

Я бачив це питання - біда - це відповідь: <br> <br> & nbsp; & nbsp; фільтр: альфа (непрозорість = 50); / * Інтернет-провідник / <br> & nbsp; & nbsp; непрозорість: 0,5; / fx, safari, opera, chrome * / <br> & nbsp; & nbsp; -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (непрозорість = 50)"; / * IE8 * / <br> <br> не працює для мене (я просто спробував це ще раз, щоб перевірити повторно). Я застосував його до h3, який був чорним і жирним. У Firefox та Chrome налаштування непрозорості заголовки стають сірими, як і слід було очікувати, але в IE8 воно залишається чорним.

oops - не зрозумів, що ти не можеш використовувати HTML в коментарях - але я думаю, що ти можеш побачити, що я намагаюся сказати

якщо ви спробуєте ці стилі лише на однотонному кольоровому кольорі, чи працюють вони? можливо, відбувається якийсь інший CSS, що відбувається, що суперечить.
Джефф Мартін

Хороший. Так - коли я роблю простий дів, надаю йому висоту та ширину та колір тла червоний, з тими налаштуваннями непрозорості, він працює в IE8. Виходить напівпрозорим. Я намагаюся зрозуміти, в чому проблема. Я не змінюю непрозорість будь-чого іншого в таблиці стилів, тому не можу думати, що могло б суперечити йому лише для IE.

Відповіді:


65

Не маю уявлення, чи це все ще стосується 8, але історично IE не застосовує декілька стилів до елементів, які не мають "компонування".

див .: http://www.satzansatz.de/cssd/onhavinglayout.html


9
IE не застосовує кілька стилів до елементів, які не мають "верстки".
Azeem.Butt

4
Чудово! Дякую. У цьому і була проблема. Елементи, для яких я намагався регулювати непрозорість (наприклад, h3), не мали "компонування". Як тільки я дав їм трохи, непрозорість спрацювала. Все, що я зробив, було додати ширину: 100%; до h3. Дякую, що вказали на мене в правильному напрямку. Однак видається шаленим (якщо не баггі), що Internet Explorer робить це.

51
IE не застосовує багато стилів до безлічі елементів.
danwellman

1
@danwellman, і тоді він також робить багато інших "забавних" речей. Так.
dudewad

Цікавим є те, що IE7 не потребує ‟макета». Я використовую чуйне фонове зображення на елементі з нульовою висотою, і padding-bottom: 100%в IE8 непрозорість не набрала чинності, поки я не встановив явну висоту. IE7 цього не потребує.
Kout

158

Налаштування цих (точно так, як я написав) служило мені тоді, коли мені це було потрібно:

-moz-opacity: 0.70;
opacity:.70;
filter: alpha(opacity=70);

6
Дякую, я вважаю, що "filter: alpha (непрозорість = 70);" є для IE <8. Однак він не працює (для мене) в IE8 (я щойно перевірив). -моз-непрозорість зараз, напевно, я вважаю непрозорим, і непрозорість - це стандартний спосіб вчинків - тому, природно, Microsoft не використовувала такий спосіб робити (занадто легко).

15
Просто встановлення "непрозорості" та "фільтра", як ви описуєте, було достатньо, щоб воно працювало для мене як у FF4, так і в IE8. -моз-непрозорість не потрібна.
demoncodemonkey

1
@Gabriel McAdams: фільтр: альфа (непрозорість = 70); працював (але тільки в IE 8)
Poonam Bhatt

@Gabriel Це працювало частування! У IE 7/8 у мене більше не буде проблем із непрозорістю!
MJCoder

1
Більш конкретна інформація: насправді це метод fadeIn метод, що знімає прозорість.
tmorell

49

Вам потрібно встановити Opacity спочатку для браузерів, що відповідають стандартам, а потім різних версій IE. Див. Приклад:

але цей код непрозорості не працює у ie8

.slidedownTrigger
{
    cursor: pointer;
    opacity: .75; /* Standards Compliant Browsers */
    filter: alpha(opacity=75); /* IE 7 and Earlier */
    /* Next 2 lines IE8 */
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
}

Зауважте, що я усунув -moz, оскільки Firefox - це браузер, який відповідає стандартам, і ця лінія більше не потрібна. Крім того, -khtml знецінюється, тому я також усунув цей стиль.

Крім того, фільтри IE не перевірятимуть стандарти w3c, тому, якщо ви хочете, щоб ваша сторінка була перевірена, відокремте таблицю стилів стандартів від таблиці стилів IE, використовуючи оператор if IE, як показано нижче:

<!--[if IE]>
<link rel="stylesheet" type="text/css"  href="http://www.mysite.com/css/ie.css" />
<![endif]-->

Якщо ви відокремите тобто примхи, ваш веб-сайт буде перевірений.


3
Просто встановлення "непрозорості" та "фільтра", як ви описуєте, було достатньо, щоб воно працювало для мене як у FF4, так і в IE8. Розділ з написом "/ * Наступні два рядки IE8 * /" не був потрібним.
demoncodemonkey

3
@demoncodemonkey: правильно. Все залежить від того, яку версію ви встановили. Якщо ви хочете максимальної сумісності, я пропоную їх усі.
Кевін Флорида,

Правильно, але так: "Щоб гарантувати, що користувачі Internet Explorer 7 і 8 мають фільтр, ви можете включити обидва перераховані вище синтаксиси. У зв'язку з особливістю нашого аналізатора, вам потрібно включити оновлений синтаксис спочатку перед старішим синтаксисом для того, щоб фільтр працював належним чином у «Перегляді сумісності» (Це відома помилка, і вона буде виправлена ​​після остаточного випуску IE8). Ось приклад таблиці стилів CSS: "(джерело: посилання )
zrathen

@Kevin "Якщо ви хочете максимальної сумісності, я пропоную їх усі". Ну, тоді ви не повинні були знімати -моз-непрозорість, правда?
Моторошний

Котирування не потрібні для -ms-filter.
thoan

17

Мабуть, прозорість альфа працює лише на елементах рівня блоку в IE 8. Встановити дисплей: блок.


17

Використання display: inline-block;робіт на IE8 для вирішення цієї проблеми.

FWIW, opacity: 0.75працює у всіх браузерах, що відповідають стандартам.


5

CSS

Раніше я використовував таке з CSS-трюків :

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

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

  /* Netscape */
  -moz-opacity: 0.5;

  /* Safari 1.x */
  -khtml-opacity: 0.5;

  /* Good browsers */
  opacity: 0.5;
}

Компас

Однак, кращим рішенням є використання суміші Opacity Compass , все, що вам потрібно зробити - @include opacity(0.1);це допоможе вам вирішити будь-які проблеми, пов’язані з переглядачем. Ви можете знайти приклад тут .



2

Жодна з вищезгаданих відповідей не працювала для мене, тому я просто дав своєму тегу DIV прозоре фонове зображення, яке ідеально підходило для всіх браузерів.


1

Цей код працює

filter: alpha(opacity = 50); zoom:1;

Вам потрібно додати властивість масштабування, щоб воно працювало :)


1

Ви також можете додати поліфільм, щоб увімкнути використання непрозорості в IE6-8.

https://github.com/bladeSk/internet-explorer-opacity-polyfill

Це окремий поліфіл, який не потребує jQuery або інших бібліотек. Існує кілька невеликих застережень, що він не працює на строкових стилях, і для будь-яких таблиць стилів, які потребують непрозорість polyfil'd, вони повинні дотримуватися тієї ж політики безпеки.

Використання мертвого просто

<!--[if lte IE 8]>
    <script src="jquery.ie-opacity-polyfill.js"></script>
<![endif]-->

<style>
    a.transparentLink { opacity: 0.5; }
</style>

<a class="transparentLink" href="#"> foo </a>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.