Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Стайлинг <select>

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Franchesko
Отправлено: 03 Декабря, 2011 - 20:15:25
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




ребята, столкнулся с проблемой оформления селекте <select>

Решил использовать вот этот решение

http://ryanfait[dot]com/resources/cu[dot][dot][dot]d-radio-buttons/

Проблема в том что я не могу сделать два селекта разного размера, помогите очень нужно )))) весь вечер вожусь с js в котором я очень плохо разбираюсь

CODE (html):
скопировать код в буфер обмена
  1. <select name="d" class="styled">
  2.   <option value="1">Option 1</option>
  3.   <option value="2">Option 2</option>
  4.   <option value="3">Option 3</option>
  5. </select>


CODE (htmlphp):
скопировать код в буфер обмена
  1. body {
  2.         font: 0.8em/21px arial,sans-serif;
  3. }
  4.  
  5. .checkbox, .radio {
  6.         width: 19px;
  7.         height: 25px;
  8.         padding: 0 5px 0 0;
  9.         background: url(checkbox.gif) no-repeat;
  10.         display: block;
  11.         clear: left;
  12.         float: left;
  13. }
  14. .radio {
  15.         background: url(radio.gif) no-repeat;
  16. }
  17. .select {
  18.         position: absolute;
  19.         width: 158px; /* With the padding included, the width is 190 pixels: the actual width of the image. */
  20.         height: 21px;
  21.         padding: 0 24px 0 8px;
  22.         color: #fff;
  23.         font: 12px/21px arial,sans-serif;
  24.         background: url(select.gif) no-repeat;
  25.         overflow: hidden;
  26. }


