Umieść przycisk wyrównany do prawej

225

Używam tego kodu, aby wyrównać przycisk do prawej.

<p align="right">
  <input type="button" value="Click Me" />
</p>

Ale <p>tagi marnują trochę miejsca, więc chcę zrobić to samo z <span>lub <div>.

Sourav
źródło
11
alignAtrybut jest przestarzałe w HTML 4.01 i nieobsługiwane w HTML5, użyć CSS text-alignzamiast osiągnąć ten sam efekt.
Ten Brazylijczyk

Odpowiedzi:

414

Wybór techniki dopasowania zależy od okoliczności, ale podstawowa to float: right;:

<input type="button" value="Click Me" style="float: right;">

Prawdopodobnie będziesz chciał wyczyścić zmiennoprzecinkowe, ale można to zrobić za overflow:hiddenpomocą kontenera nadrzędnego lub jawnego <div style="clear: both;"></div>na dole kontenera.

Na przykład: http://jsfiddle.net/ambiguous/8UvVg/

Elementy pływające są usuwane z normalnego przepływu dokumentów, aby mogły przepełnić granicę rodzica i zepsuć wysokość rodzica, clear:bothCSS dba o to (jak to robi overflow:hidden). Zapoznaj się z przykładem JSFiddle, który dodałem, aby zobaczyć, jak zachowują się ruchy pływające i kasowanie ( overflow:hiddenpierwszy z nich chcesz jednak usunąć ).

mu jest za krótki
źródło
35

Inną możliwością jest zastosowanie bezwzględnego pozycjonowania zorientowanego w prawo:

<input type="button" value="Click Me" style="position: absolute; right: 0;">

Oto przykład: https://jsfiddle.net/a2Ld1xse/

To rozwiązanie ma swoje wady, ale są przypadki użycia, w których jest bardzo przydatne.

Günther Jena
źródło
Jeśli dodasz pozycję: względem elementu nadrzędnego, zadziała dobrze!
DHRUV GAJWA
22

Jeśli przycisk jest jedynym elementna block:

.border {
  border: 2px blue dashed;
}

.mr-0 {
  margin-right: 0;
}
.ml-auto {
  margin-left:auto;
}
.d-block {
  display:block;
}
<p class="border">
  <input type="button" class="d-block mr-0 ml-auto" value="The Button">
</p>

Jeśli są inne elements na block:

.border {
  border: 2px indigo dashed;
}

.d-table {
  display:table;
}

.d-table-cell {
  display:table-cell;
}

.w-100 {
  width: 100%;
}

.tar {
  text-align: right;
}
<div class="border d-table w-100">
  <p class="d-table-cell">The paragraph.....lorem ipsum...etc.</p>
  <div class="d-table-cell tar">
    <button >The Button</button>
  </div>
</div>

Z flex-box:

.flex-box {
  display:flex;
  justify-content:space-between;
  outline: 2px dashed blue;
}

.flex-box-2 {
  display:flex;
  justify-content: flex-end;
  outline: 2px deeppink dashed;
}
<h1>Button with Text</h1>
<div class="flex-box">
<p>Once upon a time in a ...</p>
<button>Read More...</button>
</div>

<h1>Only Button</h1>
<div class="flex-box-2">
  <button>The Button</button>
</div>

<h1>Multiple Buttons</h1>
<div class="flex-box-2">
  <button>Button 1</button>
  <button>Button 2</button>
</div>

Powodzenia...

Akash
źródło
1
To margin-left:autojest świetne! To !importantnajgorsze, spowoduje problemy w przyszłości.
Tom Brito
Cześć @TomBrito, zaktualizowałem odpowiedź za pomocą display: flex;. Dba o wszystko.
Akash
1
ta odpowiedź jest lepsza niż się jej
przyznaje
11

To rozwiązanie zależy od Bootstrap 3, jak wskazał @ günther-jena

Spróbować <a class="btn text-right">Call to Action</a>. W ten sposób nie potrzebujesz dodatkowych znaczników ani reguł, aby usunąć elementy pływające.

ranieribt
źródło
1
przepraszam korekta, działa to tylko wtedy, gdy umieścisz „text-right” w kontenerze nadrzędnym dla tagu anchor.
Jonathan Laliberte,
8

nowoczesne podejście w 2019 roku za pomocą Flex-Box

z tagiem div

<div style="display:flex; justify-content:flex-end; width:100%; padding:0;">
    <input type="button" value="Click Me"/>
</div>

z przęsła znacznika

<span style="display:flex; justify-content:flex-end; width:100%; padding:0;">
    <input type="button" value="Click Me"/>
</span>

Dream Hunter - hashADH
źródło
5

Inną możliwością jest użycie bezwzględnego pozycjonowania zorientowanego z prawej strony. Możesz to zrobić w ten sposób:

style="position: absolute; right: 0;"
Irshad
źródło
2
Jasne, ale jeśli jest rodzic div, to zdecydowanie zignoruje jego ograniczenia.
Hassan Baig
5

Nie zawsze jest to takie proste i czasami wyrównanie musi być zdefiniowane w kontenerze, a nie w samym elemencie Button!

W twoim przypadku rozwiązaniem byłoby

<div style="text-align:right; width:100%; padding:0;">
    <input type="button" value="Click Me"/>
</div>

Zadbałem width=100%o to, aby upewnić się, że <div>zajmiesz pełną szerokość jego pojemnika.

Dodałem również, padding:0aby uniknąć przed i po spacji, jak w przypadku <p>elementu.

Mogę powiedzieć, że jeśli <div>jest zdefiniowane w stopce tabeli FSF / Primefaces, float:rightnie działają one poprawnie, ponieważ wysokość przycisku będzie wyższa niż wysokość stopki!

W tej sytuacji Primefaces jedynym dopuszczalnym rozwiązaniem jest użycie text-align:rightw kontenerze.

Dzięki temu rozwiązaniu, jeśli masz 6 przycisków do wyrównania po prawej stronie, musisz tylko określić to wyrównanie w kontenerze :-)

<div style="text-align:right; width:100%; padding:0;">
    <input type="button" value="Click Me 1"/>
    <input type="button" value="Click Me 2"/>
    <input type="button" value="Click Me 3"/>
    <input type="button" value="Click Me 4"/>
    <input type="button" value="Click Me 5"/>
    <input type="button" value="Click Me 6"/>
</div>
schlebe
źródło
3

Aby utrzymać przycisk w przepływie strony:

<input type="button" value="Click Me" style="margin-left: auto; display: block;" />

(umieść ten styl w pliku .css, nie używaj tego kodu HTML w celu lepszej konserwacji)

Tom Brito
źródło
0

To by to rozwiązało.

<input type="button" value="Text Here..." style="float: right;">

Powodzenia w kodzie!

Riley Jones
źródło
3
To jest kopia odpowiedzi na najlepszy wynik
Günther Jena
0

W moim przypadku

<p align="right"/>

działało dobrze

Ruben
źródło
1
To nie jest odpowiedź. Atrybut align jest przestarzały w HTML 4.01 i nie jest obsługiwany w HTML5, zamiast tego użyj CSS wyrównania tekstu, aby osiągnąć ten sam efekt
Sfili_81,
0
<div style = "display: flex; justify-content: flex-end">
    <button>Click me!</button>
</div>
Phan Kosal
źródło
Przydałby się nieco więcej kontekstu dla twojej odpowiedzi.
David Clarke