Як змінити зображення кнопки введення за допомогою 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
Дякую. Використовуючи "подати" замість зображення, завантажено зображення.
Балтимарк

16
Safari 3 і новіші версії дозволяють створювати стилі кнопок, як вам завгодно. А щоб бути більш сумісним, використовуйте натомість <кнопку>.
безпліддя

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

хлопці, перевірте відповідь веб-дизайну SI нижче. будь ласка, проголосуйте, якщо відповідь краще.
deval

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

Але межа кнопки <Залишається inf зображення закрита.
BJ Patel

@scunlife, Дімітрі в додатковому розміщенні InternalHtml змушує більшість веб-серверів не приймати опубліковані дані, оскільки це пахне як ін'єкційна атака
Коен

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

Ось більш просте рішення, але без зайвих навколишніх ділів:

<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 (тип = "подати") та рекомендації для спрайтів була кнопка для цієї відповіді
Ділан Валаде,

2
Я не контролюю цей сайт. Добре, що я поставив рішення у своїй відповіді.
філой

Остання збережена версія посилання: web.archive.org/web/20140112085651/http://work.arounds.org/…
Bernhard Wagner

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 (прозоре зображення в розмірі 1 пікселя) як ціль у своєму тезі

<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.

Працює в 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.