• Страница 1 из 1
  • 1
checkbox & radio
DSC
Дата: Пятница, 06.08.2010, 16:37 | Сообщение # 1
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Как всем многим известно, простым CSS не заменить внешний вид checkbox'ов и radio на свой(графический), именно для этого я разработал скрипт, который помогает нам решить данную проблему!

Если посмотреть на все сервисы, сайты, да и вообще на правильную структуру использования checkbox'ов и radio, то можно заметить, что они все нужны для использования в формах(<form>...</form>), вот и я последовал данной структуре, следовательно скрипт будет заменять только те checkbox'ы и radio, которые соблюдают правильный порядок(см. ниже).

Code
form → label → input  //  true
form → input  //  false
input  //  false

Из выше указанного понятно, что работает только первая последовательность, да и вообще, по большей части все эти checkbox'ы и radio используются в опросах и формах входа, где как раз и есть такая последовательность!

Итак, приступим:
Для начала разберёмся со скриптом:

Code
<script type='text/javascript'>
/*
  * Скрипт смены вида чекбоксов и радио-кнопок на JavaScript от Latro
  *
  * @author      Юрий Палеев <admin@latro.net.ru>
  * @license     http://freebsd.org/copyright/freebsd-license.html
  * @link        http://latro.net.ru
  * @version     2.0
  */

(function(L, A, T, R, O) {
   function t(n, o) {
     return (o || document).getElementsByTagName(n)
   }
   function r(o, a, b, c){
     return o[T].replace(a[b], a[c])
   }
   for (i = 0; f = t(L)[i++];) {
     for (j = 0; l = t('label', f)[j++];) {
       var k = t(A, l)[0];
       l[T] += ' ' + k.type + (k.disabled ? k.checked ? R[0] : R[1] : k.checked ? O[0] : O[1]);
       l.style.backgroundRepeat='no-repeat';
       k.style.cssText = 'left:-99999px;position:absolute;top:-99999px';
       k.onclick = function() {
         for (i = 0; d = t(L)[i++];) {
           for (j = 0; e = t(A, d)[j++];) {
             var p = e.parentNode,
             с = e.checked;
             p[T] = e.disabled ? с ? r(p, R, 1, 0) : r(p, R, 0, 1) : с ? r(p, O, 1, 0) : r(p, O, 0, 1)
            }
         }
       }
     }
   }
})('form', 'input', 'className', ['-don', '-doff'], ['-on', '-off']);
</script>

Также предлагаю сокращённую версию:
Code
<script type='text/javascript'>
/*
  * Скрипт смены вида чекбоксов и радио-кнопок на JavaScript от Latro
  *
  * @author      Юрий Палеев <admin@latro.net.ru>
  * @license     http://freebsd.org/copyright/freebsd-license.html
  * @link        http://latro.net.ru
  * @version     2.0
  */

(function(L,A,T,R,O){function t(n,o){return(o||document).getElementsByTagName(n)}function r(o,a,b,c){return o[T].replace(a[b],a[c])}for(i=0;f=t(L)[i++];)for(j=0;l=t('label',f)[j++];){var k=t(A,l)[0];l[T]+=' '+k.type+(k.disabled?k.checked?R[0]:R[1]:k.checked?O[0]:O[1]);l.style.backgroundRepeat='no-repeat';k.style.cssText='left:-99999px;position:absolute;top:-99999px';k.onclick=function(){for(i=0;d=t(L)[i++];)for(j=0;e=t(A,d)[j++];){var p=e.parentNode,с=e.checked;p[T]=e.disabled?с?r(p,R,1,0):r(p,R,0,1):с?r(p,O,1,0):r(p,O,0,1)}}}})('form','input','className',['-don','-doff'],['-on','-off']);
</script>

Теперь рассмотрим css:
Code
<style type='text/css'>
form label{height:16px;padding-left:20px;width:16px}    /*  указываем расстояние текста от левого края, высоту и ширину изображений  */

