粘性定位到底部左侧

18
我刚在FF32和Safari 7中尝试了 "position: sticky"。 当使用 "top:0px" 或 "left: 0px"(水平粘贴)时,它可以完美工作,但是当我尝试 "bottom: 0px" 或更好的组合 "bottom: 0; left : 0" 时,它似乎无法将自己设置到元素底部。 可以在此处尝试这种行为:http://html5-demos.appspot.com/static/css/sticky.html,只需将“top: 10px”属性更改为“bottom: 0”。这不应该起作用吗?
我认为像将某物置于顶部一样,将某物粘在底部也是有效的用例。在我们的情况下,因为我想在水平滚动时有一些粘性元素,但我希望该元素位于父元素的底部。
无论如何,欢迎任何建议和额外信息。

为什么不使用“fixed”而使用“sticky”呢? - Dexkill
@Dexkill 因为 fixed 元素即使其父元素不再显示,它们仍然会显示。 - rayray
6个回答

17
position: sticky;
bottom: 30px;

可以工作,记住sticky元素是相对于它们的父元素的。

http://codepen.io/corysimmons/pen/QyBMXN?editors=1100(在Firefox中)

在这种情况下,<section>(蓝色区域)是其父元素。

但Stickyfill不起作用,请看https://github.com/wilddeer/stickyfill#what-it-doesnt

建议您再尝试一段时间,直到熟练掌握它。

如果您需要JS插件来行为类似于position: sticky而无需使用position: sticky(等待浏览器支持或更强大的polyfill),请告诉我。


如果您要将“sticky” div放入的元素具有固定高度,则需要添加一个包装器div,并在最后将粘性div放入包装器中。 - Simon_Weaver

7
使用position: sticky属性的元素,其工作方式如下:
“具有position: sticky属性的项目应始终保留在其父元素内的正常位置,除非该正常位置超出了视口范围,在这种情况下,粘性项目应相对于视口进行固定。如果父容器也离开了视口,则所有规则都不适用,此时粘性项目也将随之滚动消失。” 这个 Codepen 示例很好地说明了这一点。请注意,只要父蓝色框处于正常视图中,红色框就会保持在其正常位置。但是,当您滚动以使红色框开始超出视口时,它将被固定。最后,当蓝色父级完全滚动出视图时,红色框也会消失。

* {
  box-sizing: border-box;
  }

body {
  height: 3000px;
  padding: 3rem;
}

section {
  background: dodgerblue;
  color: white;
  line-height: 1.5;
  padding: 30px;
  }
  
div {
  display: block;
  width: 100px;
  height: 100px;
  background: tomato;
  position: sticky;
  bottom: 30px;
  }
