mirror of
https://github.com/twbs/bootstrap.git
synced 2024-12-02 14:24:19 +01:00
089d434895
Conflicts: _config.yml dist/css/bootstrap-theme.css.map dist/css/bootstrap.css dist/css/bootstrap.css.map dist/css/bootstrap.min.css docs/_includes/components/glyphicons.html docs/_includes/css/forms.html docs/_includes/css/tables.html docs/_includes/getting-started/browser-device-support.html docs/_includes/header.html docs/_includes/js/affix.html docs/_includes/js/alerts.html docs/_includes/js/buttons.html docs/_includes/js/dropdowns.html docs/_includes/js/overview.html docs/_includes/js/popovers.html docs/_includes/js/tooltips.html docs/_includes/nav/javascript.html docs/assets/css/docs.min.css docs/assets/css/src/docs.css docs/assets/js/customize.min.js docs/assets/js/docs.min.js docs/assets/js/raw-files.min.js docs/browser-bugs.html docs/dist/css/bootstrap-theme.css.map docs/dist/css/bootstrap.css docs/dist/css/bootstrap.css.map docs/dist/css/bootstrap.min.css docs/examples/blog/index.html docs/examples/carousel/index.html docs/examples/cover/index.html docs/examples/dashboard/index.html docs/examples/grid/index.html docs/examples/jumbotron-narrow/index.html docs/examples/jumbotron/index.html docs/examples/justified-nav/index.html docs/examples/navbar-fixed-top/index.html docs/examples/navbar-static-top/index.html docs/examples/navbar/index.html docs/examples/non-responsive/index.html docs/examples/offcanvas/index.html docs/examples/signin/index.html docs/examples/starter-template/index.html docs/examples/sticky-footer-navbar/index.html docs/examples/sticky-footer/index.html docs/examples/theme/index.html docs/examples/tooltip-viewport/index.html less/code.less less/panels.less less/variables.less
122 lines
4.1 KiB
Markdown
122 lines
4.1 KiB
Markdown
---
|
|
layout: page
|
|
title: Affix
|
|
---
|
|
|
|
## Example
|
|
|
|
The subnavigation on the right is a live demo of the affix plugin.
|
|
|
|
## Usage
|
|
|
|
Use the affix plugin via data attributes or manually with your own JavaScript. **In both situations, you must provide CSS for the positioning and width of your affixed content.**
|
|
|
|
### Position via CSS
|
|
|
|
The affix plugin toggles between three classes, each representing a particular state: `.affix`, `.affix-top`, and `.affix-bottom`. You must provide the styles for these classes yourself (independent of this plugin) to handle the actual positions.
|
|
|
|
Here's how the affix plugin works:
|
|
|
|
- Scrolling past the element you want affixed should trigger the actual affixing. This is where `.affix` replaces `.affix-top` and sets `position: fixed;` (provided by Bootstrap's CSS).
|
|
- If a bottom offset is defined, scrolling past it should replace `.affix` with `.affix-bottom`. Since offsets are optional, setting one requires you to set the appropriate CSS. In this case, add `position: absolute;` when necessary. The plugin uses the data attribute or JavaScript option to determine where to position the element from there.
|
|
|
|
Follow the above steps to set your CSS for either of the usage options below.
|
|
|
|
### Via data attributes
|
|
|
|
To easily add affix behavior to any element, just add `data-spy="affix"` to the element you want to spy on. Use offsets to define when to toggle the pinning of an element.
|
|
|
|
{% highlight html %}
|
|
<div data-spy="affix" data-offset-top="60" data-offset-bottom="200">
|
|
...
|
|
</div>
|
|
{% endhighlight %}
|
|
|
|
### Via JavaScript
|
|
|
|
Call the affix plugin via JavaScript:
|
|
|
|
{% highlight js %}
|
|
$('#myAffix').affix({
|
|
offset: {
|
|
top: 100,
|
|
bottom: function () {
|
|
return (this.bottom = $('.footer').outerHeight(true))
|
|
}
|
|
}
|
|
})
|
|
{% endhighlight %}
|
|
|
|
|
|
### Options
|
|
|
|
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in `data-offset-top="200"`.
|
|
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th style="width: 100px;">Name</th>
|
|
<th style="width: 100px;">type</th>
|
|
<th style="width: 50px;">default</th>
|
|
<th>description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>offset</td>
|
|
<td>number | function | object</td>
|
|
<td>10</td>
|
|
<td>Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and bottom directions. To provide a unique, bottom and top offset just provide an object <code>offset: { top: 10 }</code> or <code>offset: { top: 10, bottom: 5 }</code>. Use a function when you need to dynamically calculate an offset.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>target</td>
|
|
<td>selector | node | jQuery element</td>
|
|
<td>the <code>window</code> object</td>
|
|
<td>Specifies the target element of the affix.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
### Events
|
|
|
|
Bootstrap's affix plugin exposes a few events for hooking into affix functionality.
|
|
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th style="width: 150px;">Event Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>affix.bs.affix</td>
|
|
<td>This event fires immediately before the element has been affixed.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>affixed.bs.affix</td>
|
|
<td>This event is fired after the element has been affixed.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>affix-top.bs.affix</td>
|
|
<td>This event fires immediately before the element has been affixed-top.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>affixed-top.bs.affix</td>
|
|
<td>This event is fired after the element has been affixed-top.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>affix-bottom.bs.affix</td>
|
|
<td>This event fires immediately before the element has been affixed-bottom.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>affixed-bottom.bs.affix</td>
|
|
<td>This event is fired after the element has been affixed-bottom.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|