如何在不更改HTML的情况下在同一行上对齐两个元素

时间:2012-01-30 17:17:16

标签: html css css-float margin

我在同一条线上有两个元素,它们向左浮动并向右浮动。

<style type="text/css">
#element1 {float:left;}
#element2 {float:right;}
</style>

<div id="element1">
 element 1 markup
</div>
<div id="element2">
 element 2 markup
</div>

我需要element2在element1旁边排队,两者之间有大约10个像素的填充。问题是element2的宽度可以根据内容和浏览器(字体大小等)而改变,因此它并不总是与element1完美排列(我不能只应用边距并将其移动)。

我也无法更改标记。

是否有统一的方法排列它们?我尝试了一个百分比的margin-right,我在element1上尝试了一个负余量,使element2更接近(但无法让它工作)。

7 个答案:

答案 0 :(得分:135)

使用display:inline-block

#element1 {display:inline-block;margin-right:10px;} 
#element2 {display:inline-block;} 

<强> Example

答案 1 :(得分:17)

#element1 {float:left;}
#element2 {padding-left : 20px; float:left;}

小提琴:http://jsfiddle.net/sKqZJ/

#element1 {float:left;}
#element2 {margin-left : 20px;float:left;}

小提琴:http://jsfiddle.net/sKqZJ/1/

#element1 {padding-right : 20px; float:left;}
#element2 {float:left;}

小提琴:http://jsfiddle.net/sKqZJ/2/

#element1 {margin-right : 20px; float:left;}
#element2 {float:left;}

小提琴:http://jsfiddle.net/sKqZJ/3/

参考:The Difference Between CSS Margins and Padding

答案 2 :(得分:8)

<style>
div {
    display: flex;
    justify-content: space-between;  
}
</style>

<div>
    <p>Item one</p>
    <a>Item two</a>
</div>  

答案 3 :(得分:5)

使用 display:inline-block; 更常见的是,如果您有父级(除了html之外总是有父级),请使用display: inline-block;作为内部元素。并且即使窗户收缩(收缩)也要强迫它们保持在同一条线上。为父级添加两个属性:

    white-space: nowrap;
    overflow-x: auto;

这是一个更加格式化的示例,以明确说明:

.parent {
    white-space: nowrap;
    overflow-x: auto;
}

.children {
   display: inline-block;
   margin-left: 20px; 
}

特别是对于这个例子,你可以将上面作为伙伴应用(我假设父亲是身体。如果不是你放右父母),你也可以改变html并为他们添加父母,如果可能的话

body { /*body may pose problem depend on you context, there is no better then have a specific parent*/
        white-space: nowrap;
        overflow-x: auto;
 }

#element1, #element2{ /*you can like put each one separately, if the margin for the first element is not wanted*/
   display: inline-block;
   margin-left: 10px; 
}

请注意,white-space: nowrap;overlow-x: auto;是您迫使他们在一行中所需要的。白色空间:nowrap;禁用包装。 overlow-x:auto;当元素超过帧限制时激活滚动。

答案 4 :(得分:3)

在我使用像这样的浮动元素的情况下,我通常需要确保容器元素总是足够大,以便两个浮动元素的宽度加上所有适合它的所需边距。最简单的方法显然是给两个内部元素固定宽度,使其正确适合外部元素的内部,如下所示:

#container {width: 960px;}
#element1  {float:left; width:745px; margin-right:15px;}
#element2  {float:right; width:200px;}

如果你不能这样做,因为这是一个缩放宽度布局,另一个选择是让每组维度都是百分比,如:

#element1 {float:left; width:70%; margin-right:10%}
#element2 {float:right; width:20%;}

在你需要这样的东西时,这很棘手:

#element1 {float:left; width:70%; margin-right:10%}
#element2 {float:right; width:200px;}

在这种情况下,我发现有时最好的选择是不使用浮点数,并使用相对/绝对定位来获得相同的效果:

#container {position:relative;} /* So IE won't bork the absolute positioning of #element2 */
#element1 {margin-right:215px;}
#element2 {display: block; position:absolute; top:0; right:0; height:100%; width:200px;}

虽然这不是一个浮动的解决方案,但它确实会产生并排的列,它们的高度相同,一个可以保持流畅,而另一个具有静态宽度。

答案 5 :(得分:2)

按以下方式更改您的CSS

#element1 {float:left;margin-right:10px;} 
#element2 {float:left;} 

这是JSFiddle http://jsfiddle.net/a4aME/

答案 6 :(得分:0)

这是我用于与您类似的用例类型的内容。

<style type="text/css">
#element1 {display:inline-block; width:45%; padding:10px}
#element2 {display:inline-block; width:45%; padding:10px}
</style>

<div id="element1">
 element 1 markup
</div>
<div id="element2">
 element 2 markup
</div>

根据需要调整宽度和填充。 注意-添加“填充”时,“宽度”的总和不要超过100%(ele1_width + ele2_width),并使其小于100%。