javascript - 填充权不适用于最后一个 child

标签 javascript html css flexbox

尝试做一个图片时间轴界面,有点卡壳了。标记始终位于中心,因此第一个元素的 padding-left: 50% 工作正常。但是,我还希望最后一个元素具有 padding-right: 50%,这样我就可以一直滚动到最后一个元素的末尾。

这是 jsfiddle:https://jsfiddle.net/da3hk2xz/

如您所见,#timeline:last-child 未被应用。

var timeline = document.getElementById("timeline");

for (var i = 0; i < 25; i++) {
  var img = document.createElement("img");
  img.src = "http://placehold.it/300x150?text=" + i
  timeline.append(img)
}
html,
body {
  width: 100%;
  height: 100%;
  padding: 0px;
  margin: 0px;
}

#timeline {
  width: 100%;
  height: 150px;
  background-color: red;
  overflow-x: scroll;
  display: flex;
  flex-wrap: nowrap;
  position: absolute;
  bottom: 0;
  box-sizing: border-box;
}

#timeline:nth-child(1) {
  padding-left: 50%;
}

#timeline:last-child {
  padding-right: 50%;
}

#marker {
  /* http://apps.eky.hk/css-triangle-generator/ */
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 35px 17.5px 0 17.5px;
  border-color: #007bff transparent transparent transparent;
  position: absolute;
  bottom: 115px;
  /* 150 - 35 */
  left: 0;
  right: 0;
  margin-left: auto;
  margin-right: auto;
}

#line {
  width: 2px;
  height: 115px;
  /* 150 - 35 */
  background-color: purple;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  margin-left: auto;
  margin-right: auto;
}
<div id="timeline"></div>
<div id="marker-container">
  <div id="marker"></div>
  <div id="line"></div>
</div>

最佳答案

只需将有问题的选择器从您所拥有的更改为下面的选择器即可:

#timeline :nth-child(1) {
  padding-left: 50%;
}

#timeline :last-child {
  padding-right: 50%;
}

原因是选择器中的最后一个“短语”是将应用样式的元素。在您的 fiddle 中,最后一个“短语”是 #timeline 元素本身,因此它正在接收填充。在 #timeline:last-child 之间放置一个空格使 :last-child 短语成为最后一个,并且由于选择器中的空格表示“任何后代”,后代将收到填充。


用简单的英语:

#timeline:last-child:父元素的最后一个子元素,的 ID 为 timeline#timeline :last-child:ID 为 timeline 的元素的子元素的最后一个元素。

直系后代为目标也是一种更安全、更有效的解决方案:

#timeline > :nth-child(1)
#timeline > :last-child

CSS 很有趣。

关于javascript - 填充权不适用于最后一个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42281371/

相关文章:

angularjs - AngularJS 的 CSS3 动画在 Firefox 中无法正确滑动

css - 防止图像在浏览时移动(用鼠标)

javascript - dalekjs 单击包含文本的链接但不起作用

javascript - 如何复制整行?

javascript - 如何禁用jquery中的文本框?

javascript - AngularJS ng-重复随机顺序

javascript - 让按钮在网站上显示和隐藏导航?

单击按钮后 Javascript 属性未更新

javascript - 将数据ajax传递到foreach laravel 5中的同一页面

javascript - OpenLayers JS - 如何区分用户 View 更改和编程 View 更改?