Как изменить изображение кнопки ввода с помощью CSS?


184

Итак, я могу создать кнопку ввода с изображением, используя

<INPUT type="image" src="/images/Btn.PNG" value="">

Но я не могу получить то же поведение, используя CSS. Например, я пытался

<INPUT type="image" class="myButton" value="">

где «myButton» определяется в файле CSS как

.myButton {
    background:url(/images/Btn.PNG) no-repeat;
    cursor:pointer;
    width: 200px;
    height: 100px;
    border: none;
}

Если это все, что я хотел сделать, я мог бы использовать оригинальный стиль, но я хочу изменить внешний вид кнопки при наведении курсора (используя myButton:hoverкласс). Я знаю, что ссылки хороши, потому что я смог загрузить их для фонового изображения для других частей страницы (просто для проверки). В Интернете я нашел примеры того, как сделать это с помощью JavaScript, но я ищу решение CSS.

Я использую Firefox 3.0.3, если это имеет значение.

Ответы:


118

Если вы хотите стилизовать кнопку с помощью CSS, сделайте ее кнопкой type = "submit" вместо type = "image". type = "image" ожидает SRC, который вы не можете установить в CSS.

Обратите внимание, что Safari не позволит вам стилизовать любую кнопку так, как вы ищете. Если вам нужна поддержка Safari, вам нужно разместить изображение и функцию onclick, которая отправляет форму.


1
Спасибо. Использование «отправить» вместо изображения загрузило изображение.
Baltimark

16
Safari 3 и выше позволяет стилизовать кнопки так, как вы хотите. И чтобы быть более совместимым, используйте вместо него кнопку <button>.
век

3
чтобы быть более совместимым / <кнопка> может купить вам другие проблемы совместимости.
eglasius

ребята, посмотрите ответ от SI Web Design ниже. Пожалуйста, проголосуйте, если эти ответы лучше.
Девал

112

Вы можете использовать <button>тег. Для отправки просто добавьтеtype="submit" . Затем используйте фоновое изображение, когда вы хотите, чтобы кнопка отображалась в виде графика.

Вот так:

<button type="submit" style="border: 0; background: transparent">
    <img src="/images/Btn.PNG" width="90" height="50" alt="submit" />
</button>

Дополнительная информация: http://htmldog.com/reference/htmltags/button/


21
Просто помните, что IE (5,6,7, & 8 (в нестандартном режиме) отправит .innerHTML кнопки, а не атрибут значения, который вы установили для кнопки!
scunliffe

Но граница <кнопка остается на изображении закрыта.
Би Джей Патель

@scunlife, Dimitry в аддитине, публикуя innerHtml, приводит к тому, что большинство веб-серверов не принимают опубликованные данные, так как они пахнут как инъекционная атака
Коэн

73

HTML

<div class="myButton"><INPUT type="submit" name="" value=""></div>

CSS

div.myButton input {
    background:url(/images/Btn.PNG) no-repeat;
    cursor:pointer;
    width: 200px;
    height: 100px;
    border: none;
}

Это будет работать где угодно, даже в Safari.


5
Это лучший ответ. Спасибо
Байрон Уитлок

25

Эта статья о замене изображений CSS для кнопок отправки может помочь.

«Используя этот метод, вы получите изображение, реагирующее на клики, когда таблицы стилей активны, и стандартную кнопку, когда таблицы стилей отключены. Хитрость заключается в том, чтобы применить методы замены изображений к тегу кнопки и использовать его в качестве кнопки отправки вместо используя ввод.

И поскольку границы кнопок стираются, также рекомендуется изменить курсор кнопки на курсор в форме руки, используемый для ссылок, так как это дает визуальный совет пользователям ".

Код CSS:

#replacement-1 {
  width: 100px;
  height: 55px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent url(image.gif) no-repeat center top;
  text-indent: -1000em;
  cursor: pointer; /* hand-shaped cursor */
  cursor: hand; /* for IE 5.x */
}

#replacement-2 {
  width: 100px;
  height: 55px;
  padding: 55px 0 0;
  margin: 0;
  border: 0;
  background: transparent url(image.gif) no-repeat center top;
  overflow: hidden;
  cursor: pointer; /* hand-shaped cursor */
  cursor: hand; /* for IE 5.x */
}
form>#replacement-2 { /* For non-IE browsers*/
  height: 0px;
}

Проблема этого метода в том, что, если клиент отключает изображения в своем браузере, он вообще не видит кнопки!
Скотт

13

Вот более простое решение, но без дополнительного окружения div:

<input type="submit" value="Submit">