<section>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci repellat cum totam! Enim, sunt. Numquam voluptate, velit quisquam ipsa molestias laudantium odit reiciendis nisi corporis voluptatibus, voluptatum sunt natus, accusantium magnam consequatur fugit officiis minima voluptatem consequuntur nam, earum necessitatibus! Cupiditate ullam repellendus, eius iure voluptas at commodi consectetur, quia, adipisci possimus, ex mollitia. Labore harum error consectetur officiis aut optio, temporibus iste nobis ducimus cumque laudantium rem pariatur. Ut repudiandae id, consequuntur quasi quis pariatur autem corporis perferendis facilis eius similique voluptatibus iusto deleniti odio officia numquam tenetur excepturi, aspernatur sunt minima aut fugiat ipsam. Ea nesciunt, amet fugit facere similique dolor nam tempora perferendis aut fugiat non, ex pariatur excepturi odio aspernatur libero saepe ducimus rem magni cumque. Laboriosam nisi fuga accusantium quos qui? Maiores ratione aliquam eos odio eius molestiae nesciunt exercitationem dolor perspiciatis quam. Necessitatibus rem nihil ad culpa, tenetur iusto consectetur rerum, delectus neque? Error, quas, eaque! Quibusdam voluptas expedita possimus consequatur accusantium distinctio, esse quisquam, ipsa blanditiis, officia perferendis et? Iste, nam optio vero earum tenetur voluptatibus modi a, odit aliquid eos corporis nulla saepe vel neque voluptate ratione, facilis quo sed nisi voluptates nostrum dolor. Non mollitia dignissimos laudantium quos libero nisi, nobis harum, asperiores soluta reprehenderit doloremque ipsa id unde voluptates beatae deserunt. Minima repellendus ipsam molestias veritatis pariatur nobis nihil, alias quasi, esse, aspernatur saepe beatae, hic consequatur. Sit sequi, libero quisquam quibusdam fuga tempore ab molestiae praesentium, necessitatibus, vero odio ullam qui non totam voluptas reprehenderit ad neque voluptate. Nam atque impedit ducimus, dolore reiciendis delectus inventore beatae cumque. Magni, id quos officiis soluta consequatur nam quis, modi fugit adipisci vel autem dolorum iusto cumque, libero reprehenderit amet doloremque voluptatem sunt sapiente reiciendis omnis, similique nulla enim. Autem repellendus, illo eveniet recusandae quae quibusdam itaque, delectus, consequatur provident vitae vero magnam repudiandae fugit, placeat sapiente! Omnis, possimus natus obcaecati sunt harum impedit, veniam quae numquam cum eos. Suscipit nihil totam itaque odio assumenda nemo? Eos iusto voluptas, consectetur sit totam velit fuga ea impedit laboriosam, dignissimos neque ipsum! Nostrum, recusandae. Autem sit aperiam culpa neque quaerat, voluptatibus repellendus. Magnam voluptatem illo quidem sapiente, nemo neque temporibus unde harum mollitia sit dignissimos eligendi accusantium, deserunt numquam, recusandae aperiam iure vero tenetur ea suscipit. Necessitatibus vel, omnis praesentium pariatur officia! Odio maxime dolor vitae ab deleniti et accusantium, iure molestiae eaque soluta sequi, autem, quae ex labore hic dicta temporibus quibusdam animi modi qui necessitatibus nulla. Perspiciatis molestiae architecto culpa quaerat amet fuga, fugiat laboriosam tempore at adipisci, tempora laborum ducimus alias corporis beatae dolor repellendus reiciendis aut cum. Quos enim quae dolores voluptates deleniti est eum beatae impedit unde quidem cumque, labore, quod a asperiores tempora vel blanditiis? Facere corporis mollitia vitae! Exercitationem esse perferendis, et aliquid iste saepe, quos, qui dolore est facere porro. Sapiente nesciunt, ad nostrum hic optio omnis libero autem minus eius, perferendis numquam adipisci corporis nisi ipsa assumenda possimus repudiandae distinctio vel accusamus quam animi esse eos natus pariatur. Molestiae in temporibus ipsum, eveniet itaque minus facilis magnam corporis amet, aspernatur ducimus iste quis numquam laudantium saepe optio nam nisi dolore necessitatibus perferendis hic non ea labore. Impedit rerum laudantium amet aperiam. Debitis tenetur veniam molestiae ab labore maxime incidunt iste commodi recusandae, adipisci obcaecati, molestias placeat aperiam atque, dolorum facere quae nesciunt. Facere aspernatur dolore consequatur tempora veritatis qui et eos quo voluptatum ipsum nemo rerum debitis nostrum, atque ratione aliquam nulla cumque aperiam officiis? Corporis a sunt, quis vel, quae molestias vitae recusandae magni! Nostrum animi totam dolore nemo voluptatem? Nihil consequuntur corrupti quaerat quis dolorum! Culpa, at quibusdam, saepe quas accusamus sequi tempore molestiae perferendis error fugiat, in totam laboriosam. Mollitia necessitatibus eius nisi, blanditiis rem commodi doloremque dicta, hic cumque quod possimus, obcaecati nesciunt deserunt. Vel id quas aliquam, fugiat repellendus perferendis voluptate consectetur deleniti cumque harum odit dolores ducimus facere? Mollitia qui dolore ut quod facere, recusandae repellendus debitis minus aliquid delectus inventore numquam ipsam fugit doloribus, voluptatum, earum eveniet ipsa, impedit fuga! Illo ipsa dolor id enim facere ipsam similique consectetur porro sequi ea perspiciatis soluta provident, ex amet nulla quos sit. Rerum nam, odit dignissimos! Delectus, corporis perspiciatis magni tempore praesentium dolorem magnam architecto earum animi, vero, obcaecati alias distinctio quae eligendi eos doloremque assumenda. Neque temporibus doloremque, natus deserunt ipsam repellendus. Dolorum consequuntur culpa esse modi adipisci, rem natus at fuga id, architecto delectus! Culpa quaerat nulla magnam sint repudiandae, impedit quisquam iure illum, natus at nesciunt fuga obcaecati excepturi fugiat ea sed repellendus repellat aliquid vel, sunt dolores quae. Omnis nulla soluta natus consequuntur tempore, in esse autem reprehenderit cum totam fugit voluptate libero hic asperiores perspiciatis a, odio voluptatibus non alias inventore delectus impedit praesentium doloribus. Veritatis qui adipisci quisquam voluptates, similique consequatur repudiandae dignissimos accusantium rerum beatae fuga inventore. Sequi soluta maxime facere laudantium sint quae ab, dolores provident doloremque maiores quo eaque commodi veritatis, eligendi illo ipsum. Suscipit, veniam, cumque quidem, distinctio debitis magnam nesciunt dolore reiciendis minus accusantium quod ullam eaque magni. Adipisci debitis a, repellat suscipit doloribus officiis asperiores vero veritatis aliquam praesentium nihil corrupti, ipsam. Quae esse hic fugit, in harum illum laboriosam odio mollitia at dolor nam quisquam aperiam quidem error vero voluptatibus, quos dolorem ratione odit illo libero unde sunt distinctio rerum! Repellat omnis dolorum fuga dolor, molestias earum. Iure, repellendus quae nostrum temporibus odio ad. Nihil quidem enim unde nesciunt, velit esse eveniet nisi architecto ad perferendis obcaecati eum iste ipsum eligendi ut necessitatibus veritatis officiis minus non laborum. Tempore explicabo nostrum nihil. Sed eius, iure nisi saepe. Neque eaque, consectetur nostrum aliquam amet praesentium, dicta excepturi ducimus voluptatibus illum consequatur, rerum veniam omnis eos enim. At asperiores, soluta sapiente amet. Ipsum in sint iusto, cumque possimus iure quia fugiat. Facere ratione consequuntur deleniti nisi, nostrum esse. Et amet deserunt unde aliquid, magni, incidunt fugiat illo neque consequatur eum cum, alias repellendus odit voluptate. Hic ducimus, quidem, excepturi delectus rerum placeat illo exercitationem nesciunt natus voluptatum modi sequi consectetur praesentium quae eaque mollitia! Architecto excepturi atque, molestias natus.
  </p>
  <div></div>
