【问题标题】:how to horizontally center-crop div inside other div如何在其他 div 中水平居中裁剪 div
【发布时间】:2013-07-02 16:12:53
【问题描述】:

尝试在另一个 div 中水平居中并裁剪(如有必要)一个 div。

使用背景图片也可以达到同样的效果,但在这种情况下,我的内容不是单个图片。

小提琴:http://jsfiddle.net/7aMhY/1/

HTML:

<div class="poster_container">
  <div class="poster_row">
    <div class="poster" style="width: 210px;">1</div>
    <div class="poster" style="width: 210px;">2</div>
    <div class="poster" style="width: 210px;">3</div>
    <div class="poster" style="width: 210px;">4</div>
    <div class="poster" style="width: 210px;">5</div>
  </div>
</div>

CSS:

.poster_container {
  text-align: center;
  border: dotted;
  border-color: red;
  background-color: #0ff;
  margin: auto;
  overflow:hidden;
}
.poster_row {
  text-align: center;
  margin: auto;
  display: inline-block;
  white-space:nowrap;
  oveterflow:hidden;
  border: dotted;
  border-color: blue;
  max-width: 100%;
}
.poster {
  border: dotted;
  display: inline-block;
  border-color: green;
  background-color: green;
  height: 315px;
  font-size:280px;
  color: white;
}

只要 poster_container div 比 poster_row div 宽,内容就会居中。但是一旦 poster_row 变宽,它就会裁剪,但它的内容会向左对齐并且只在右侧裁剪。

我试图让内部 poster_row div 居中,并从两侧平均裁剪。外部 div 将是视口的 100%,因此它的宽度是任意的。理想情况下,我希望内部 div 也具有任意宽度,这样我就可以在不更改 CSS 的情况下轻松换出内容。

【问题讨论】:

  • 我不认为这可以用纯 css 来完成,用 js 你可以在海报行上说 margin-left -50% 然后加上海报行宽度的一半,这将使海报行居中水平。但是我想不出任何东西来仅使用 css 来实现这一目标

标签: css crop centering


【解决方案1】:

我想我明白了:

我让你添加前缀并删除最大宽度值

.poster_row {
    margin: auto;
    text-align: center;
    display: inline-block;
    white-space:nowrap;
    overflow:hidden;
    border: dotted;
    border-color: blue;
    position: absolute;
    left: 50%;
    transform:translate(-50%,0);
}

【讨论】:

  • 这会增加.poster_container 的高度,但可以解决问题。在这里摆弄:jsfiddle.net/7aMhY/4
  • 这行得通。使用 margin-left 和 width 的另一种解决方案也可以正常工作,但我也注意到了一个警告。
【解决方案2】:

如果您的 poster_row 的宽度不会改变,请添加:

.poster_row {
    text-align: center;
    margin: auto;
    display: inline-block;
    white-space:nowrap;
    overflow:hidden;
    border: dotted;
    border-color: blue;
    position:absolute;
    left: 50%;
    margin-left: -525px;
    width: 1050px;
}

否则你必须用Js计算宽度和左边距

【讨论】:

  • 正如 OP 所说“理想情况下,我希望内部 div 也具有任意宽度,这样我就可以轻松地换出内容而无需更改 CSS。”
  • 是的,理想情况下宽度是任意的,但这个解决方案工作正常。一个警告:我必须在包含 poster_container 的 div 中设置 overflow-x:hidden 以防止水平滚动条。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2015-02-10
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
相关资源
最近更新 更多