2015-06-17 8 views
7

Das klingt vielleicht nach einer einfachen Lösung, aber lassen Sie es mich im Detail erklären.Center-align background-image einer Eingangstaste

Ich habe eine <input type="submit"/> Schaltfläche und ich versuche, den Pfeil auf der rechten Seite der Schaltfläche Text auszurichten (die bereits zentriert ausgerichtet ist).

Hier ist die Geige: http://jsfiddle.net/s6rrzsa4/4/ submit button

Nun zu den Fragen kommen:

  1. Ich kann den <input> einen <button> Tag ändern, da es von einem CMS) kommt.
  2. Der Schaltflächentext kann alles sein, was bedeutet, dass ich den Pfeil Bild mit einem Offset (gleich der Breite des Textes) nicht zuschneiden und background-position: center verwenden kann.
  3. kann ich nicht hinzufügen: nach Pseudo-Element für das Elternteil div, da es den Pfeil Bereich unclickable macht.
  4. Wie ich schon sagte der Button Text kann sich ändern. Daher kann ich keine Prozentsätze für die Hintergrundposition verwenden.
  5. Die Schaltfläche hat eine feste Breite (leider vergessen, diesen Punkt hinzuzufügen).
+3

Natürlich können Sie die Eingabe auf eine Schaltfläche ändern, mit jQuery es ist ziemlich einfach. – odedta

+0

Was ist los mit der Lösung, die Sie auf jsfiddle gepostet haben? – odedta

+4

können Sie einfach '' 'Zeichen am Ende des Textes setzen? –

Antwort

3

@felix Lösung ist gut. Aber es hat den Nachteil, dass das Span-Element an den Körper angehängt wird, um die Breite des Textes zu berechnen. Wir können Canvas verwenden, um die Breite des Textes zu berechnen, aber es wird nicht an DOM angehängt.

http://jsfiddle.net/s6rrzsa4/16/

var elem = $('input'), 
    cs = window.getComputedStyle(elem[0]), 
    context = document.createElement("canvas").getContext("2d"), 
    metrics, pos; 

    context.font = cs.fontSize + " " + cs.fontFamily; 

    metrics = context.measureText(elem[0].value.toUpperCase()), 
    pos = (elem.width() - metrics.width)/2 + 20; 

    elem.css('background-position','calc(100% - '+pos+'px) center'); 
+1

Dank Praveen, das einzige Problem jetzt, ist mit Firefox und das ist behoben, wenn die 'Hintergrund-Position-x', 'calc (100% -' + Pos + 'px)' durch 'Hintergrund-Position', 'calc (100% - '+ Pos +' px) Mitte '; – gopalraju

0

1) können Sie: nach pseudo mit Stil pointer-events: none; aber es ist nicht in IE unterstützt http://caniuse.com/#feat=pointer-events

2) am Ende der Schnur > Zeichen setzen

+0

Aber er sagte * "Ich kann nicht hinzufügen: nach Pseudo-Element für die Eltern-Div, da es den Pfeil Bereich unclickable macht." * Was bedeutet, er will das klick-fähig sein, richtig? –

+0

Ich glaube, Sie können nicht einmal hinzufügen: nach Pseudo-Elemente zu "Eingabe" -Elementen. – light

+0

@light 'Ich kann nicht hinzufügen: nach Pseudo-Element für das Elternteil '* div * Ich weiß nicht, wie seine Struktur aussieht, aber wenn anklickbare Fläche ein Problem ist, sage ich - es ist nicht –

4

Für die Textlänge zu finden, verwendet ein Dummy span und benutzte etwas Javascript, um die background-position-x zu berechnen.

var a = $("input").outerWidth(); 

var s = $('<span class="dummy" />').html($("input").attr('value')); 

s.appendTo('body'); 

var b = s.outerWidth(); 

var pos = b + (a-b)/2; 

$("input").css({ 
    'background-position': pos +'px center' 
}); 

s.remove(); 

Bitte überprüfen Sie die Geige - http://jsfiddle.net/afelixj/s6rrzsa4/9/

+0

Die beste Lösung bisher ... Vielen Dank! – gopalraju

0

Es klingt wie Sie in Ihrer Wahl von „schön“ Lösungen ziemlich begrenzt sind.

Der einfachste Weg, ich denke, kann dies in Ihrer Situation zu tun ist, eine Liste aller Text Möglichkeit Ihre Schaltfläche Wert zu erhalten und die CSS mit dem Zielwert:

div input[value="Anything"] { 
    background-position: 200px 30px; 
} 

Hier ist die aktualisierte Fiddle: http://jsfiddle.net/s6rrzsa4/8/

Verwandte Themen