CODE (javascript):
скопировать код в буфер обмена
  1. /*
  2.  
  3. CUSTOM FORM ELEMENTS
  4.  
  5. Created by Ryan Fait
  6. www.ryanfait.com
  7.  
  8. The only things you may need to change in this file are the following
  9. variables: checkboxHeight, radioHeight and selectWidth (lines 24, 25, 26)
  10.  
  11. The numbers you set for checkboxHeight and radioHeight should be one quarter
  12. of the total height of the image want to use for checkboxes and radio
  13. buttons. Both images should contain the four stages of both inputs stacked
  14. on top of each other in this order: unchecked, unchecked-clicked, checked,
  15. checked-clicked.
  16.  
  17. You may need to adjust your images a bit if there is a slight vertical
  18. movement during the different stages of the button activation.
  19.  
  20. The value of selectWidth should be the width of your select list image.
  21.  
  22. Visit http://ryanfait.com/ for more information.
  23.  
  24. */
  25.  
  26. var checkboxHeight = "25";
  27. var radioHeight = "25";
  28. var selectWidth = "190";
  29.  
  30.  
  31. /* No need to change anything after this */
  32.  
  33.  
  34. document.write('<style type="text/css">input.styled { display: none; } select.styled { position: relative; width: ' + selectWidth + 'px; opacity: 0; filter: alpha(opacity=0); z-index: 5; } .disabled { opacity: 0.5; filter: alpha(opacity=50); }</style>');
  35.  
  36. var Custom = {
  37.         init: function() {
  38.                 var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active;
  39.                 for(a = 0; a < inputs.length; a++) {
  40.                         if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && inputs[a].className == "styled") {
  41.                                 span[a] = document.createElement("span");
  42.                                 span[a].className = inputs[a].type;
  43.  
  44.                                 if(inputs[a].checked == true) {
  45.                                         if(inputs[a].type == "checkbox") {
  46.                                                 position = "0 -" + (checkboxHeight*2) + "px";
  47.                                                 span[a].style.backgroundPosition = position;
  48.                                         } else {
  49.                                                 position = "0 -" + (radioHeight*2) + "px";
  50.                                                 span[a].style.backgroundPosition = position;
  51.                                         }
  52.                                 }
  53.                                 inputs[a].parentNode.insertBefore(span[a], inputs[a]);
  54.                                 inputs[a].onchange = Custom.clear;
  55.                                 if(!inputs[a].getAttribute("disabled")) {
  56.                                         span[a].onmousedown = Custom.pushed;
  57.                                         span[a].onmouseup = Custom.check;
  58.                                 } else {
  59.                                         span[a].className = span[a].className += " disabled";
  60.                                 }
  61.                         }
  62.                 }
  63.                 inputs = document.getElementsByTagName("select");
  64.                 for(a = 0; a < inputs.length; a++) {
  65.                         if(inputs[a].className == "styled") {
  66.                                 option = inputs[a].getElementsByTagName("option");
  67.                                 active = option[0].childNodes[0].nodeValue;
  68.                                 textnode = document.createTextNode(active);
  69.                                 for(b = 0; b < option.length; b++) {
  70.                                         if(option[b].selected == true) {
  71.                                                 textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
  72.                                         }
  73.                                 }
  74.                                 span[a] = document.createElement("span");
  75.                                 span[a].className = "select";
  76.                                 span[a].id = "select" + inputs[a].name;
  77.                                 span[a].appendChild(textnode);
  78.                                 inputs[a].parentNode.insertBefore(span[a], inputs[a]);
  79.                                 if(!inputs[a].getAttribute("disabled")) {
  80.                                         inputs[a].onchange = Custom.choose;
  81.                                 } else {
  82.                                         inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
  83.                                 }
  84.                         }
  85.                 }
  86.                 document.onmouseup = Custom.clear;
  87.         },
  88.         pushed: function() {
  89.                 element = this.nextSibling;
  90.                 if(element.checked == true && element.type == "checkbox") {
  91.                         this.style.backgroundPosition = "0 -" + checkboxHeight*3 + "px";
  92.                 } else if(element.checked == true && element.type == "radio") {
  93.                         this.style.backgroundPosition = "0 -" + radioHeight*3 + "px";
  94.                 } else if(element.checked != true && element.type == "checkbox") {
  95.                         this.style.backgroundPosition = "0 -" + checkboxHeight + "px";
  96.                 } else {
  97.                         this.style.backgroundPosition = "0 -" + radioHeight + "px";
  98.                 }
  99.         },
  100.         check: function() {
  101.                 element = this.nextSibling;
  102.                 if(element.checked == true && element.type == "checkbox") {
  103.                         this.style.backgroundPosition = "0 0";
  104.                         element.checked = false;
  105.                 } else {
  106.                         if(element.type == "checkbox") {
  107.                                 this.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
  108.                         } else {
  109.                                 this.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
  110.                                 group = this.nextSibling.name;
  111.                                 inputs = document.getElementsByTagName("input");
  112.                                 for(a = 0; a < inputs.length; a++) {
  113.                                         if(inputs[a].name == group && inputs[a] != this.nextSibling) {
  114.                                                 inputs[a].previousSibling.style.backgroundPosition = "0 0";
  115.                                         }
  116.                                 }
  117.                         }
  118.                         element.checked = true;
  119.                 }
  120.         },
  121.         clear: function() {
  122.                 inputs = document.getElementsByTagName("input");
  123.                 for(var b = 0; b < inputs.length; b++) {
  124.                         if(inputs[b].type == "checkbox" && inputs[b].checked == true && inputs[b].className == "styled") {
  125.                                 inputs[b].previousSibling.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
  126.                         } else if(inputs[b].type == "checkbox" && inputs[b].className == "styled") {
  127.                                 inputs[b].previousSibling.style.backgroundPosition = "0 0";
  128.                         } else if(inputs[b].type == "radio" && inputs[b].checked == true && inputs[b].className == "styled") {
  129.                                 inputs[b].previousSibling.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
  130.                         } else if(inputs[b].type == "radio" && inputs[b].className == "styled") {
  131.                                 inputs[b].previousSibling.style.backgroundPosition = "0 0";
  132.                         }
  133.                 }
  134.         },
  135.         choose: function() {
  136.                 option = this.getElementsByTagName("option");
  137.                 for(d = 0; d < option.length; d++) {
  138.                         if(option[d].selected == true) {
  139.                                 document.getElementById("select" + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
  140.                         }
  141.                 }
  142.         }
  143. }
  144. window.onload = Custom.init;

(Добавление)
или посоветуйте простой способ оформления <select>, все что я находил было очень сложным....я уже не знаю просто что делать, сделал все, кроме вот селекта
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 21:03:20
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




применяйте css к span-у(там select эмулируется через span). В примере это span.select
его ширина складывается из width и padding==190px
Возьмите fierbug и поиграйтесь со страницей
 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 21:09:11
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




я создал второй js файл, потом второму селекту присвоил класс "styled2" и он имеет виде вот такой

CODE (html):
скопировать код в буфер обмена
  1.                         <select  name="2" class="styled2" >
  2.                           <option value="21">Option 1</option>
  3.                           <option value="20">пластик</option>
  4.                           <option value="22">Option 2</option>
  5.                         </select>  



прописал ему css

