ChatGPT解决这个技术问题 Extra ChatGPT

How do I right align div elements?

The body of my html document consists of 3 elements, a button, a form, and a canvas. I want the button and the form to be right aligned and the canvas to stay left aligned. The problem is when I try to align the first two elements, they no longer follow each other and instead are next to each other horizontally?, heres the code I have so far, I want the form to follow directly after the button on the right with no space in between.

#cTask { background-color: lightgreen; } #button { position: relative; float: right; } #addEventForm { position: relative; float: right; border: 2px solid #003B62; font-family: verdana; background-color: #B5CFE0; padding-left: 10px; }

Your browser doesn't support canvas.


p
pstanton

Floats are okay, but problematic with IE 6 & 7. I'd prefer using the following on the inner div:

margin-left: auto; 
margin-right: 0;

See the IE Double Margin Bug for clarification on why.


@ShellNinja why? i know 0 is valid, however so is 0px... argue your point so we learn something.
Leaving out the unit allows the browser to skip certain calculations on render this improving performance. If it's zero why waste the resources computing the layout based on a unit? Zero is zero regardless of unit... One would think this logic would be built into browsers by now. link
can't disagree but i doubt it impacts performance much. edit.
I can't get this to work, the div still aligns left. Could you provide a fiddle or some (more) lines of html/css?
Make sure your element has display: block;
M
Mariusz Jamro

You can make a div that contains both the form & the button, then make the div float to the right by setting float: right;.


Never thought I'd be using float. I tried margin-left: auto; but that didn't work which surprised me because the element I'm trying to align to the right is relative.
@DFSFOT The opposite happened to me. Expected float:right to work but margin-left: auto did the trick, thanks.
This didn't have an effect in my case, the style="margin-left: auto;margin-right: 0;" did though (credits to @pstanton).
what does "float: right" equals to?
@AndreasL. 's solution worked like charm
M
Michael Bushe

Old answers. An update: use flexbox, pretty much works in all browsers now.

I'm on the right

And you can get even fancier, simply:

Left
Right

And fancier:

Left
Middle
Right


it works, but when screen gets small instead of stacking they just get really narrow
You need to add a media query to change flex-direction from row to column at the breaking point you define. You will likely want to change or remove your justify-content in this example otherwise things will stretch up and down instead of left and right.
Works for me, but I also added (in the first example) a float: right, so the paragraph on the right does not mess the lines in the left.
This should be the approved answer.
j
jzilg

You can use flexbox with flex-grow to push the last element to the right.

<div style="display: flex;">
  <div style="flex-grow: 1;">Left</div>
  <div>Right</div>
</div>

I personally feel this is the correct answer for 2020 :P
A
Alex

Other answers for this question are not so good since float:right can go outside of a parent div (overflow: hidden for parent sometimes might help) and margin-left: auto, margin-right: 0 for me didn't work in complex nested divs (I didn't investigate why).

I've figured out that for certain elements text-align: right works, assuming this works when the element and parent are both inline or inline-block.

Note: the text-align CSS property describes how inline content like text is aligned in its parent block element. text-align does not control the alignment of block elements itself, only their inline content.

An example:

<div style="display: block; width: 80%; min-width: 400px; background-color: #caa;">
    <div style="display: block; width: 100%">
        I'm parent
    </div>
    <div style="display: inline-block; text-align: right; width: 100%">
        Caption for parent
    </div>
</div>

Here's a JS Fiddle.


This worked for me for aligning 3 images to the right with
tags in between them.
To be clear: this doesn't right-align the div itself. Each of the two child divs "parent/caption" occupy the full width of the screen, as you can see by setting their background-color. What you've done is align the text within them.
M
Magsafe

If you have multiple divs that you want aligned side by side at the right end of the parent div, set text-align: right; on the parent div.


H
Hanna

Do you mean like this? http://jsfiddle.net/6PyrK/1

You can add the attributes of float:right and clear:both; to the form and button


A
Armer B.

Maybe just:

  margin: auto 0 auto auto;

@SoniSol Which link?
M
MeirDayan

Simple answer is here:

<div style="text-align: right;">
    anything:
    <select id="locality-dropdown" name="locality" class="cls" style="width: 200px; height: 28px; overflow:auto;">
    </select>
</div>

A
Ali Safari

One way could be setting a parent div for those elements that need to be pulled right and do the rest like the way shown in the the example below to have them right-aligned:

.parent-div { display: flex; float: right; } /*Below: child-div styling is not needed for this purpose! this is just for demonstration:*/ .child-div { text-align: center; background-color: powderblue; margin: auto 10px; height: 100px; width: 50px; }

CANVAS div
child 1
child 2
...
child n


B
Bates550

If you don't have to support IE9 and below you can use flexbox to solve this: codepen

There's also a few bugs with IE10 and 11 (flexbox support), but they are not present in this example

You can vertically align the <button> and the <form> by wrapping them in a container with flex-direction: column. The source order of the elements will be the order in which they're displayed from top to bottom so I reordered them.

You can then horizontally align the form & button container with the canvas by wrapping them in a container with flex-direction: row. Again the source order of the elements will be the order in which they're displayed from left to right so I reordered them.

Also, this would require that you remove all position and float style rules from the code linked in the question.

Here's a trimmed down version of the HTML in the codepen linked above.

<div id="mainContainer">
  <div>
    <canvas></canvas>
  </div>
  <div id="formContainer">
    <div id="addEventForm"> 
      <form></form>
    </div>
    <div id="button">
      <button></button>
    </div>
  </div>
</div>

And here is the relevant CSS

#mainContainer {
  display: flex;
  flex-direction: row;
} 

#formContainer {
  display: flex;
  flex-direction: column;
}

a
anil shrestha

If you are using bootstrap, then:

<div class="pull-right"></div>

I think you meant <div class="text-right"></div>.
anil isn't wrong, class "pull-right" results in "float: right;" (tested with Bootstrap 3.4.1)
J
Jevon
display: flex;
justify-content: space-between;

hasnt been mentioned. if there are 2 elements (even if one is an empty div) it will place one on the left and one on the right.

I'm on the right


If I am correct. You can also change to justify-content: end; so you won't need the emptyDiv element.
yes flex end has been stated in another answer, however no answer has mentioned this method. the advantage of this method is that if you want to add any more elements it wont effect the position of the "im on the right" div as long as it is the final child of its parent and also provided there is enough space in the row.
t
titleLogin

Sometimes float: left leads to design problems, for that cases you can use display flex like this:

.right { display: flex; justify-content: flex-end; margin-left: auto; margin-right: 0; }

Right


L
Leevansha

You can simply use padding-left:60% (for ex) to align your content to right and simultaneously wrap the content in responsive container (I required navbar in my case) to ensure it works in all examples.


N
Nhok V

You can do it easy by just add this css: (Works in IE11)

Right


This doesn't work unless you know the exact width of each element you are right-aligning. Extremely fragile solution to the point of impracticality.
M
McGarnagle

I know this is an old post but couldn't you just use <div id=xyz align="right"> for right.

You can just replace right with left, center and justify.

Worked on my site:)


Please don't use HTML attributes to format your page. That's what CSS was made for. In fact, the align attribute is now deprecated.
...and hence the reason for a question like this and the need for it to be answered, since old methods no longer work.
ohohoh, so much negative))