jQuery textShadow - плагин для создания тени в IE
В предыдущей статье про свойство text-shadow я писала, что его вполне можно использовать, отказавшись от поддержки IE.Но потом я подумала – а зачем отказываться?
И написала небольшой jQuery плагин для реализации этого свойства под IE.
Вызывается он крайне просто:
$('.block').textShadow('0 1px #191919'); // без размытия
$('.block').textShadow('1px 1px 5px #191919'); // с размытием
Перечисление параметров идёт так же, как в свойстве text-shadow, с той лишь разницей, что цвет тени должен быть последним параметром.Давайте рассмотрим код плагина:
$.fn.textShadow = function(o){
if (!o) return; // если нет параметра - выходим
var str = o.split(' '), // делим введенную строку
x = parseInt(str[0]), // получаем отступ сверху
y = parseInt(str[1]), // и снизу
blur = 0, // значения по умолчанию
color = '';
if (str.length == 3) { // если было передано 3 параметра
color = str[2]; // третьим параметром будет цвет
} else { // иначе
blur = parseInt(str[2]); // третьим параметром будет размытие
color = str[3]; // а четвёртым цвет
}
return $(this).each(function(){ // для каждого элемента
var text = $(this);
text.css({
position:'relative', // устанавливаем относительное позиционирование
'z-index':0, // определяем позицию на случай использования фона
zoom:1 // хак для IE 6
}).append('<span></span>') // добавляем к элементу тег span
.find('span').html(text.html()) // находим его и вставляем в него содержимое элемента
.css({width:text.width(), // ширина тени равна ширине элемента
position:'absolute', // устанавливаем абсолютное позиционирование
'z-index':-1, // прячем тень за основной элемент
color:color, // устанавливаем основной цвет
left:x - blur + 'px', // отступ от элемента сверху
top:y - blur + 'px', // и снизу
'padding-left':text.css('padding-left'), // отступы тени равны отступам элемента
'padding-top':text.css('padding-top')});
if (blur) text.find('span') // если нужно размыть тень, находим её
.css('filter','progid:DXImageTransform.Microsoft.Blur(pixelradius=' + blur + ', enabled="true")'); // и размываем с помощью фильтра blur
});
};
А вот и примеры из прошлой статьи:
Всё просто - тень без размытия сдвинута на пиксель вправо и вниз.
Из всех возможных вариантов использования этот мне нравится больше всего. Тень сдвигаем на пиксель влево и вверх.
В этом примере тень сдвинута только вниз.
Эффект размытия. Хорошо подходит для заголовков.
Браузеры, которые поддерживают text-shadow, выведут эти примеры с помощью CSS, а IE будет использовать вышеприведённый плагин.Но как отличить IE от других браузеров?
Конечно, можно проверять браузер в самой функции, но мы сделаем проще.
<!--[if IE]><script type="text/javascript" src="text-shadow.jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.block').textShadow('1px 1px #191919');
})
</script><![endif]-->
Все остальные браузеры будут воспринимать этот текст как обычный комментарий, и лишь IE загрузит необходимый плагин.Подробнее об условных комментариях для IE можно почитать здесь.
Можно сделать ещё проще – если следующие строки, задающие параметры тени:
$(document).ready(function(){
$('.block').textShadow('1px 1px #191919');
})
добавить в конец кода плагина, хак для IE сократится до простого вызова скрипта:
<!--[if IE]><script type="text/javascript" src="text-shadow.jquery.js"></script><![endif]-->
Вот и всё.
Пользуйтесь на здоровье, и успехов вам в создании кроссбраузерной вёрстки.



Поддержка IE6 - это круто!
Особенно если вспомнить, в каком году был выпущен IE 6 и какой год сейчас на дворе.
"missing ; before statement". Opera дала даже более точную строку "css('padding-top')})if(blur)a.find('span..."
Проблема решается перекопированием из статьи исходного кода :)
.next() // находим его .attr('id',idShadow)//устанавливаем id тени
.css({ // добавляем ему следующие свойства
И можно менять тень вида $("#id_тени").css(свойства); и т.д. :)
$('.block').textShadow('0 1px #191919'); // без размытия
$('.block').textShadow('1px 1px 5px #191919'); // с размытием
где в каком файле это должно лежать в css или хз где?!
я не врубаюсь жду ответа плз!
В HTML код вашей страницы вы вставляете следующее:
<!--[if IE]><script type="text/javascript" src="[путь к файлу]text-shadow.jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('[блок, к которому вам над применить эффект]').textShadow('1px 1px #191919'); }) </script><![endif]-->Кроме этого, вы должны подключить библиотеку jQuery.
Код text-shadow.min.js отличается только тем, что он сжат для уменьшения размера.
$('.block:hover').textShadow('0 1px #191919');
как сделать чтоб тень добавлялась при наведение на элемент?
Автор, отзовитесь..)
это написано три года назад
www.hintzmann.dk/testcenter/js/jquery/textshadow/
пруфлинк
и кстате удобнее реализовано
однако, девушка написала плуг к жквере - это подвиг. преклоняюсь. без иронии. мо-ло-дец!!!
или только комментарии дурацкие?
А это уже не выход...
Это единственное, что помогло и получилось даже иннтересней чем в css!
yogadestiny.ru/kniga- здесь в дизайне и было интересного только работа с тенью (заголовок сайта, заголовки статей, гравировка в боковой панели(даже это сработало!)!
Может я не правильно их обозвал в скрипте:
$('input[type=submit]').textShadow('0px 1px 1px #000');
$('input[type=submit]:active').textShadow('0px 0px 1px #000');
yogadestiny.ru/?s=
пожалуйста подскажите!!!!!
Некорректно работает со ссылками!
И вот здесь: yogadestiny.ru/razvitie-bloga
внизу на надписи "СПАСИБО ЗА ВАШУ ПОМОЩЬ!" я вообще не понял почему!
filter:Shadow(Color=#fcfcd8,Direction=135,Strength=2);
И ни надо никаких заморочек, работает на УРА! всё очень просто.
1. Надо не скачивать плагин, а копировать код со странички и сохранять отдельным файлом, к примеру textshadow-ie.js и подключить, как было описано Автором плагина.
2. Далее - ищем строку:
}).append('') // добавляем к элементу тег span
и прописываем тегу span класс:
}).append('')
3. В CSS файле, отвечающем за таблицу стилей для IE задаём правила для этого класса (если такового файла нет - то создать - у меня это файл styleie.css):
.textshadow{text-align: left;} или
.textshadow{text-align: right;}
в зависимости от того - куда "уплывает" тень.
Ещё раз спасибо за плагин!
Вообщем - тегу span надо присвоить класс, например textshadow:
и в CSS-e правилом text-align ровнять его.
$(document).ready(function(){
var DefaultTextShadow = {
x: 2,
y: 2,
radius: 0,
color: "#000000"
};
var HoverTextShadow = {
x: 2,
y: 2,
radius: 0,
color: "#ff0000"
};
$("#menu a").textShadow(DefaultTextShadow);
$("#menu a").hover(function() {
$(this).textShadow(HoverTextShadow);
},
function() {
$(this).textShadow(DefaultTextShadow);
}
);
});
Работает прекрасно, только если вы не меняете задний фон при наведении на объект.
Это я думаю и так ясно, но дабы исключить лишние вопросы:
если изначально на тексте тени нет, то "DefaultTextShadow" можно не использовать. Тогда:
$("#menu a").hover(function() {
$(this).textShadow(HoverTextShadow);
},
function() {
$(this).textShadowRemove;
}
);