CODE (html):
скопировать код в буфер обмена
  1. .select2 {
  2.         position: absolute;
  3.         width: 160px; /* With the padding included, the width is 190 pixels: the actual width of the image. */
  4.         height: 23px;
  5.         padding: 0 24px 0 8px;
  6.         color: #000;
  7.         font: 12px/21px arial,sans-serif;
  8.         background: url(images/calc_input2.png) no-repeat;
  9.         overflow: hidden;
  10. }


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

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. document.write('<style type="text/css">input.styled2 { display: none; } select.styled2 { position: relative; width: ' + selectWidth + 'px; opacity: 0; filter: alpha(opacity=0); z-index: 5; } .disabled { opacity: 0.5; filter: alpha(opacity=50); }</style>');
  4.  
  5. var Custom = {
  6.         init: function() {
  7.                 var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active;
  8.                 inputs = document.getElementsByTagName("select");
  9.                 for(a = 0; a < inputs.length; a++) {
  10.                         if(inputs[a].className == "styled2") {
  11.                                 option = inputs[a].getElementsByTagName("option");
  12.                                 active = option[0].childNodes[0].nodeValue;
  13.                                 textnode = document.createTextNode(active);
  14.                                 for(b = 0; b < option.length; b++) {
  15.                                         if(option[b].selected == true) {
  16.                                                 textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
  17.                                         }
  18.                                 }
  19.                                 span[a] = document.createElement("span");
  20.                                 span[a].className = "select2";
  21.                                 span[a].id = "select" + inputs[a].name;
  22.                                 span[a].appendChild(textnode);
  23.                                 inputs[a].parentNode.insertBefore(span[a], inputs[a]);
  24.                                 if(!inputs[a].getAttribute("disabled")) {
  25.                                         inputs[a].onchange = Custom.choose;
  26.                                 } else {
  27.                                         inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
  28.                                 }
  29.                         }
  30.                 }
  31.                 document.onmouseup = Custom.clear;
  32.         },
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 21:20:59
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Все правильно, у Вас получается что в первом файле создается класс и во втором тот же класс. Тут надо смотреть ООП js. А Вы не смотрели в сторону jQuery плагинов? Там по интересней они смотрятся.
 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 21:25:05
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




нет, я пытался сделать через css и дивы, запрятать селект в див. но там криво отображается оно, не красиво просто...мне бы тот способ в котором я разберусь
(Добавление)
а этот способ трудно переделать?
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 21:36:33
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Вы можете выложить куда-нибудь то что у Вас получилось (select-ы)
Просто я не вижу чтобы он менял CSS у select-a в самом скрипте
 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 21:37:28
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




сейчас
(Добавление)
http://dl[dot]dropbox[dot]com/u/24519373/_Files/js[dot]zip

Вот, сейчас там работает второй селект, если отключить select2.js будет работать первый
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 21:52:29
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




сейчас гляну
 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 21:53:34
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




но вместе они никак не хотят )))
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 22:07:21
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




у самого selecta задайте style="width:??";
ширина изменится и грузите только один js файл
добавление
Да и стили для второго задавайте через его id, который равен select+name selecta

(Отредактировано автором: 03 Декабря, 2011 - 22:11:02)

 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 22:11:42
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




тогда оба селекта будут одного размера же
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 22:12:56
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




сейчас
Вот посмотрите здесь все сделано, сразу говорю, что "говнокод"
Скачать файл: upl.zip
Скачан раз: 50

(Отредактировано автором: 03 Декабря, 2011 - 22:14:53)

 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 22:13:49
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




мне нужно чтобы один селект был 323 пх а другой 160пх соответственно и стили разные у них будут
 
 Top
tuareg
Отправлено: 03 Декабря, 2011 - 22:16:20
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




там 100px второй select. Сделайте 160px поменяв style
 
 Top
Franchesko
Отправлено: 03 Декабря, 2011 - 22:19:03
Post Id



Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Окт. 2011  
Откуда: Армавир


Помог: 2 раз(а)




так там же и есть 160

CODE (html):
скопировать код в буфер обмена
  1. span.select2 {
  2.         position: absolute;
  3.         width: 160px; /* With the padding included, the width is 190 pixels: the actual width of the image. */
  4.         height: 23px;
  5.         padding: 0 24px 0 8px;
  6.         color: #000;
  7.         font: 12px/21px arial,sans-serif;
  8.         background: url(images/calc_input2.png) no-repeat;
  9.         overflow: hidden;
  10. }


да дело то не в этом. проблема в том что работает только один из js, не получается завезти сразу два js чтобы работали 2 селекта как надо
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTML, Дизайн & CSS »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB