Chrome переполняет фон iframe за пределами div? - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть iframe внутри тега div с Overflow: Hidden и радиусом границы 50px, что делает его кругом.Источником iframe является страница .aspx с кнопкой.Когда кнопка нажата, она вызывает пост обратно.На посте назад он меняет цвет фона с ничего на что-то.

iframeBody.Attributes.Add("Style", "background-color:#FF9090");

Он отлично работает в Firefox и Internet Explorer (отлично в IE!образуя квадрат.(Все остальное содержимое отображается отлично, просто фон просачивается.) Любая помощь будет оценена.Спасибо.

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

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

iframe {
    border: 0;
}

Содержимое iframe явно переполняет содержащий div, когда у div есть position: absolute (или relative, в этом отношении).Я не совсем уверен, почему это так, но вы всегда можете обойти это, поместив этот div в контейнер, который содержит только div и iframe, и переместите позиционирование в этот элемент:

<div id="outer">
    <div>
        <iframe></iframe>
    </div>
</div>

#outer {
    position: absolute;
    width: 100px;
    height: 100px;
}

#outer > div {
    border-radius: 50px;
    height: 100px;
    width: 100px;
    overflow: hidden;
    border: 5px solid #D3D3D3;
}

iframe {
    border: 0;
    background-color: pink;
    height: 100%;
    overflow: hidden;
    width: 100%;
}

Позаботившись об этом, вы заметите, что iframe перекрывает часть границы.Это то же самое поведение, которое вы видели бы в chrome, если бы вы просто удалили position: absolute.

Теперь, когда у вас есть обертка, это небольшое исправление, чтобы также переместить границу к этомуобертка, которая также позаботится об этой проблеме и даст вам красивую границу круга, которая будет выглядеть одинаково во всех современных браузерах.

Обратите внимание, что вы хотите оставить свойство border-radius включенным оба делятся, но переместите свойство border в #outer.Теперь, поскольку оболочка имеет границу, а ее дочерний элемент - нет, оболочка будет немного больше, поэтому для гладкого круга ей также потребуется немного больший радиус границы:

#outer {
    position: absolute;
    width: 100px;
    height: 100px;
    border: 5px solid #D3D3D3;
    border-radius: 55px;
}

#outer > div {
    border-radius: 50px;
    height: 100px;
    width: 100px;
    overflow: hidden;
}

iframe {
    border: 0;
    background-color: pink;
    height: 100%;
    overflow: hidden;
    width: 100%;
}

Рабочая демоверсия

0 голосов
/ 04 января 2013

Есть другой подход.Вы можете использовать webkit-mask-image и сделать прозрачное изображение PNG для использования в качестве маски (конечно, также работает с градиентами или более сложными формами).В настоящее время работает только в веб-браузерах (Safari / Chrome и т. Д.), Но это составляет чуть менее 50% людей.Может быть вариант в зависимости от аудитории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...