HTML / CSS ¿Cómo agregar un icono de imagen al tipo de entrada = "botón"?

110

Estoy usando el CSS a continuación, pero coloca una imagen en el centro del botón. ¿Alguna forma de alinear un icono hacia la izquierda o hacia la derecha usando <input type="button">, de modo que el texto y la imagen encajen y se alineen bien?

background: url('/common/assets/images/icons/16x16/add.png');
background-position:center;
background-repeat:no-repeat;
Brett
fuente

Respuestas:

143

Si es absolutamente necesario que lo use input, intente esto:

background-image: url(...);
background-repeat: no-repeat;
background-position: <left|right>;
padding-<left|right>: <width of image>px;

Por lo general, es un poco más fácil de usar buttoncon un imginterior:

<button type="submit"><img> Text</button>

Sin embargo, las implementaciones del navegador buttonpara enviar son inconsistentes, así como el hecho de que todos los valores de los botones se envían cuando buttonse utilizan, lo que elimina la detección de "qué botón hizo clic" en un formulario de envío múltiple.

Delan Azabani
fuente
no es necesario, pero aquí la etiqueta del botón tiene errores en ie 6 o se comporta de manera diferente en algunos navegadores.
Brett
Por lo que he experimentado, button(con tipo submit) funciona de manera idéntica inputcon la excepción de permitir elementos dentro (en lugar de solo estilos aplicados).
Delan Azabani
8
La parte 'defectuosa' de la <button>implementación de IE proviene del hecho de que 1) en un POST / GET, envía los 'valores' para cada botón, y no solo el que se hizo clic, y 2) En lugar de enviar el valueatributo real , IE le gusta para enviar el contenido (HTML interno) del botón. Estos hechos hacen que la <button>etiqueta no sea confiable si la acción tomada depende del botón en el que un usuario hizo clic.
Duroth
Buen punto, Duroth. Sí, eso es ciertamente un truco para cosas como un formulario de publicación de edición que tiene "Vista previa" y "Enviar", etc.
Delan Azabani
3
Puede utilizar <button>e <input type=button>indistintamente. Si no desea que <button> envíe en IE, establezca su tipo así:<button type="button">Text</button>
Darcy
74

Esto debería hacer lo que quieras, asumiendo que la imagen de tu botón es de 16 por 16 píxeles.

<input type="button" value="Add a new row" class="button-add" />
input.button-add {
    background-image: url(/images/buttons/add.png); /* 16px x 16px */
    background-color: transparent; /* make the button transparent */
    background-repeat: no-repeat;  /* make the background image appear only once */
    background-position: 0px 0px;  /* equivalent to 'top left' */
    border: none;           /* assuming we don't want any borders */
    cursor: pointer;        /* make the cursor like hovering over an <a> element */
    height: 16px;           /* make this the size of your image */
    padding-left: 16px;     /* make text start to the right of the image */
    vertical-align: middle; /* align the text vertically centered */
}

Botón de ejemplo:

botón de ejemplo

Actualizar

Si usa Less, esta combinación puede ser útil.

.icon-button(@icon-url, @icon-size: 16px, @icon-inset: 10px, @border-color: #000, @background-color: transparent) {
    height: @icon-size * 2;
    padding-left: @icon-size + @icon-inset * 2;
    padding-right: @icon-inset;
    border: 1px solid @border-color;
    background: @background-color url(@icon-url) no-repeat @icon-inset center;
    cursor: pointer;
}

input.button-add {
    .icon-button("http://placehold.it/16x16", @background-color: #ff9900);
}

Lo anterior se compila en

input.button-add {
  height: 32px;
  padding-left: 36px;
  padding-right: 10px;
  border: 1px solid #000000;
  background: #ff9900 url("http://placehold.it/16x16") no-repeat 10px center;
  cursor: pointer;
}

JSFiddle

mostrar
fuente
¿No necesitas comillas en el argumento del método url ()?
ecbrodie
10
<button type="submit" style="background-color:transparent; border-color:transparent;"> 
  <img src="images/button/masuk.png" height="35"/>
</button>
<button type="reset" style="background-color:transparent; border-color:transparent;"> 
  <img src="images/button/reset.png" height="35"/>
</button>

Espero que esto te ayude.

Ferdiyan Syah
fuente
2

Si está utilizando hojas de sprites, esto se vuelve imposible y el elemento debe estar envuelto.

.btn{
    display: inline-block;
    background: blue;
    position: relative;
    border-radius: 5px;
}
.input, .btn:after{
    color: #fff;
}
.btn:after{
    position: absolute;
    content: '@';
    right: 0;
    width: 1.3em;
    height: 1em;
}
.input{
    background: transparent;
    color: #fff;
    border: 0;
    padding-right: 20px;
    cursor: pointer;
    position: relative;
    padding: 5px 20px 5px 5px;
    z-index: 1;
}

Mira este violín: http://jsfiddle.net/AJNnZ/

Jake Cattrall
fuente
1

puedes probar este truco!

Primero) haz esto:

<label for="img">
   <input type="submit" name="submit" id="img" value="img-btn">
   <img src="yourimage.jpg" id="img">
</label>

2do) ¡Dale estilo!

<style type="text/css">
   img:hover {
       cursor: pointer;
   }
   input[type=submit] {
       display: none;
   }
</style>

¡No está limpio, pero funcionará!

voto a favor
fuente
1

Simplemente agregue el ícono en el elemento del botón aquí está el ejemplo

   <button class="social-signup facebook"> 
     <i class="fa fa-facebook-official"></i>  
      Sign up with Facebook</button>
bilal
fuente
1

puede intentar insertar la imagen dentro del botón http://jsfiddle.net/s5GVh/1415/

<button type="submit"><img src='https://aca5.accela.com/bcc/app_themesDefault/assets/gsearch_disabled.png'/></button>
Pasión Vuong
fuente
0

Lo que haría es hacer esto:

Utilice un tipo de botón

 <button type="submit" style="background-color:rgba(255,255,255,0.0); border:none;" id="resultButton" onclick="showResults();"><img src="images/search.png" /></button>

Usé background-color: rgba (255,255,255,0.0); Para que desaparezca el color de fondo original de un botón. Lo mismo con el borde: ninguno; quitará el borde original.

James111
fuente
0

Este es el estilo mínimo necesario, ajustando la imagen al tamaño de botón predeterminado:

<input type="button" value=" " style="background-image: url(http://www.geppoz.eu/geppoz.png);background-size:100% 100%;">

el valor "espaciado" es necesario para mantener la alineación de la línea de base, en caso de que lo necesite ...

Giuseppe Costanzo
fuente
0

La respuesta de sshow también lo hizo por mí:

navigation.css :

[...]

.buttonConfiguration {
    width: 40px;
    background-color: red; /* transparent; */
    border: none;
    color: white;
    padding: 5px 10px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-family: corbel;
    font-size: 12px;
    font-weight: normal;
    margin: 1px 1px;
    cursor: pointer;

    background-image: url('../images/icons5/gear_16.png');
    background-position: center; /* 0px 0px; */
    background-repeat: no-repeat;
    vertical-align: middle;
}

[...]

frameMenu.php :

[... PHP, Javascript and HTML code ...]

<!-- <li><a target="frameBody" href="admin/conf/confFunctions.php"><input type="button" class="buttonSuperAdmin" value="<?= $oLanguage->getExpression('confSettings', 'title', 'C e n t e r s') ?>"></a> -->
<li><a target="frameBody" href="admin/conf/confFunctions.php"><input type="button" class="buttonConfiguration" value=""></a>
<ul>
<li><a target="frameBody" href="admin/conf/getglobals.php "><input type="button" class="buttonSuperAdminSub" value="<?= $oLanguage->getExpression('centerSettings', 'confAdmin1', 'GetGlobals') ?>"></a></li>
<li><a target="frameBody" href="admin/conf/getcwd.php "><input type="button" class="buttonSuperAdminSub" value="<?= $oLanguage->getExpression('confSettings', 'centerAdmin2', 'GetCWD') ?>"></a></li>
</ul>
</li>

[...]

Probé esto con éxito en las últimas versiones de Firefox y Chrome (a partir del 9 de febrero de 2019).

mtjmohr
fuente
0

Lo que parece

Esto funciona bien para mí, y también estoy manejando el desplazamiento y haciendo clic en CSS (cambiando el color de fondo):

HTML (aquí se muestran 2 imágenes, image1 encima de image2):

<button class="iconButton" style="background-image: url('image1.png'), url('image2.png')"
  onclick="alert('clicked');"></button>

CSS (mis imágenes son 32px X 32px, así que les di 4px para el relleno y un borde redondeado de 5px):

.iconButton {
    width: 36px;
    height: 36px;
    background-color: #000000;
    background-position: center;
    background-repeat: no-repeat;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    outline: none;
}

.iconButton:hover {
    background-color: #303030;
}

.iconButton:active {
    background-color: #606060;
}

button::-moz-focus-inner {
    border: 0;
}
Andrés
fuente
-2
<img src="http://www.pic4ever.com/images/2mpe5id.gif">
            <button class="btn btn-<?php echo $settings["button_background"]; ?>" type="submit"><?php echo $settings["submit_button_text"]; ?></button>
Peter Steadham
fuente
por favor agregue una explicación a su respuesta.
warunapww
Necesita un ">" para cerrar la etiqueta img.
harrypujols
1
¿Por qué estás usando PHP?
Top Cat