</section>


2

如果您知道粘性元素的高度,则可以使用以下方法:

.sticky-element {
  position: sticky;
  top: calc(100vh - 50px);
}

这也适用于Stickyfill。不确定浏览器是否支持。

其实还不错!!但是我会使用负边距顶部或者translate而不是calc。如果你仍然考虑使用sticky,那么这些应该可以在所需的浏览器中工作。 - denns
这将是一个很好的方法 - 但不幸的是,对于移动设备来说,随着滚动隐藏工具栏的功能变得越来越智能化,而100vh保持不变,所以当您在实际设备上测试时,有些内容可能会超出页面。 - Simon_Weaver

0

body {
  min-width: 600px;
  min-height: 400px;
}

.container {
  background-color: #9588c170;
  /* , */
  position: absolute;
  width: 100%;
  height: 100%;
  /* overflow: scroll; */
  overflow: auto;
}

.sticky {
  width: 300px;
  height: 200px;
  background-color: #9588c1;
  /* , */
  position: sticky;
  left: 1000px;
  top: 900px;
}
<div class="container">
  <div class="sticky">div</div>
</div>


0
.sticky-container {
  position: sticky;
  top: 100vh; // push it to the bottom from top
  transform: translateY(-100%); // move it up again depending on its own height
  width: 100%;
  background: white;
  padding: 20px 0;
}

-2

使用以下HTML代码:

<div id="bottom-left">I'm in the bottom left!</div>

和以下的CSS:

#bottom-left {
    width: 250px;
    height: 250px;
    color: #fff;
    background-color: #000;
    position: fixed;
    bottom: 0;
   left: 0;
}

你应该在页面的左下角有一个固定的div

示例:http://jsfiddle.net/wjxws9hy/


1
谢谢您的回答。这与“sticky”唯一的区别在于,当您滚动父div时,元素不会移动。通过更长时间的玩耍,我认为这更多是Firefox实现“position: sticky”的问题。 - Markus
如果你不想让它移动,使用 position: fixed; 如果你想让它移动,使用 position: absolute; - almightyBoognish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接