Как сделать эффект виньетирования в HTML? - PullRequest
7 голосов
/ 07 марта 2012

Я ищу хорошее решение о том, как сделать эффект виньетки для веб-сайта.Углы должны быть темнее, чем цвет фона страницы, как радиальный градиент.

До сих пор я пробовал разные подходы:

  • 4 DIVs установлены в положение: абсолютное, верхнее / нижнее: 0px, влево / вправо: 0px с одним изображением в каждом из них (ссылки на блоки изображений. Плохая идея в целом?)
  • То же, что и выше, но с фиксированной высотой / шириной для div и фоновым изображением вместоизображение (все еще блокирует ссылки?!)
  • CSS3 несколько фонов.Два в теле для верхнего левого / правого и дополнительный div внизу с высотой: 300; margin-top: -300px всегда должен отображаться снизу (плохая поддержка браузера)
  • CSS3 радиальный градиент на теле(как только вы прокручиваете, вы теряете фон. Дополнительный div может исправить это. Также плохая поддержка браузера снова)

О поддержке браузера: решение должно работать в новейшей версии.версия Firefox, Chrome, IE и, если возможно, опера и сафари (упорядочены по важности).Это абсолютный минимум.Но это действительно должно работать и в старых браузерах.Firefox 3.6 и IE 8 или даже 7, если это возможно.Я не очень разбираюсь в истории версий Chrome, но кажется, что пользователи Chrome почти все в курсе, так что нет большой проблемы отказаться от поддержки Chrome 15 и ниже ?!Существуют ли какие-либо существенные изменения, которые могли бы заставить что-то работать в Chrome 17, но не, например, в 15?

Радиальный градиент CSS3, на мой взгляд, является лучшим решением, но я боюсь, что многие пользователине будет поддерживать его из-за старых браузеров.А с решением 4 DIV у меня есть проблемы со ссылками, по которым невозможно щелкнуть, потому что изображение блокирует их.Я попытался возиться с z-index, но это не работает.Я дал z-index DIVs: 1 и #container (где размещен весь контент) z-index 10. Разве это не должно работать?Влияет ли z-index на ссылки?

Так что, как вы думаете, было бы хорошим решением?Мне явно нужна помощь здесь.Спасибо!

Ответы [ 4 ]

10 голосов
/ 08 марта 2012

Вы можете использовать внутреннюю рамку-тень

 box-shadow: inset 0 0 100px #000;

demo: http://jsfiddle.net/ACPUP/

Но это не работает в IE7 / 8.В старых версиях Firefox, Chrome, Safari или Opera может понадобиться префикс: -webkit-box-shadow, -moz-box-shadow или -o-box-shadow.

Вы также можете сложить эти тени дляболее драматический эффект, но я не знаю, поддерживают ли старые версии браузеров это.

box-shadow: inset 0 0 120px #000, inset 0 0 80px #000, inset 0 0 40px #000;
1 голос
/ 06 ноября 2013

Использование CSS!

Небольшой разброс в ответе Виллема, как рекомендовал Джон К, который дал чаевые Крис Койер :

box-shadow: inset 0 0 85px rgba(0, 0, 0, 0.4);

JSFiddle: http://jsfiddle.net/charlesgoodwin/wKQ2y/

Работает очень хорошо!

1 голос
/ 07 марта 2012

в зависимости от того, что вы хотите, что-то подобное может работать;

<style>

height: 100%;
width: 100%;
/* IE9 SVG, needs conditional override of 'filter' to 'none' */

background:  url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iNzUlIj4KICAgIDxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgPHN0b3Agb2Zmc2V0PSI2MyUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgPHN0b3Agb2Zmc2V0PSI5OSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC42NSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuNjUiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyZWN0IHg9Ii01MCIgeT0iLTUwIiB3aWR0aD0iMTAxIiBoZWlnaHQ9IjEwMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);

background: -moz-radial-gradient(center, ellipse cover,  rgba(0,0,0,0) 0%, rgba(0,0,0,0) 63%, rgba(0,0,0,0.65) 99%, rgba(0,0,0,0.65) 100%); /* FF3.6+ */

background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(0,0,0,0)), color-stop(63%,rgba(0,0,0,0)), color-stop(99%,rgba(0,0,0,0.65)), color-stop(100%,rgba(0,0,0,0.65))); /* Chrome,Safari4+ */

background: -webkit-radial-gradient(center, ellipse cover,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 63%,rgba(0,0,0,0.65) 99%,rgba(0,0,0,0.65) 100%); /* Chrome10+,Safari5.1+ */

background: -o-radial-gradient(center, ellipse cover,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 63%,rgba(0,0,0,0.65) 99%,rgba(0,0,0,0.65) 100%); /* Opera 12+ */

background: -ms-radial-gradient(center, ellipse cover,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 63%,rgba(0,0,0,0.65) 99%,rgba(0,0,0,0.65) 100%); /* IE10+ */

background: radial-gradient(center, ellipse cover,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 63%,rgba(0,0,0,0.65) 99%,rgba(0,0,0,0.65) 100%); /* W3C */

filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#a6000000',GradientType=1 ); /* IE6-8 fallback on horizontal gradient */


}
</style>

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

Посмотри на это в действии. http://jsfiddle.net/joshuamartin/taN2Z/4/

http://www.colorzilla.com/gradient-editor/

1 голос
/ 07 марта 2012

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

...