CSS использует базовую технику замены изображений. Для бонусных очков это показывает использование спрайта изображения:

<style>
    input[type="submit"] {
        border: 0;
        background: url('sprite.png') no-repeat -40px left;
        text-indent: -9999em;
        line-height:3000;
        width: 50px;
        height: 20px;
    }
</style>

Источник: http://work.arounds.org/issue/21/using-css-sprites-with-input-type-submit-buttons/


Я бы нажал +2, если бы была кнопка для этого ответа для селектора атрибута CSS (type = "submit") и рекомендации для спрайтов
Dylan Valade

2
Я не контролирую этот сайт. Хорошо, что я поставил решение в своем ответе.
Philoye

Последняя сохраненная версия ссылки: web.archive.org/web/20140112085651/http://work.arounds.org/…
Бернхард Вагнер

3

Вот что сработало для меня в Internet Explorer, небольшая модификация решения Philoye.

>#divbutton
{
    position:relative;
    top:-64px;
    left:210px;
    background: transparent url("../../images/login_go.png") no-repeat;
    line-height:3000;
    width:33px;
    height:32px;
    border:none;
    cursor:pointer;
}

2

Вы можете использовать blank.gif (1px прозрачное изображение) в качестве цели в вашем теге

<input type="image" src="img/blank.gif" class="button"> 

а затем стиль фона в CSS:

.button {border:0;background:transparent url("../img/button.png") no-repeat 0 0;}
.button:hover {background:transparent url("../img/button-hover.png") no-repeat 0 0;}

2

Вариация на предыдущие ответы. Я обнаружил, что непрозрачность должна быть установлена, конечно, это будет работать в IE6 и далее. В IE8 была проблема с решением по высоте строки, когда кнопка не отвечала. И с этим вы получите курсор в виде руки!

<div id="myButton">
  <input id="myInputButton" type="submit" name="" value="">
</div>

#myButton {
 background: url("form_send_button.gif") no-repeat;
 width: 62px;
 height: 24px;
 }

#myInputButton { 
 background: url("form_send_button.gif") no-repeat;
 opacity: 0;
 -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
 filter: alpha(opacity=0);
 width: 67px;
 height: 26px;
 cursor: pointer;
 cursor: hand;
}

2

Я думаю, что следующее является лучшим решением:

CSS:

.edit-button {
    background-image: url(edit.png);
    background-size: 100%;
    background-repeat:no-repeat;
    width: 24px;
    height: 24px;
}

HTML:

<input class="edit-button" type="image" src="transparent.png" />

1

Мое решение без JS и без изображений заключается в следующем:

* HTML:

<input type=Submit class=continue_shopping_2 
name=Register title="Confirm Your Data!" 
value="confirm your data">

* CSS:

.continue_shopping_2:hover{
background-color:#FF9933;
text-decoration:none;
color:#FFFFFF;}


.continue_shopping_2{
padding:0 0 3px 0;
cursor:pointer;
background-color:#EC5500;
display:block;
text-align:center;
margin-top:8px;
width:174px;
height:21px;
border-radius:5px;
border-width:1px;
border-style:solid;
border-color:#919191;
font-family:Verdana;
font-size:13px;
font-style:normal;
line-height:normal;
font-weight:bold;
color:#FFFFFF;}

2
Не следует размещать случайные ссылки на ваш сайт таким образом. Я вообще не вижу «примера» этого. Если вы хотите сделать пример для показа, пожалуйста, создайте пример, который послужит примером сам по себе, а не в контексте всего живого сайта.
Эндрю Барбер

это правильно ... дело в том, что невозможно получить доступ к нужной странице напрямую ... только добавив 1 товар в корзину и перейдя к оформлению заказа.
Джон

0

Возможно, вы могли бы просто импортировать файл .js и заменить изображение там, в JavaScript.


7
Это серьезно закончилось.
Рид Ричардс

0

Давайте предположим, что вы не можете изменить тип ввода или даже src. У вас есть только CSS для игры.

Если вы знаете желаемую высоту и у вас есть URL фонового изображения, которое вы хотите использовать вместо этого, вам повезло.

Установите высоту на ноль, а отступ - на желаемую высоту. Это вытеснит исходное изображение из поля зрения, давая вам совершенно чистое пространство для показа вашего css background-image.

Работает в Chrome. Не знаю, работает ли он в IE. Едва ли что-нибудь умное делает, так что, вероятно, нет.

#daft {
  height: 0;
  padding-top: 100px;
  width: 100px;
  background-image: url(clever.jpg);
}
<input type="image" src="daft.jpg" id="daft">

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.