УрокКнопка разной ширины с закруглёнными уголками
Одна из сложностей, с которой я столкнулся едва начав работать с друпалом - это как сделать все кнопки с закруглёнными уголками, да ещё чтобы ширина у каждой кнопки менялась в зависимости от длины слова(фразы) на ней. Стандартный хтмл друпала не позволяет это сделать, т.к. для моей задачи необходимо обернуть кнопку ещё хотя бы в 1 дополнительный класс. С помощью некоторого кода я всё-таки смог это сделать:
function phptemplate_button($element) { if (isset($element['#attributes']['class'])) { $element['#attributes']['class'] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class']; } else { $element['#attributes']['class'] = 'form-'. $element['#button_type']; } if (stristr($element['#attributes']['style'], 'display: none;') || stristr($element['#attributes']['class'], 'fivestar-submit') || is_array($element['#upload_validators'])) { return '<input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'id="'. $element['#id'].'" value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." />\n"; } else { return '<span class="button"><input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'id="'. $element['#id'].'" value="'. check_plain($element['#value']) .'" '. drupal_attributes($element['#attributes']) ." /></span>\n"; } }
Этот код просто засовываем в наш template.php, чистим кэш друпала и наслаждаемся.
Здесь на кнопку навешивается <span class = "button">, который можно в дальнейшем обработать в своём файле стилей. К тому же здесь есть проверка, если кнопка не видна, или эта кнопка - "звезда" в модуле fivestar, то никаких изменений кнопка не получит.
Осталось поколдовать над стилями:
span.button { background:url("images/button.png") no-repeat scroll right -36px transparent; border:medium none; cursor:pointer; display:inline-block; height:36px; margin-right:10px; padding:0 4px 0 0; } span.button input { background:url("images/button.png") no-repeat scroll left top transparent !important; border:medium none !important; color:#FFFFFF !important; cursor:pointer; display:block !important; font-size:14px !important; height:36px !important; line-height:36px !important; margin:0 !important; padding:0 10px 0 16px !important; white-space:nowrap !important; }
Именно таким образом сделаны кнопки на моём сайте. Картинка button.png состоит из двух частей :

Верхняя часть - это кнопка слева почти до самого конца, именно почти - потому что правые несколько пикселей занимает нижняя часть моей картинки, это указано у span.button смещением фона на 36 пикселей вниз.
- SplasH
- 10.09.2010
- 2865
Комментарии
Спасибо сенсей))
И этот код переопределяет вывод ВСЕХ кнопок?
незачто) да, всех))
А что делать если фон у кнопок прозрачный?
так на примере у кнопок прозрачный фон :)
Хм... А если IE 6...? Тогда всё это теряет смысл...
Упс... Ссори... Всё получается как надо и в IE 6... Просто увидел что такие кнопочки на вашем сайте открыл его в IE 6 и увидел весьма неприятную картинку...
Александр, а почему вы не посмотрели мой сайт в IE4 ?) Там наверное тоже не всё так хорошо ;) IE6 официально умер. Смысла что-то делать под него нет.
Здравствуйте,
Решил сделать Вашим способом себе меню, только у меня кнопки должны менять цвет при наведении на них. Проблема в том, что при наведении курсора на правый уголок кнопки - он цвет меняет, а левая часть нет.
Подскажите, может есть способ решить и эту проблему?
Заранее благодарен!
Комментировать