如何正确对齐div元素?

MEU*_*ULT 297 css html5

我的html文档的主体由3个元素组成,一个按钮,一个表单和一个画布.我希望按钮和窗体右对齐,画布保持左对齐.问题是,当我尝试对齐前两个元素时,它们不再相互跟随而是水平相邻?继承了我到目前为止的代码,我希望表单在右边的按钮之后直接跟随两者之间没有空间.

#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;
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
  <script type="text/javascript" src="timeline.js"></script>
  <link rel="stylesheet" href="master.css" type="text/css" media="screen" />
</head>

<body bgcolor="000" TEXT="FFFFFF">
  <div id="button">
    <button onclick="showForm()" type="button" id="cTask">
        Create Task
    </button>
  </div>
  <div id="addEventForm">
    <form>
      <p><label>Customer name: <input></label></p>
      <p><label>Telephone: <input type=tel></label></p>
      <p><label>E-mail address: <input type=email></label></p>
    </form>
  </div>
  <div>
    <canvas id="myBoard" width="1000" height="600">
      <p>Your browser doesn't support canvas.</p>
    </canvas>
  </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

pst*_*ton 419

花车是好的,但ie6和7有问题.

我更喜欢margin-left:auto; margin-right:0;在内部div上使用.

  • 退出该单元允许浏览器跳过某些计算,从而提高性能.如果它为零,为什么要浪费资源来计算基于单元的布局?无论单位是零,零都是零...人们会认为这种逻辑现在已经内置到浏览器中.[链接](http://twoopz.tumblr.com/post/7021586127/css3-improve-performance-with-best-practices) (25认同)
  • 我不能让这个工作,div仍然左对齐.你能提供一个小提琴或一些(更多)行的HTML/CSS吗? (22认同)
  • 确保你的元素有`display:block;` (19认同)
  • @ShellNinja为什么?我知道'0'是有效的,但是0px也是如此...争辩你的观点,所以我们学到了一些东西. (6认同)
  • 不能不同意,但我怀疑它对性能的影响很大.编辑. (6认同)
  • 这不适用于内联块元素 (4认同)
  • 完美解决方案 比漂浮更好,因为它保留了高度 (3认同)
  • 这要求内部元件是块并具有固定的宽度. (3认同)
  • 不应在0个值中使用px。 (2认同)

van*_*con 274

您可以创建一个包含表单和按钮的div,然后通过设置使div浮动到右侧float: right;.

  • 从没想过我会使用浮动。我尝试了 `margin-left: auto;` 但这并没有奏效,这让我感到惊讶,因为我试图向右对齐的元素是相对的。 (4认同)
  • @DFSFOT 我的情况正好相反。预期 float:right 可以工作,但 margin-left: auto 成功了,谢谢。 (3认同)
  • 这对我的情况没有影响,`style =“margin-left:auto;margin-right:0;” ` 但确实如此(归功于@pstanton)。 (2认同)

Mic*_*she 151

老答案.更新:使用flexbox,现在几乎适用于所有浏览器.

<div style="display: flex; justify-content: flex-end">
  <div>I'm on the right</div>
</div>
Run Code Online (Sandbox Code Playgroud)

你可以变得更加漂亮,简单地说:

<div style="display: flex; justify-content: space-around">
  <div>Left</div>
  <div>Right</div>
</div>
Run Code Online (Sandbox Code Playgroud)

和发烧友:

<div style="display: flex; justify-content: space-around">
   <div>Left</div>
   <div>Middle</div>
  <div>Right</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 您需要添加媒体查询以在您定义的断点处从行更改弹性方向.您可能希望在此示例中更改或删除您的对齐内容,否则事物将向上和向下拉伸而不是向左和向右. (5认同)
  • 它可以工作,但是当屏幕变小而不是堆叠时,它们会变得非常狭窄 (4认同)

Mla*_*vic 28

这个问题的其他答案并不是那么好,因为float:right可以超出父div(溢出:隐藏为父有时可能会有帮助),margin-left: auto, margin-right: 0对我来说,在复杂的嵌套div中不起作用(我没有调查原因).

我已经发现,对于某些元素text-align: right有效,假设当元素和父元素都是inline或时,它可以工作inline-block.

注意:text-alignCSS属性描述了像文本这样的内联内容如何在其父块元素中对齐.text-align不控制块元素本身的对齐,只控制它们的内联内容.

一个例子:

<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>
Run Code Online (Sandbox Code Playgroud)

这是一个JS小提琴.


Jos*_*kle 17

你的意思是这样的吗?http://jsfiddle.net/6PyrK/1

您可以添加的属性float:right,并clear:both;以表格和按钮


小智 11

如果您有多个div要在父div的右端并排排列,请在父div上设置text-align: right;.


rnw*_*ser 11

有时 float: left 会导致设计问题,在这种情况下,您可以像这样使用 display flex :

.right {
  display: flex;
  justify-content: flex-end;
  margin-left: auto;
  margin-right: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <div class="right">Right</div>
</div>
Run Code Online (Sandbox Code Playgroud)


Arm*_* B. 7

也许只是:

  margin: auto 0 auto auto;
Run Code Online (Sandbox Code Playgroud)

  • 为什么投反对票?它就像魅力一样起作用。谢啦 (2认同)

Mei*_*yan 6

简单的答案在这里:

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


Ali*_*ari 6

一种方法是为那些需要向右拉动的元素设置一个父 div (float: right ;),然后按照下面示例中所示的方式执行其余操作,使它们右对齐:

.parent-div {
  display: flex;
  float: right;
  background: yellow;
  padding: 10px;
}


/*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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="">CANVAS div </div>
<div class="parent-div">
  <div class="child-div">child 1</div>
  <div class="child-div">child 2</div>
  <div class="child-div">...</div>
  <div class="child-div">child n</div>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用flexboxwith flex-grow将最后一个元素推到右侧。

<div style="display: flex;">
  <div style="flex-grow: 1;">Left</div>
  <div>Right</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 我个人认为这是 2020 年的正确答案:P (4认同)