【问题标题】:CSS display:inline with margin vs position:relativeCSS显示:内联与边距vs位置:相对
【发布时间】:2015-10-21 14:29:44
【问题描述】:

在我的标题中,我希望在左侧的徽标和右侧的购物车图像之间简单地放置一个电话号码。所以水平内容的 3 个 div。

为此,我使用了一个带有 display:inline-block 的 div 和一个 100px 的徽标后边距。我不得不在 CSS 中添加一个@media,以便在它移动时稍微整理一下,因为大边距会稍微扔掉它。

我想知道使用 position:relative 和某些维度是否可以更轻松地完成相同的操作,这也意味着我不必添加太多 @media,因为边距不会将其丢弃。

那么对齐和定位水平内容 - Position or Margin/Display?

<div class="logo">
  <img src="mylogo.png">
  <div class="phonenumber">0111 111 111</div>
</div>

.phone{
  margin-left: 100px;
  font-size:26px;
  display:inline-block;
  vertical-align: middle;
}

【问题讨论】:

  • 我认为保证金是第一选择,相对是最后选择。
  • 弹性盒子布局可能更容易得到你想要的。

标签: html css


【解决方案1】:

我不知道100px margin 是否是强制性的,但您可以使用columns 解决这个问题。在我的示例中,每个column 占用row33.3% width,并且在左侧是floated。我还确保clear floats 以保持页面其余部分的正确布局。我制作的text-align 属性只是为了更好看。

.row:after {
  clear:both;
  content: '';
  display: table;
}

.column {
  float: left;
  width: 33.3%;
}

.phonenumber {
  text-align: center;
}

.cart {
  text-align: right;
}
<div class="row">
  <div class="column logo"><img src="mylogo.png"></div>
  <div class="column phonenumber">0111 111 111</div>
  <div class="column cart">blabla</div>
</div>

关于使用媒体查询,我个人倾向于坚持最常见的宽度并保持不变。

// Mobile
@media (max-width: 767px) {}
// Tablet portrait (iPad based)
@media (min-width: 768px) and (max-width: 991px) {}
// Tablet landscape (iPad based)
@media (min-width: 992px) and (max-width: 1024px) {}
// Desktop
@media (min-width: 1025px) {}

【讨论】:

  • 如果你有一个大的标志并去移动,它如何影响 33% 宽度的展示位置。
  • 为什么在使用表格布局时浮动?只需将table-cell 用于个人divs。
  • 在我的示例中,徽标永远不会大于33.3%,即使在移动设备上也是如此。在这种情况下,您将使用我添加的移动媒体查询并将它们的宽度设置为 100%。喜欢:jsfiddle.net/e1L1gozm/2
  • @Abhitalks 为什么可以浮动时使用表格单元格?我的意思是,它们只是解决同一问题的不同方法。
  • 啊.. @SteynvanEsveld,我匆忙误读了您的代码,我以为您使用的是表格布局,而实际上您只是在清除浮动。
【解决方案2】:

您可以只使用表格布局。

display: table 上的 rowdisplay: table-cell 上的 columns,就是这样。无需干预边距、宽度和浮动。只要您的徽标和文字不太大,就会自动响应。否则只需添加一个媒体查询来处理它。

小提琴:http://jsfiddle.net/abhitalks/hu6o5jv4/1/

片段

.row { display: table; width: 100%; margin-top: 32px; }
.column { display: table-cell; vertical-align: middle; }
.phonenumber { text-align: center; }
.cart { text-align: right; }
<div class="row">
  <div class="column logo"><img src="//placehold.it/72x48?text=logo"></div>
  <div class="column phonenumber">0111 111 111</div>
  <div class="column cart"><img src="//placehold.it/72x48?text=cart"></div>
</div>

【讨论】:

  • 如果在引导站点上使用,将使用“行”与引导使用行冲突。或者我们会用 Bootstrap 语法重写它吗?我正在使用的网站使用 Bootstrap,但不在标题中
  • (1) 如果您使用的是 Bootstrap,您应该在问题中指定!这改变了一切。 (2) 我无法理解我正在使用的语句使用 Bootstrap,但不在标题中 - 你怎么能不在标题中使用 Bootstrap 而在页面的其余部分使用它? (3) 如果您确定您的标题没有使用 Bootstrappy 样式,那么只需为该类使用另一个名称,而不是 row
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 2015-02-25
  • 2013-02-24
  • 2011-07-12
  • 2011-06-29
  • 2010-12-22
  • 2012-02-29
  • 2015-04-10
相关资源
最近更新 更多