Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.06.2012, 02:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от melky
после курения манов микрософт уже ничего не кажется невозможным в IE
О да, я их прокурил так что уж ничего и не видно сквозь никотин налипший на их писанину

Сообщение от melky
завтра утром для зарядки мозгов попробую. можно же сюда написать?)
а кто против? )
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #12 (permalink)  
Старый 15.06.2012, 11:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

devote, тебе открылись тайные знания? Был у меня один такой случай, что без подключения htc не обойтись, но сейчас уже не вспомню.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #13 (permalink)  
Старый 15.06.2012, 11:27
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Ну, вот моя попытка. Всё свелось к аналогии с box-shadow: клонировали элемент, и добавили копии эффектов. Эффекты такие: поворот (на 180 градусов), ревёрсинг (отражение справа налево), и размытие. Последнее достигается сложновато в опере и файрфоксе.

Я разделю пример на несколько, чтобы было удобней писать читать код.

Начну с классического вида элемента, без отражения.
<style>
* {margin:0;padding:0}

.mirrorize {
    font-family: sans-serif;
    font-size: 18px;
    font-weight: bold;
    border: 2px red solid;
    padding: 5px;
    background-color: #F58C8C;
    position: absolute;
    top: 0;
}
</style>
<div class="mirrorize">
    Mirrorize me.
</div>


БЫЛО БЫ НЕПЛОХО ДОБАВИТЬ ОТРАЖЕНИЮ USER-SELECT: NONE. Но я последую принципу "работает - не трожь" (мне просто лень ).

А теперь начну мешать сюда грязный код. Пример для браузеров, поддерживающих CSS Filters (у меня только хром):
<style>
* {margin:0;padding:0}

.mirrorize {
    font-family: sans-serif;
    font-size: 18px;
    font-weight: bold;
    border: 2px red solid;
    padding: 5px;
    background-color: #F58C8C;
    position: absolute;
    top: 0;
}
.reflection {
    position: absolute;
    width: 100%;

    left: 0;
    padding: 0;
    margin: 0;

    top: 105%; /* outer высота + отступ */

    -webkit-transform: scaleY(-1);
    -moz-transform: scaleY(-1);
    -ms-transform: scaleY(-1);
    -o-transform: scaleY(-1);
    transform: scaleY(-1);

    -webkit-filter: blur(2px);
    -moz-filter: blur(2px);
    -ms-filter: blur(2px);
    -o-filter: blur(2px);
    filter: blur(2px);
}
</style>
<div class="mirrorize">
    Mirrorize me.
    <div class="reflection mirrorize">Mirrorize me.</div>
</div>

Теперь решение для IE:
<style>
* {margin:0;padding:0}

.mirrorize {
    font-family: sans-serif;
    font-size: 18px;
    font-weight: bold;
    border: 2px red solid;
    padding: 5px;
    background-color: #F58C8C;
    position: absolute;
    top: 0;
}
.reflection {
    position: absolute;
    width: 100%;

    left: 0;
    padding: 0;
    margin: 0;

    top: 105%;

    /*IE 5.5 - IE 7*/
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1) progid:DXImageTransform.Microsoft.Blur(pixelRadius=2);
    
    /*IE8 вроде как.*/
    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1) progid:DXImageTransform.Microsoft.Blur(pixelRadius=2)";
}
</style>
<div class="mirrorize">
    Mirrorize me.
    <div class="reflection mirrorize">Mirrorize me.</div>
</div>

Ну а теперь решение для браузеров, поддерживающих CSS Transformations, но не поддерживающих CSS Filters - т.е. размытие. На ум мне пришло SVG.

В ОПЕРЕ НЕ РАБОТАЕТ. ЖАЛЬ. Можно было бы сделать размытие в канвасе (слыхал про такое), но я канвас ни разу не трогал, и в ближайшее время даже не собираюсь.
<style>
* {margin:0;padding:0}

