
Здравствуйте, уважаемые Хабро-CSS3-люди!
Хочу поделиться маленьким опытом создания выезжающей панельки на CSS3 с iframe внутри и тем, как побороть неприятные сюрпризы от IE. Это решение мне кажется хорошо подойдет для добавления на сайт формы обратной связи, чата с консультантом и т.п.
На всякий случай напомню, что у iframe есть свои минусы, и при создании сайта с iframe необходимо их учитывать. Есть и плюсы, однако топик не об этом.
Роль выезжающей панели будет играть div. Внутри него: еще один div — кнопка-заголовок и собственно iframe.
<div id="feedbackP"> <div id="feedbackButton"> Feedback </div> <iframe id="feedBackIframe" src="feedback.php" scrolling="no" frameborder = "yes"> </iframe> </div>
Теперь стили с комментариями:
#feedbackP{ width : 400px; height : 272px; position : fixed; /* фиксируем позицию в окне */ z-index : 50; /* сдвигаем панель вправо вниз: */ top : 100%; left : 100%; /* выдвигаем краешек: */ margin-top : -25px; margin-left : -130px; border : 2px solid; border-radius: 10px; padding: 5px; /*задаем эффект движения: */ -moz-transition:margin 0.3s linear; -o-transition:margin 0.3s linear; -webkit-transition:margin 0.3s linear; -ms-transition:margin 0.3s linear; transition:margin 0.3s linear; } #feedbackP:hover{ /* выдвигаем панель на всеобщее обозрение: */ margin-top : -272px; margin-left : -400px; /*задаем эффект движения: */ -moz-transition:margin 0.3s linear; -o-transition:margin 0.3s linear; -webkit-transition:margin 0.3s linear; -ms-transition:margin 0.3s linear; transition:margin 0.3s linear; } /*Делаем заголовок панели, как уголок папки с бумагами: */ #feedbackButton{ font-weight : bold; margin-left : 10px; margin-top : -6px; border : 1px solid #717277; border-radius : 0px 0px 10px 10px; text-align : center; width : 100px; margin-bottom : 5px; color : #FFFFFF; background : #717277; } #feedBackIframe{ width : 390px; height : 240px; border : 1px solid; }
Вот, что у меня получилось, когда панель выдвинута:

Казалось бы и все, но всеми любимая
Во первых,
не работает в IE6. Для IE7 нужно указать DOCTYPE.position : fixed;
С border-radius и transition можно смириться.
UPD: (а с радиусом можно и не мириться: пруф by kafeman)
Ну а для тех, кто не хочет мириться с тем, что такая панель не будет работать в IE 6 — есть несколько приемов.
Я же
Но и на этом сюрпризы IE не закончились. Как только мышка из div'a попадает в iframe внутри него, сам div перестает быть hover. Это приводит к тому, что появляющаяся панель сразу исчезает.
На помощь приходит небольшой скрипт на JS + JQuery, который надо включить, если браузер — IE:
<!--[if IE]> <script type="text/javascript"> $('#feedbackP').live('mouseenter',function() { $('#feedbackP').css('margin-top', '-272px'); $('#feedbackP').css('margin-left', '-400px'); }); $('#feedbackP').live('mouseleave',function() { $('#feedbackP').css('margin-top', '-25px'); $('#feedbackP').css('margin-left', '-130px'); }); </script> <![endif]-->
Кроссбраузерность:
- FF — да
- Chrome — да
- Safari — да
- Opera — панель всплывает не плавно, а рывком
- IE — панель всплывает не плавно, а рывком
Напоследок привожу пример в действии: клац. (по ссылке — панель справа внизу)
Вот и все, спасибо за внимание!
