Всем привет. На днях один мой товарищ попросил меня повесить баннер ко мне на портал news.newnn.ru.
Вот кстати сам баннер который предлагалось вывешивать:
адаптивный jpg баннер, размер 864×112
Основным условием было корректное отображение баннера на всех устройствах: Windows, Mac Os X (включая retina), Android, IOS (включая retina), картинку адаптировать очень легко, просто указываем в теге <img style=»max-width: 864px;width: 100%;»> и все, картинка будет пропорционально растягиваться и уменьшаться в зависимости от ширины браузера. Retina дисплеи тоже не проблема поддерживать, просто рисуем картинку размером в 2 раза больше чем max-width, то есть 1728×224, в тегах все оставляем как есть.
Все бы ничего, но только как то скучно показывать обычную статичную jpg картинку. Если вы не в курсе, то flash на Iphone и iPad никогда не работал и вряд ли будет работать, такова политика Apple и лично я с ней согласен.
Тогда ко мне пришла идея, а почему бы текст в баннере не сделать в виде обычного HTML, фон сделать в виде svg картинки, а элементы на баннере анимировать с помощью css3 ? Сказано сделано, я попросил друга прислать баннер в .ai (Adobe Illustrator) формате, удаляю оттуда все текстовые элементы, оставляя только фон и сохраняю в файл в формате svg. Кто не в курсе, svg формат в background поддерживается всеми браузерами включая ie9 и выше, подробнее про svg в html можно почитать здесь.
Открываем наш svg файл в блокноте, скопируем строчки от <svg… до </svg>, и получим такой css код фона:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
.main_wrap { outline: none; text-decoration: none; display: block; overflow: hidden; margin: 0 auto; width: 100%; height: 112px; max-width: 900px; background-size: cover; background-repeat: no-repeat; background-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="_x31_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="856.8px" height="115.2px" viewBox="0 0 856.8 115.2" enable-background="new 0 0 856.8 115.2" xml:space="preserve"><rect x="-5.085" y="-2.187" fill-rule="evenodd" clip-rule="evenodd" width="863.821" height="116.955"/><path fill-rule="evenodd" clip-rule="evenodd" d="M-5.369,114.769V-2.187h864.104v116.955H-5.369L-5.369,114.769z M858.452-1.995H-4.802v116.48h863.254V-1.995z"/><polygon fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" points="231.601,114.769 426.865,-2.187 712.76,-2.187 447.748,114.769 "/><g><path fill-rule="evenodd" clip-rule="evenodd" d="M302.11,70.306l0.018,10.687h8.064l-0.072-16.2l9.072,1.44c2.736,0.359,4.176-2.376,4.176-6.48v-2.179L302.11,70.306L302.11,70.306z M342.231,46.274v13.55c0,6.912-4.824,6.479-4.896,0V49.207L342.231,46.274L342.231,46.274z M329.127,54.123v5.702c0,4.104,1.44,6.264,4.176,6.479h12.96c2.736-0.216,4.176-2.376,4.176-6.479V43.552c0-0.667-0.001-1.403-0.011-2.188L329.127,54.123L329.127,54.123z M356.2,59.824c0,4.104,1.44,6.264,4.176,6.479h17.136V43.408c0-4.104-1.44-6.264-4.176-6.48h-12.96c-2.736,0.216-4.176,2.376-4.176,6.48h8.208c0-2.88-0.288-4.68,2.808-4.68c1.8,0,2.16,1.8,2.16,4.68v5.256h-9c-2.736,0.216-4.176,2.376-4.176,6.48V59.824L356.2,59.824z M364.408,55.144c0-2.88,1.44-4.68,4.536-4.68h0.36v14.04h-1.224c-1.8-0.216-3.672-1.8-3.672-4.68V55.144L364.408,55.144z M383.271,66.304h8.136V51.256h0.936l6.552,15.048h8.784l-10.152-17.928l-0.504-0.576l0.504-0.576l9-10.008h-2.808l-11.016,12.24h-1.296v-12.24h-8.136V66.304z"/></g><path fill-rule="evenodd" clip-rule="evenodd" d="M337.95,80.669c0,2.058,0.72,3.138,2.088,3.246h6.48c1.368-0.108,2.088-1.188,2.088-3.24h-3.024c0,1.44-0.36,2.34-1.908,2.34h-0.792c-1.548,0-1.908-0.899-1.908-2.34v-8.136c0-1.44,0.36-2.34,1.908-2.34h0.792c1.548,0,1.908,0.899,1.908,2.34h3.024c0-2.052-0.72-3.132-2.088-3.24h-6.48c-1.368,0.108-2.088,1.188-2.088,3.24V80.669L337.95,80.669z M355.95,69.449h-3.024v14.466h3.024V69.449L355.95,69.449z M352.206,63.791c0,1.26,1.008,2.268,2.268,2.268c1.26,0,2.268-1.008,2.268-2.268s-1.008-2.269-2.268-2.269C353.214,61.522,352.206,62.531,352.206,63.791L352.206,63.791z M363.294,71.207l2.7-0.612c1.512-0.359,1.908,0.54,1.908,1.98v11.34h3.024v-11.34c0-2.053-0.72-3.456-2.088-3.204l-5.544,0.972v-0.899h-3.024v14.472h3.024V71.207L363.294,71.207z M382.878,73.727c0,1.44-0.36,2.34-1.908,2.34h-2.7v-3.6c0-1.439,0.36-2.34,1.908-2.34h0.792c1.548,0,1.908,0.9,1.908,2.34V73.727L382.878,73.727z M377.334,69.227c-1.368,0.108-2.088,1.188-2.088,3.24v8.208c0,2.052,0.72,3.132,2.088,3.24h6.48c1.368-0.108,2.088-1.188,2.088-3.24h-3.024c0,1.44-0.36,2.34-1.908,2.34h-0.792c-1.548,0-1.908-0.899-1.944-2.34v-3.708h5.58c1.368-0.107,2.088-1.188,2.088-3.24v-1.26c0-2.052-0.72-3.132-2.088-3.24H377.334L377.334,69.227z M402.138,70.595c1.512-0.359,1.908,0.54,1.908,1.98v11.34h3.024v-11.34c0-2.053-0.756-3.456-2.088-3.204l-5.256,1.188c-0.36-0.611-0.936-1.296-1.656-1.188l-4.824,0.972v-0.899h-3.024v14.472h3.024V71.243l1.98-0.612c1.512-0.36,1.908,0.54,1.908,1.98v11.304h3.024v-11.34c0-0.504-0.036-0.937-0.144-1.332L402.138,70.595L402.138,70.595z M411.39,80.675c0,2.052,0.72,3.132,2.088,3.24h8.568V72.467c0-2.052-0.72-3.132-2.088-3.24h-6.48c-1.368,0.108-2.088,1.188-2.088,3.24h3.024c0-1.439,0.36-2.34,1.908-2.34h0.792c1.548,0,1.872,0.9,1.908,2.34l0.036,2.628h-5.58c-1.368,0.108-2.088,1.188-2.088,3.24V80.675L411.39,80.675z M414.414,78.335c0-1.44,0.36-2.34,1.908-2.34h2.7v4.68c0,1.44-0.36,2.34-1.908,2.34h-0.792c-1.548,0-1.908-0.899-1.908-2.34V78.335z"/><g><path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M261.034,51.654l-1.8,0.864c-3.096,0-3.816-1.08-3.816-3.96v-11.16h-7.488v11.16c0,4.104,1.44,6.192,4.176,6.408l8.928-1.584v12.96h8.208V37.47h-8.208V51.654L261.034,51.654z M288.106,45.966c0,2.88-0.72,4.68-3.816,4.68h-1.08v-7.2c0-2.88-0.144-4.536,2.376-4.536c2.448,0,2.52,1.656,2.52,4.536V45.966L288.106,45.966z M279.178,36.966c-2.736,0.216-4.176,2.376-4.176,6.48v16.417c0,4.104,1.44,6.264,4.176,6.479h12.96c2.736-0.216,4.176-2.376,4.176-6.479h-8.208c0,2.88-0.072,4.464-2.376,4.68c-2.592,0.216-2.52-1.8-2.592-4.68v-7.417h9c2.736-0.216,4.176-2.376,4.176-6.48v-2.52c0-4.104-1.44-6.264-4.176-6.48H279.178L279.178,36.966z M310.282,40.278c4.176-1.152,4.896,0.36,4.896,3.24V59.79c0,2.88-0.72,4.392-4.896,3.24V40.278L310.282,40.278z M323.386,59.572V43.518c0-4.104-1.44-6.84-4.176-6.48l-8.928,1.44v-1.224h-8.208l0.058,35.05L323.386,59.572L323.386,59.572z M310.15,67.501l-0.012-2.671l3.534,0.561L310.15,67.501L310.15,67.501z M337.354,51.207V43.59c0-6.48,4.896-6.912,4.896,0v4.684L337.354,51.207L337.354,51.207z M350.458,43.358c-0.003-6.555-0.171-19.352-8.424-19.352h-8.64c-2.736,0-4.176,2.376-4.176,6.48h8.208c0-6.624,5.112-7.704,4.464,6.624h-8.568c-2.736,0.216-4.176,2.376-4.176,6.48v12.533L350.458,43.358L350.458,43.358z M361.129,36.966h-0.735c-1.663,0.131-2.848,0.981-3.521,2.549L361.129,36.966L361.129,36.966z M356.506,62.662c0.059,0.249,0.127,0.485,0.205,0.71L356.506,62.662z"/></g><text transform="matrix(1 0 0 1 467.459 50.832)"><tspan x="0" y="0" font-family="OpenSans" font-size="22">4</tspan><tspan x="11.286" y="0" font-family="OpenSans" font-size="22">13 | 62 | 94</tspan></text><g><path fill-rule="evenodd" clip-rule="evenodd" fill="#FA0000" d="M419.095,34.103c-0.198,0.986-0.417,1.805-0.443,2.846c-0.031,1.239,0.194,2,0.267,3.067c1.888,7.653,11.052,14.118,17.398,18.213c1.128,0.729,2.576,1.669,3.683,2.205c0.672,0.325,1.331,0.653,1.844,1.112c2.177,1.951,0.671,2.087,5.185-1.223c6.832-5.009,11.931-7.995,14.727-16.671c0.788-2.447,1.052-5.621,0.206-8.216c-0.21-0.646-0.85-1.685-0.917-2.244c-0.535-1.096-1.859-2.283-2.76-3.025c-0.646-0.534-3.108-2.054-3.94-1.884c-0.339,0.173-0.643-0.037-1.044-0.084c-0.958-0.113-2.574-0.042-3.501,0.136c-6.187,1.184-8.096,6.084-8.562,6.577c-0.07-0.091-0.152,0.172-0.062-0.195c-0.42-0.296-0.602-1.397-0.934-2.282c-0.528-1.413-2.464-5.225-3.603-5.165c0.221,0.447,0.369,0.304,0.872,1.013c1.921,2.704,2.958,6.466,3.218,9.825c-0.004,0.23,0.908,0.945,1.305,0.979c0.185-6.604,8.451-11.412,14.231-9.231c0.393,0.148,0.824,0.344,1.191,0.535c0.913,0.476,0.823,0.456,0.848,0.871c0.134,0.235,1.346,0.827,2.05,2.934c0.674,2.013,0.339,3.453,0.537,4.688c0.006,1.089,0.173,0.438-0.203,2.155c-0.381,1.74-1.266,4.12-2.164,5.684c-2.918,5.083-5.719,7.293-10.385,10.546c-1.022,0.713-2.031,1.438-3.04,2.143l-2.262,1.701c-0.453,0.371-0.547,0.577-0.84,0.291c-1.907-1.96-15.252-7.71-20.521-16.68c-2.872-4.889-2.759-9.711,0.519-14.007c1.161-1.522,3.014-3.259,5.162-4.188c2.203-0.952,5.401-1.496,7.703-0.297c-0.063-0.451,0.126-0.232-0.438-0.483c-0.146-0.065-0.286-0.123-0.418-0.199c-1.964-0.549-3.107-0.935-5.48-0.396c-1.516,0.344-3.097,1.17-4.154,1.947C422.164,28.72,420.164,30.811,419.095,34.103z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#1C0102" d="M418.918,40.016l-0.04,0.29c0.017,0.541,0.53,1.738,0.746,2.202c0.341,0.731,0.671,1.308,1.053,1.997c0.839,1.514,2.72,3.729,3.918,5.024l3.125,2.869c0.568,0.438,1.07,0.912,1.668,1.379c3.042,2.375,8.217,5.929,11.814,7.696c1.049,0.516,1.822,2.013,2.572,2.001l8.275-6.053c1.679-1.273,2.429-1.92,3.892-3.322c0.092-0.087,0.127-0.114,0.214-0.193l1.008-1.025c0.295-0.292,0.484-0.556,0.758-0.867c0.484-0.55,0.902-1.21,1.319-1.831c0.438-0.654,0.848-1.346,1.199-2.053c1.62-3.259,2.709-6.294,2.321-10.249c-0.072-0.747-0.349-1.947-0.593-2.557c-0.233-0.586-0.686-1.653-1.126-2.132c0.067,0.559,0.707,1.598,0.917,2.244c0.846,2.595,0.582,5.769-0.206,8.216c-2.796,8.676-7.895,11.662-14.727,16.671c-4.514,3.31-3.008,3.174-5.185,1.223c-0.513-0.459-1.172-0.787-1.844-1.112c-1.106-0.536-2.555-1.477-3.683-2.205C429.97,54.133,420.806,47.669,418.918,40.016z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#31000A" d="M441.995,61.402l0.02-0.165c-0.856-0.972-4.939-3.059-6.41-4.022l-3.53-2.364c-0.485-0.36-0.936-0.658-1.423-1.016c-0.47-0.345-0.858-0.674-1.319-1.018l-3.822-3.291l-1.637-1.818c-0.891-1.104-1.808-2.24-2.454-3.542c-0.615-1.241-0.954-1.913-1.323-3.351c-0.793-3.09,0.059-6.646,1.918-9.164l1.075-1.364c0.354-0.456,0.745-0.829,1.176-1.161l1.321-1.017c2.193-1.457,4.528-2.25,7.326-1.939c2.23,0.248,3.068,1.225,3.427,1.33c0.093-0.29,0.157-0.068-0.138-0.34c-0.16-0.147-0.304-0.233-0.466-0.342c-0.27-0.183-0.623-0.324-0.878-0.589c-2.302-1.199-5.5-0.655-7.703,0.297c-2.148,0.928-4.001,2.666-5.162,4.188c-3.277,4.296-3.391,9.119-0.519,14.007C426.743,53.692,440.088,59.442,441.995,61.402z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#1C0102" d="M440.727,38.107l-0.203,0.004c0.047,0.467,1.096,1.466,1.829,1.482c0.02-0.895,0.253-2.013,0.565-2.789c0.944-2.343,2.646-4.081,4.824-5.336c1.206-0.695,3.292-1.538,5.076-1.631c2.961-0.154,3.92,0.777,5.483,1.423c-0.024-0.415,0.065-0.395-0.848-0.871c-0.367-0.191-0.799-0.387-1.191-0.535c-5.78-2.181-14.047,2.626-14.231,9.231C441.635,39.053,440.723,38.338,440.727,38.107z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#B58F8B" d="M442.015,61.237l-0.02,0.165c0.293,0.286,0.387,0.08,0.84-0.291l2.262-1.701c1.009-0.705,2.018-1.43,3.04-2.143c4.666-3.253,7.467-5.463,10.385-10.546c0.898-1.564,1.783-3.944,2.164-5.684c0.376-1.717,0.209-1.065,0.203-2.155c-0.195,0.217-0.022-0.09-0.111,0.228l-0.119,0.804c-0.564,3.508-2.332,6.907-4.428,9.696c-0.202,0.269-0.32,0.429-0.521,0.698c-0.244,0.327-0.374,0.403-0.611,0.709c-2.201,2.833-9.138,7.177-12.296,9.653C442.466,60.935,442.393,61.028,442.015,61.237z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#E27C96" d="M418.677,34.309c0.127,0.106,0.104-0.178,0.102,0.227c0.016-0.023,0.029-0.091,0.036-0.075c0.124,0.297-0.085-0.165,0.28-0.358c1.069-3.292,3.069-5.383,5.271-7.003c1.058-0.777,2.638-1.604,4.154-1.947c2.373-0.539,3.517-0.153,5.48,0.396c0.465,0.125,0.486,0.295,0.832,0.145c-0.827-0.84-4.008-1.326-5.519-1.068C424.553,25.438,419.792,29.553,418.677,34.309z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#A50227" d="M434.857,26.231c0.255,0.265,0.608,0.406,0.878,0.589c0.162,0.109,0.306,0.195,0.466,0.342c0.295,0.272,0.23,0.05,0.138,0.34c0.606,0.771,0.765,0.574,1.664,2.012c1.389,2.22,1.995,5.058,2.362,7.698c0.049,0.355,0.019,0.623,0.158,0.9l0.203-0.004c-0.26-3.359-1.297-7.121-3.218-9.825c-0.503-0.708-0.651-0.565-0.872-1.013c1.139-0.06,3.074,3.752,3.603,5.165c0.332,0.884,0.514,1.985,0.934,2.282l0.101-0.508l-0.125-0.21c-0.64-1.41-0.676-2.589-2.293-4.828c-0.834-1.154-1.637-2.016-2.803-2.787c-0.322-0.213-0.824-0.624-1.22-0.69c-0.346,0.15-0.367-0.019-0.832-0.145c0.132,0.076,0.271,0.133,0.418,0.199C434.983,25.999,434.794,25.78,434.857,26.231z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#E27C96" d="M441.273,34.208l-0.101,0.508c-0.09,0.367-0.008,0.104,0.062,0.195c0.467-0.493,2.376-5.394,8.562-6.577c0.927-0.177,2.543-0.249,3.501-0.136c0.401,0.047,0.705,0.257,1.044,0.084c-0.237-0.254,0.077-0.011-0.208-0.152c-0.301-0.148-1.54-0.319-1.82-0.328c-2.381-0.065-4.049,0.358-6.102,1.425C444.413,30.164,441.79,32.507,441.273,34.208z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#B2304C" d="M418.677,34.309c-0.333,1.435-0.469,4.447,0.091,5.803c0.057,0.14,0.061,0.121,0.11,0.193l0.04-0.29c-0.073-1.067-0.298-1.828-0.267-3.067c0.026-1.041,0.246-1.859,0.443-2.846c-0.365,0.193-0.157,0.655-0.28,0.358c-0.007-0.016-0.02,0.052-0.036,0.075C418.78,34.131,418.804,34.416,418.677,34.309z"/></g></svg>'); } |
Сам html код баннера будет очень простым:
1 |
<a href="http://cherdakcinema.ru" target="_blank" class="main_wrap"></a> |
На этом этапе у нас уже отображается векторный баннер без текстовых элементов:
Далее сделаем все пространство вокруг баннера черным, а сам баннер выровним по центру браузера,
html код станет таким:
1 |
<div class="main_slide"><a href="http://cherdakcinema.ru" target="_blank" class="main_wrap"></a></div> |
в css добавим:
1 2 3 4 5 6 7 8 9 10 11 12 |
.main_slide { background: #000 no-repeat center center; width: auto; height: 112px; font-size: 1em; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; } |
получим баннер по центру с черным фоном вокруг:
далее делаем html разметку всех текстовых элементов, нужно уметь верстать, получаем такой вот html:
1 2 3 4 5 6 7 8 9 |
<div class="main_slide"> <a href="http://cherdakcinema.ru" target="_blank" class="main_wrap"> <div class="slide slide_1">приватный кинозал</div> <div class="slide slide_2">Большой экран</div> <div class="slide slide_3">Атмосфера романтики</div> <div class="slide slide_4">Идеальное место для влюбленных</div> <div class="slide slide_5">cherdakcinema.ru</div> </a> </div> |
css код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
.main_wrap { /* добавим позиционирование у родителя */ position: relative; } .slide {position: absolute;color: #fff;} .slide_1 { /* указываем в % т.к. нам нужен адаптивный баннер */ top: 30%; left: 6%; } .slide_2 { font-size: 130%; top: 20%; right: 2%; } .slide_3 { top: 46%; right: 5%; } .slide_4 { top: 72%; right: 8%; font-size: 75%; } .slide_5 { top: 4%; left: 54%; font-size: 110%; width: 350px; color: #000; } |
теперь у нашего баннера есть все текстовые элементы расположенные как надо:
А теперь самое интересное, нам нужно сделать анимацию всех текстовых элементов. Саму анимацию будем делать css3 свойствами @keyframes и animation (подробнее про css3 анимацию можно почитать здесь. Для того чтобы нам каждый раз не прописывать префиксы для всех браузеров (-webkit-animation, @-webkit-keyframes и тд) воспользуемся библиотекой prefixfree.js, которая за нас это сделает.
1 |
<script src='http://news.newnn.ru/special/prefixfree.min.js'></script> |
Анимация в css3 дело несложное с точки зрения написания кода, однако сложное с точки зрения логики и сценария, нужно придумать какая надпись в какой последовательности будет. Я решил сделать такой сценарий:
- Надпись cherdakcinema.ru будет висеть всегда, лишь иногда каким-либо образом анимироваться.
- Где-то через 2 сек после загрузки баннера появляется надпись «приватный кинозал»
- Потом еще через несколько секунд по очереди начинают появляться «Идеальное место для влюбленных» «Атмосфера романтики» и «Большой экран»
- Затем все надписи исчезают, надпись большой экран растворяется при этом увеличиваясь.
- В самом конце надпись cherdakcinema.ru слегка увеличивается и по ней пробегается фон (эффект ios 8 слайдера, честно стырил с callbackhunter), далее баннер повторяется по кругу и надпись cherdakcinema.ru уменьшается)
- Так же я решил сделать при наведении на cherdakcinema.ru плавно подсвечивать ее в красный цвет.
Только где-то спустя 2 часа я получил более менее работающий вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
@keyframes 'slide_one' { 0% {opacity: 0;left: -100%;} 10% {opacity: 0;left: 6%;} 20% {opacity: 1;left: 6%;} 70% {opacity: 1;left: 6%;} 80% {opacity: 0;left: 6%;} 100% {opacity: 0;left: -100%;} } @keyframes 'slide_four' { 0% {opacity: 0;right: 7%;} 30% {opacity: 0;} 40% {opacity: 1;} 70% {opacity: 1;right: 7%;} 80% {opacity: 0;right: -100%;} 100% {opacity: 0;right: -100%;} } @keyframes 'slide_three' { 0% {opacity: 0;right: 5%;} 40% {opacity: 0;} 50% {opacity: 1;} 70% {opacity: 1;right: 5%;} 80% {opacity: 0;right: -100%;} 100% {opacity: 0;right: -100%;} } @keyframes 'slide_two' { 0% {opacity: 0;transform: scale(1);} 50% {opacity: 0;transform: scale(1);} 60% {opacity: 1;} 70% {opacity: 1;transform: scale(1);} 80% {opacity: 0;} 85% {opacity: 0;transform: scale(2.5);} 100% {opacity: 0;transform: scale(1);} } @keyframes 'heartbeat' { 0% {transform: scale(1.1);} 25% {transform: scale(1.1);} 30% {transform: scale(1);} 80% {transform: scale(1);} 90% {transform: scale(1.1);} 100% {transform: scale(1.1);} } @keyframes slidetounlock{ 0% {background-position: -210px 0;} 90% {background-position: -210px 0;} 95% {background-position: -15px 0;} 100% {background-position: -210px 0;} } .slide {position: absolute;color: #fff;} .slide_1 { top: 30%; left: 6%; animation-name: 'slide_one'; animation-duration: 20s; animation-iteration-count: infinite; animation-direction: normal; animation-timing-function: ease-in-out; } .slide_2 { font-size: 130%; top: 20%; right: 2%; animation-name: 'slide_two'; animation-duration: 20s; animation-iteration-count: infinite; animation-direction: normal; animation-timing-function: ease-in-out; } .slide_3 { top: 46%; right: 5%; animation-name: 'slide_three'; animation-duration: 20s; animation-iteration-count: infinite; animation-direction: normal; animation-timing-function: ease-in-out; } .slide_4 { top: 72%; right: 8%; font-size: 75%; animation-name: 'slide_four'; animation-duration: 20s; animation-iteration-count: infinite; animation-direction: normal; animation-timing-function: ease-in-out; } .slide_5 { top: 4%; left: 54%; font-size: 110%; width: 350px; color: #000; background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjYwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0ZDRkNGQiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==); background: -moz-linear-gradient(left, #4d4d4d 0%, #4d4d4d 40%, #ffffff 50%, #4d4d4d 60%, #4d4d4d 100%, #4d4d4d 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#4d4d4d), color-stop(40%,#4d4d4d), color-stop(50%,#ffffff), color-stop(60%,#4d4d4d), color-stop(100%,#4d4d4d), color-stop(100%,#4d4d4d)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(left, #4d4d4d 0%,#4d4d4d 40%,#ffffff 50%,#4d4d4d 60%,#4d4d4d 100%,#4d4d4d 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(left, #4d4d4d 0%,#4d4d4d 40%,#ffffff 50%,#4d4d4d 60%,#4d4d4d 100%,#4d4d4d 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(left, #4d4d4d 0%,#4d4d4d 40%,#ffffff 50%,#4d4d4d 60%,#4d4d4d 100%,#4d4d4d 100%); /* IE10+ */ background: linear-gradient(to right, #4d4d4d 0%,#4d4d4d 40%,#ffffff 50%,#4d4d4d 60%,#4d4d4d 100%,#4d4d4d 100%); /* W3C */ -webkit-background-clip: text; text-fill-color: transparent; animation: slidetounlock 20s infinite, heartbeat 20s infinite; animation-direction: normal; animation-iteration-count: infinite; animation-timing-function: linear; letter-spacing: normal!important; background-position: -210px 0; transition: color 0.5s ease, background 0.5s ease; } .main_wrap:hover .slide_5 { background: none; -webkit-background-clip: content-box; -webkit-text-fill-color: initial; color: #EA0000; } |
Для того чтобы баннер стал адаптироваться под любые девайсы, добавим несколько строчек в css, где пропишем в зависимости от максимально возможной ширины браузера разную высоту баннера и размер шрифта надписей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@media (max-width: 800px) { .main_slide { font-size: 0.7em; height: 80px; } .main_wrap { height: 80px; } } @media (max-width: 560px) { .main_slide { font-size: 0.5em; height: 52px; } .main_wrap { height: 52px; } .slide_4 { font-size: 7px; } } |
подробнее про адаптивную верстку в css можно почитать здесь здесь и здесь
Посмотреть на баннер в действии можно здесь. Исходники баннера скачиваем отсюда баннер_чердак_iphone.html.
А теперь как добиться эффекта параллакс – когда скролишь, шапка как бы наезжает на баннер. Создается впечатление будто баннер находится сзади сайта и не является его частью, и не навязывается юзеру. Посмотрите на скрин как это выглядит:
Добиться этого очень просто, я решил применить margin-top для двух элементов, не изменяя общую высоту контента.
Для начала пропишем в html id у двух объектов, допустим это banner_top и header_top:
1 2 |
<div id="banner_top" style="height: 112px; overflow: hidden;"><!-- код баннера --></div> <div id="header_top"></div> |
Представим, что мы проскроллили на 50px вниз, тогда нам нужно
1. Сдвинуть #banner_top на 50px вниз (margin-top: 50px)
2.
2. Сдвинуть #header_top на 50px вверх (margin-top: -50px)
3. Учесь условие, если скролл меньше чем высота баннера, а так же максимальный сдвиг шапки относительно баннера может быть не более чем высота шапки.
Для этого напишем простенький js код на jquery:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
jQuery(document).ready(function($) { $(window).scroll(function() { var scrollTop = $(this).scrollTop(); var banner_height = $("#banner_top").height(); var header_height = $("#header_top").height(); // banner top hiding if ( scrollTop < banner_height ) { var marginTop = Math.min( scrollTop, header_height); $("#banner_top").css("margin-top", marginTop); $("#header_top").css("margin-top", -1 * marginTop); } }); }); |
Получили изящное решение параллакс эффекта, он может не такой заметный, но зато очевидный, именно это и откладывается в сознании у людей, которые посещают ваш сайт, их ничто не должно раздражать и ничто не должно отвлекать их внимание, поэтому все эффекты6 анимации и прочие плюшки должны быть очевидными и не бросаться в глаза, словно как будто так и должно было быть. Такие ощущения очень важны в наше время для пользователя.
Заботьтесь о ваших пользователях !!! C вами был Антон Палыч, и это моя первая более менее развернутая статья на моем блоге, наконец-то у меня дошли руки, собственно для такого рода статей и создавался этот блог.
Спасибо за внимание, будут вопросы – задавайте.
Добавить комментарий