.mirrorize {
    font-family: sans-serif;
    font-size: 18px;
    font-weight: bold;
    border: 2px red solid;
    padding: 5px;
    background-color: #F58C8C;
    position: absolute;
    top: 0;
}
.reflection {
    position: absolute;
    width: 100%;

    left: 0;
    padding: 0;
    margin: 0;

    top: 105%;

    -webkit-transform: scaleY(-1);
    -moz-transform: scaleY(-1);
    -ms-transform: scaleY(-1);
    -o-transform: scaleY(-1);
    transform: scaleY(-1);

    filter: url(#reflection_blur);
}
</style>

<svg>
    <defs>
        <filter id="reflection_blur">
            <feGaussianBlur stdDeviation="2" />
        </filter>
    </defs>
</svg>

<div class="mirrorize">
    Mirrorize me.
    <div class="reflection mirrorize">Mirrorize me.</div>
</div>

Последний раз редактировалось melky, 15.06.2012 в 11:44.
Ответить с цитированием
  #14 (permalink)  
Старый 15.06.2012, 12:30
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

melky,
Всё нормально за исключением того, что это не картинка и ты потерял закругленные углы и градиент. Ну и кроссбраузерность обязательна. И я напомню, что картинка берется изначально с острыми углами.

__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 15.06.2012 в 12:32.
Ответить с цитированием
  #15 (permalink)  
Старый 15.06.2012, 12:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Gozar
потерял закругленные углы
закруглённые углы? там отражение является точной копией отражаемого элемента, с добавлением ещё одного класса... как мог стиль потеряться? Недавно появившееся свойство element должно помочь.

картинка... да. её придётся wrap'ать, а дальше то же самое :
FIREFOX ONLY; При клике откроется пример на jsbin.

Сообщение от Gozar
и градиент
Тут уже намного сложнее.

Ну вот-с решение на SVG Mask (FIREFOX ONLY). Нажать - откроется пример.


PS Надеюсь, Вы не против того, что я использовал ваш аватар для теста

Последний раз редактировалось melky, 15.06.2012 в 13:03.
Ответить с цитированием
  #16 (permalink)  
Старый 15.06.2012, 12:55
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от melky
закруглённые углы? там отражение является точной копией отражаемого элемента, с добавлением ещё одного класса... как мог стиль потеряться?
Исходник такой:

То, что ты показываешь совсем другое решение. Выше видно, что должно получиться.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #17 (permalink)  
Старый 15.06.2012, 13:07
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Gozar
видно, что должно получиться.
VML же?
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #18 (permalink)  
Старый 15.06.2012, 13:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Gozar Посмотреть сообщение
Исходник такой:

То, что ты показываешь совсем другое решение. Выше видно, что должно получиться.
Угу. Как-то так :

Было :


Стало (клик-пример):


... для оперы ещё придётся ставить пару свойств для округления картинки, а исчезающий градиент в голове не появляется.
Ответить с цитированием
  #19 (permalink)  
Старый 15.06.2012, 13:27
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от melky
для оперы ещё придётся ставить пару свойств для округления картинки, а исчезающий градиент в голове не появляется.
Угу, но тема про IE.

Это всё должно работать в IE7, IE8. Я уж молчу про то, что оно должно менять размеры и летать по экрану и не разваливаться на лету. Ну а так, да, че сложного?!

Сообщение от B~Vladi
VML же?
Ась?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 15.06.2012 в 13:39.
Ответить с цитированием
  #20 (permalink)  
Старый 15.06.2012, 14:03
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Gozar
Ась?
Я не пробовал, но судя по документации это можно сделать в IE через VML. Рисуем прямоугольник нужных размеров со скругленными углами (roundrect
), а внутрь помещаем элемент fill с атрибутом src и type="tile". Так нарисуем верхнее изображение.
Нижнее изображение можно сделать фильтрами (если получится, должно), хотя на счет градиента не уверен. Смотря на каком фоне это всё должно летать.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 15.06.2012 в 14:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести информацию что JS выключен? PAMAC Общие вопросы Javascript 5 09.03.2011 20:24
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Что лучше: библиотека или чистый JS? `p r o x y Библиотеки/Тулкиты/Фреймворки 4 26.11.2010 11:16
Стоит ли учить JS? Или что то другое? aleks_valery Элементы интерфейса 1 06.08.2010 19:33
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36