/*       КЛИКАБЕЛЬНЫЕ       */
/*         checkbox         */
.checkbox-off{background:url(http://latro.net.ru/ch-n-r/ch-off.gif)}  /*  активные  */
.checkbox-on{background:url(http://latro.net.ru/ch-n-r/ch-on.gif)}    /* неактивные */

/*          radio           */
.radio-off{background:url(http://latro.net.ru/ch-n-r/r-off.gif)}      /*  активные  */
.radio-on{background:url(http://latro.net.ru/ch-n-r/r-on.gif)}        /* неактивные */

/*      НЕКЛИКАБЕЛЬНЫЕ      */
/*         checkbox         */
.checkbox-doff{background:url(http://latro.net.ru/ch-n-r/ch-doff.gif)}/*  активные  */
.checkbox-don{background:url(http://latro.net.ru/ch-n-r/ch-don.gif)}  /* неактивные */

/*          radio           */
.radio-doff{background:url(http://latro.net.ru/ch-n-r/r-doff.gif)}    /*  активные  */
.radio-don{background:url(http://latro.net.ru/ch-n-r/r-don.gif)}      /* неактивные */
</style>

В резальтате вы получите желаемый результат, как пример вы можете посмотреть готовый вариант!

Автор: Я
Источник: latro.net.ru

p.s.: добавил реакцию на disabled!


aka Latro

Сообщение отредактировал DSC - Суббота, 07.08.2010, 14:48
  
UnderShot
Дата: Пятница, 06.08.2010, 21:04 | Сообщение # 2
оратор
Группа: Модераторы
Пользователь №: 45
Сообщений: 923
Получено оценок: 85
DSC, молодец.
Quote
Боримся со стандартами. Часть 1
Еще вторая часть намечается?)


Очень важная тема!
Filmzona — онлайн фильмы.
  
DSC
Дата: Пятница, 06.08.2010, 21:07 | Сообщение # 3
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
UnderShot, ну это естественно, готовьтесь ко второй части ^_^

aka Latro
  
Aleko
Дата: Пятница, 06.08.2010, 21:12 | Сообщение # 4
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC, скриншоты выложил бы а так вообще отлично (внешне, в код ещё не смотрел)

Бесплатные обои.
  
DSC
Дата: Пятница, 06.08.2010, 21:16 | Сообщение # 5
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko, какие скриншоты, да и зачем, я же ссылку предоставил на рабочий вариант...!)

aka Latro
  
Aleko
Дата: Суббота, 07.08.2010, 14:30 | Сообщение # 6
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC, нет :active и :hover

Бесплатные обои.
  
DSC
Дата: Суббота, 07.08.2010, 15:41 | Сообщение # 7
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko, :hover и :active работает с заменёнными так-же как и с простыми, могу привести пример, чтобы небыло сомнений!

aka Latro
  
Aleko
Дата: Воскресенье, 08.08.2010, 02:02 | Сообщение # 8
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC, ты в графике выполни эти псевдоклассы

Бесплатные обои.
  
DSC
Дата: Воскресенье, 08.08.2010, 10:12 | Сообщение # 9
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko, перепроверь, теперь на графике!

aka Latro
  
Aleko
Дата: Воскресенье, 08.08.2010, 20:11 | Сообщение # 10
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC, не вижу изменений.

Бесплатные обои.
  
DSC
Дата: Воскресенье, 08.08.2010, 21:25 | Сообщение # 11
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko, ты попросил поставить на графику, я и поставил на графику, или ты предлагаешь сделать графическое изменение при активации и ховере?

aka Latro
  
UnderShot
Дата: Понедельник, 09.08.2010, 09:07 | Сообщение # 12
оратор
Группа: Модераторы
Пользователь №: 45
Сообщений: 923
Получено оценок: 85
DSC, именно.

Очень важная тема!
Filmzona — онлайн фильмы.
  
DSC
Дата: Понедельник, 09.08.2010, 18:26 | Сообщение # 13
спикер
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
UnderShot, Aleko, а в чём собственно проблема, ховер и актив работают так-же как и со стандартными, вот вам пример! И это, рисуя все эти разноцветные иконки, я подумал сделать спрайтом, но это пока единственная проблема, её решу сегодня!

aka Latro
  
  • Страница 1 из 1
  • 1
Поиск:
© Studioad.ru 2006 · 2010. Использование материалов форума на сторонних ресурсах без прямой обратной ссылки строго запрещено. Хостинг от uCoz.