UNPKG

anchor-js

Version:

A Javscript utility for adding deep anchor links to online docs.

808 lines (761 loc) 32 kB
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AnchorJS - Add deep anchor links to your docs</title> <link rel="icon" type="image/x-icon" href="favicon.ico"> <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,400,700' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="styles.css"> <link rel="stylesheet" href="fonts/fonts.css"> <link rel="stylesheet" href="//cdn.jsdelivr.net/prism/1.5.1/themes/prism-twilight.css"> <script src="grunticon/grunticon.loader.js"></script> <script> grunticon(["grunticon/icons.data.svg.css", "grunticon/icons.data.png.css", "grunticon/icons.fallback.css"]); </script> <noscript> <link href="grunticon/icons.fallback.css" rel="stylesheet"> </noscript> </head> <body> <header class="header"> <h1 class="page-title">AnchorJS</h1> <img class="logo" src="img/anchorjs_logo.png" /> <div class="desc"> <p class="maindesc">Add deep anchor links to your docs.</p> <p class="subdesc">What are "deep anchor links"? Here are a few examples:</p> </div> <div class="preview-examples"> <div class="example"> <div class="example-content"> <h3 id="basic-link-preview">Basic Link</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options.visible = 'always'; anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Paragraph Link</h3> <p id="paragraph-link-preview">Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '¶' }; anchors.add('p');</code></pre> </div> </div> </div> <p class="more-examples"><a href="#examples">See more examples</a></p> <div class="used-by"> <h2 class="used-by-label">Used by</h2> <a href="http://primercss.io/about/"><img src="https://avatars.githubusercontent.com/u/7143434?v=3&s=120" alt="Primer CSS Logo" title="PrimerCSS"/></a> <a href="http://getbootstrap.com/getting-started/"><img src="https://avatars.githubusercontent.com/u/2918581?v=3&s=120" alt="Bootstrap Logo" title="Bootstrap" /></a> <a href="http://eslint.org/docs/rules/"><img src="https://avatars.githubusercontent.com/u/6019716?v=3&s=120" alt="ESLint logo" title="ESLint"/></a> <a href="https://middlemanapp.com/basics/install/"><img src="https://avatars.githubusercontent.com/u/1280820?v=3&s=120" alt="Middleman logo" title="Middleman"/></a> <a href="http://learn.getgrav.org/"><img src="https://avatars.githubusercontent.com/u/8237355?v=3&s=120" alt="Grav Logo" title="Grav" /></a> </div> </header> <section class="main"> <h2>Overview</h2> <img class="anchorlink-examples" src="img/anchorlinks2.png" alt="Examples of deep anchor links from across the web." /> <p>AnchorJS lets you drop deep anchor links (<a href="http://ux.stackexchange.com/q/36304/33248">like these</a>) onto any webpage, and be on your way.</p> <p>You don't need to set up IDs or worry about urls. AnchorJS will respect your IDs if you have them, and generate them if you don't.</p> <p>It uses an attractive link icon by default, but you can customize the display via <a href="#options">options</a> and CSS syling. The <a href="#examples">examples</a> demonstrate a few customization ideas.</p> <p>Finally, AnchorJS is <strong>lightweight</strong>, <strong>accessible</strong>, and has <strong>no dependencies</strong>.</p> <h2>Installation</h2> <p>Download AnchorJS using npm,</p> <pre><code>npm install anchor-js</code></pre> <p>or bower:</p> <pre><code>bower install anchor-js</code></pre> <p>(or just <a href="https://github.com/bryanbraun/anchorjs/releases">download it from github</a>).</p> <p>Then include the anchor.js file (or anchor.min.js) in your webpage.</p> <pre><code class="language-markup">&lt;script src="anchor.js"&gt;&lt;/script&gt;</code></pre> <p>You could also include it via a CDN like <a href="https://cdnjs.com/libraries/anchor-js">CDNJS</a> or <a href="http://www.jsdelivr.com/projects/anchorjs">jsDelivr</a>.</p> <p>If you're using it from Node/CommonJS, include it via:</p> <pre class="src-js"><code>var anchorJS = require('anchor-js'); var anchors = new anchorJS();</code></pre> <h2>Basic usage</h2> <p>AnchorJS provides the <code>anchors.add()</code> method which takes a CSS selector (similar to jQuery) for targeting elements you want to deep-link. Here are some usage examples.</p> <pre class="src-js"><code>/** * Example 1 * Add anchors to all h1's on the page */ anchors.add('h1'); /** * Example 2 * Adds anchors to elements that have been assigned the class '.anchored' */ anchors.add('.anchored'); /** * Example 3 * If no selector is provided, it falls back to a default selector of: * 'h2, h3, h4, h5, h6' */ anchors.add();</code></pre> <h3>Don't run it too late!</h3> <p>You need to add anchors to the page early in the page load process if you want browsers to jump to the ID properly.</p> <p>We recommend you call <code>anchors.add()</code> before the DOM finishes loading...</p> <pre><code class="language-markup">&lt;!-- Add anchors before the closing body tag. --&gt; &lt;script&gt; anchors.add(); &lt;/script&gt; &lt;/body&gt;</code></pre> <p>...or on DOMContentLoaded:</p> <pre class="src-js"><code>// Add anchors on DOMContentLoaded document.addEventListener("DOMContentLoaded", function(event) { anchors.add(); });</code></pre> <p>Don't add anchors on later events, like <code>$(document).ready()</code> or <code>window.onload</code> as some browsers will attempt to jump to your ID before AnchorJS can add it to the page. For more details, see <a href="https://github.com/bryanbraun/anchorjs/issues/69#issuecomment-255503575">github issue #69</a>).</p> <h2>Options</h2> <p>You can set a number of options to customize how your anchors look:</p> <table class='options-table'> <thead> <tr> <th>Option</th> <th class="minicol">Accepted Values</th> <th class="minicol">Default Value</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>placement</code></td> <td><code>right</code> <br> <code>left</code></td> <td><code>right</code></td> <td><code>right</code> appends the anchor to the end of the element.<br> <code>left</code> places it to the left, in the margin.</td> </tr> <tr> <td><code>visible</code></td> <td><code>hover</code> <br> <code>always</code> <br> <code>touch</code></td></td> <td><code>hover</code></td> <td><code>hover</code> displays the anchor when hovering over the element.<br> <code>always</code> will always display the anchor link. <br> <code>touch</code> will <em>always</em> display anchors for devices that support touch events, and only display them via <em>hover</em> for devices that do not support touch events. This approximates touchscreen detection (but <a href="http://www.stucox.com/blog/you-cant-detect-a-touchscreen/">isn't 100% accurate</a>).</td> </tr> <tr> <td><code>icon</code></td> <td>(any unicode character)</td> <td><code style="font-family: 'anchorjs-icons'; font-size: 24px; -webkit-font-smoothing: antialiased;"></code></td> <td>Replace the default link icon with the character(s) provided. These are a few good options: <code>#</code>, <code></code>, <code></code>, and <code>§</code>.</td> </tr> <tr> <td><code>class</code></td> <td>(any string)</td> <td>(none)</td> <td>Adds the provided class(es) to the anchor html.</td> </tr> <tr> <td><code>truncate</code></td> <td>(any positive number)</td> <td><code>64</code></td> <td>Truncates the generated ID to the specified character length. <small>Note: the length may not be exactly the same, if there are dangling spaces or hyphens to be trimmed.</small></td> </tr> </tbody> </table> <p>For example:</p> <pre class="src-js"><code>/** * Example 1 * Add anchors to all h1s, h2s and h3s inside of #post. * Anchors will be always visible. */ anchors.options.visible = 'always'; anchors.add('#post h1, #post h2, #post h3'); /** * Example 2 * Provide options as an object before adding anchors to the page. * Adds always-visible ¶ anchors in the left margin of each p tag inside .story */ anchors.options = { placement: 'left', visible: 'always', icon: '¶' }; anchors.add('.story > p');</code></pre> <h2>Advanced usage</h2> <section id="section-ids"> <h3 data-anchor-id="section-ids">Section IDs</h3> <p>In some cases, you might want to link to existing section IDs instead of the heading element itself. You can instruct AnchorJS to do this with the <code>data-anchor-id</code> attribute:</p> <pre><code class="language-markup">&lt;section id="section-1"&gt; &lt;h3 data-anchor-id="section-1"&gt;Section 1&lt;/h3&gt; &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed...&lt;/p&gt; &lt;/section&gt;</code></pre> <p>This allows you to do things like <a href="https://css-tricks.com/on-target/#article-header-id-3">highlight sections when your users jump to them</a>.</p> </section> <h3>Removing anchors</h3> <p>You can remove anchors with the <code>anchors.remove()</code> or <code>anchors.removeAll()</code> methods:</p> <pre class="src-js"><code>/** * Example 1 * Remove anchors from all h1s on the page. */ anchors.remove('h1'); /** * Example 2 * Remove all anchors from the page. */ anchors.removeAll();</pre></code> <p>Removing anchors with <code>.remove()</code> should be uncommon. If you simply want anchors on a more selective group, consider using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:not">the CSS <em>:not()</em> pseudo-class</a> when you add them, like so:</p> <pre class="src-js"><code>/** * Example 2 * Add anchors to all h2s, except for those with a class of "no-anchor". */ anchors.add('h2:not(.no-anchor)');</pre></code> <h3>Chaining commands</h3> <p>You can chain commands of <code>add()</code> and <code>remove()</code> (since they return a copy of <code>anchors</code>), but it's usually more performant to lean on CSS when targeting elements: <pre class="src-js"><code>/** * Example 1 * Adds anchors to `.my-anchors` and `.my-other-anchors` except for those * with a class of `no-anchor`. */ anchors.add('.my-anchors').add('.my-other-anchors').remove('.no-anchor'); /** * Example 2 * A more performant way to add anchors to the same classes in Example 1 above. */ anchors.add('.my-anchors:not(.no-anchor), .my-other-anchors:not(.no-anchor)');</code></pre> <h3>Multiple sets of anchors</h3> <p>You can have multiple sets of anchors on one page, each with their own design. To do so, just create your own instances of the AnchorJS object:</p> <pre class="src-js"><code>var sidebarAnchors = new AnchorJS(); anchors.add('.main h2'); // The default instance. sidebarAnchors.add('.sidebar h2'); // The new instance.</code></pre> <p>You can preset your instance with whatever options you like:</p> <pre class="src-js"><code>var sidebarAnchors = new AnchorJS({ placement: 'left', icon: '¶' }); sidebarAnchors.add('.sidebar h2');</code></pre> <h3>Generating navigations</h3> <p>AnchorJS doesn't include methods for dynamically generating navigations (like a table of contents or jump nav). This is to keep AnchorJS lightweight and simple for the most common usecases.</p> <p>However, AnchorJS <em>does</em> expose a list of all anchored elements at <code>anchors.elements</code>. This way, external code can look up the elements and use them to generate navigations (as shown in <a href="https://jsfiddle.net/bryanbraun/nc6rL9hk/">this example</a>).</p> <p>You can also use AnchorJS alongside a static navigation with pre-defined IDs (as is done in <a href="https://jsfiddle.net/bryanbraun/x85hfvbk/">this example</a>).</p> <h2>Examples</h2> <div class="examples"> <div class="example"> <div class="example-content"> <h3>Basic Link</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options.visible = 'always'; anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Basic Link - Left</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left' }; anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Paragraph Link</h3> <p id="paragraph-link">Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '¶' }; anchors.add('p');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Octothorp</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', icon: '#' }; anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Unicode Icon 1</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '§' }; anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Unicode Icon 2</h3> <p id="unicode-icon-2">Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', icon: '❡' }; anchors.add('p');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Custom Text</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', icon: '# LINK' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { font-weight: 200; margin-left: 1em; padding-right: 0.375em; font-size: 0.5em; border: 1px dashed #FFBAAC; vertical-align: middle; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Custom Image</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>// Use an empty string ('') for the icon when styling the background with CSS. anchors.options = { visible: 'always', placement: 'left', icon: '' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { width: 14px; height: 32px; margin-top: 6px; margin-left: -1.25em !important; background: url('img/mini-logo.png') no-repeat; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Link w/CSS Styling</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { display: inline-block; height: 32px; width: 18px; border-radius: 50%; background-color: #FF5231; color: white; margin-top: 4px; margin-left: -1.4em !important; } .anchorjs-link:before { margin-left: 7px; margin-top: -4px; display: block; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Icon Font</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>// Just pass in the octal code for your icon-font character. anchors.options = { visible: 'always', icon: '\uf0c1' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { font-family: 'your-icon-font'; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>SVG Icon</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', icon: '' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { display: inline-block; background: url('img/hyperlink.svg') no-repeat; margin-left: 8px; width: 14px; height: 24px; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Base64 Icon</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjIwcHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDIwIDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImxpbmsiIGZpbGw9IiNGRjUyMzEiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTUsMCBMMTIuMzA0Njg3NSwwIEMxMy4yNDIxODc1LDAuNjI1IDE0LjEyMTA5MzgsMS43MzgyODEyNSAxNC4zOTQ1MzEyLDIuNSBMMTQuOTgwNDY4OCwyLjUgQzE2LjI1LDIuNSAxNy40ODA0Njg4LDMuNzUgMTcuNDgwNDY4OCw1IEMxNy40ODA0Njg4LDYuMjUgMTYuMjEwOTM3NSw3LjUgMTQuOTgwNDY4OCw3LjUgTDExLjIzMDQ2ODgsNy41IEMxMCw3LjUgOC43MzA0Njg3NSw2LjI1IDguNzMwNDY4NzUsNSBDOC43MzA0Njg3NSw0LjU1MDc4MTI1IDguODY3MTg3NSw0LjEyMTA5Mzc1IDkuMDgyMDMxMjUsMy43NSBMNi40MDYyNSwzLjc1IEM2LjMwODU5Mzc1LDQuMTYwMTU2MjUgNi4yNSw0LjU3MDMxMjUgNi4yNSw1IEM2LjI1LDcuNSA4LjczMDQ2ODc1LDEwIDExLjIzMDQ2ODgsMTAgTDE1LDEwIEMxNy41LDEwIDIwLDcuNSAyMCw1IEMyMCwyLjUgMTcuNSwwIDE1LDAgTDE1LDAgWiBNNS42MDU0Njg3NSw3LjUgTDUuMDE5NTMxMjUsNy41IEMzLjc1LDcuNSAyLjUxOTUzMTI1LDYuMjUgMi41MTk1MzEyNSw1IEMyLjUxOTUzMTI1LDMuNzUgMy43ODkwNjI1LDIuNSA1LjAxOTUzMTI1LDIuNSBMOC43Njk1MzEyNSwyLjUgQzEwLDIuNSAxMS4yNjk1MzEyLDMuNzUgMTEuMjY5NTMxMiw1IEMxMS4yNjk1MzEyLDUuNDQ5MjE4NzUgMTEuMTMyODEyNSw1Ljg3ODkwNjI1IDEwLjkxNzk2ODgsNi4yNSBMMTMuNTkzNzUsNi4yNSBDMTMuNjkxNDA2Miw1LjgzOTg0Mzc1IDEzLjc1LDUuNDI5Njg3NSAxMy43NSw1IEMxMy43NSwyLjUgMTEuMjY5NTMxMiwwIDguNzY5NTMxMjUsMCBMNSwwIEMyLjUsMCAwLDIuNSAwLDUgQzAsNy41IDIuNSwxMCA1LDEwIEw3LjY5NTMxMjUsMTAgQzYuNzU3ODEyNSw5LjM3NSA1Ljg3ODkwNjI1LDguMjYxNzE4NzUgNS42MDU0Njg3NSw3LjUgTDUuNjA1NDY4NzUsNy41IFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+") no-repeat; margin-top: 15px; height: 16px; width: 20px; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>CSS Icon</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '' }; anchors.add('h3');</code></pre> <pre class="css"><code>/* See also: nicolasgallagher.com/pure-css-gui-icons */ .anchorjs-link { border-color: #FF5231 #FF5231 transparent; border-width: 15px 7px 6px; border-style: solid; margin-top: 10px; font-size: 22px; padding-right: 0 !important; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Emoji</h3> <p id="emoji">Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { visible: 'always', placement: 'left', icon: '⚓' }; anchors.add('p');</code></pre> <pre class="css"><code>.anchorjs-link { margin-left: -1.8em !important; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Grunticon</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>// Assuming you have set up // grunticon and you have a // grunticon class named // 'icon-grunticon-link'... anchors.options = { visible: 'always', class: 'icon-grunticon-link' icon: '' }; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { display: inline-block; margin-left: 0.375em; width: 0.375em; height: 20px; }</code></pre> </div> </div> </div> <h2 id="hover-examples" class="title">Hover examples</h2> <div class="hover-examples"> <div class="example"> <div class="example-content"> <h3>Basic Hover</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.add('h3');</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Color Transition</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link:hover { color: #2500AD; } *:hover > .anchorjs-link { transition: color .25s linear; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Shift Out</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options.placement = 'left'; anchors.add('h3');</code></pre> <pre class="css"><code>.anchorjs-link { transition: all .25s linear; } *:hover > .anchorjs-link { margin-left: -1.125em !important; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Arrow</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options.icon = '# LINK'; anchors.add('h3');</code></pre> <pre class="css"><code>/* Based on http://codepen.io/corysimmons/pen/NPBXbe */ /* Vendor prefixes not included */ .anchorjs-link { position: relative; top: 4px; height: 36px; flex: 1; background: #FF5231; color: white; font-family: Helvetica, Arial, sans-serif; font-weight: 200; font-size: 1rem; margin-right: -6%; padding-right: 6%; padding-left: 42px !important; line-height: 38px; transition: all 0.5s ease; transform: translateX(100%); } .anchorjs-link::before { position: absolute; display: block; left: 0; width: 0; height: 0; content: ''; border: 18px solid #fdfdfd; /* Background color */ border-right-color: #FF5231; transition: all 0.5s ease; } h2 { display: flex; } *:hover > .anchorjs-link { transform: translateX(0); } *:hover > .anchorjs-link:hover { background: #FF806A; } *:hover > .anchorjs-link:hover::before { border-right-color: #FF806A; }</code></pre> </div> </div> <div class="example"> <div class="example-content"> <h3>Tooltip</h3> <p>Lorem ipsum dolor consectetur amet nulla elit. Vivamus luctus urna sed urna ultricies. Vivamus luctus urna sed.</p> <a href="#" class="example-code-link">{}</a> </div> <div class="example-code"> <pre class="js"><code>anchors.options = { icon: 'Permalink' }; anchors.add('h3');</code></pre> <pre class="css"><code>/* tooltip box */ .anchorjs-link:after { display: inline-block; transition: opacity .25s linear; font-family: Verdana, sans-serif; font-size: 0.75ex; font-weight: 100; padding: 0.5ex 1.5ex; background: #444; color: #fff; border-radius: 0.6ex; vertical-align: 0.8ex; } /* tooltip arrow */ .anchorjs-link:before { content: ''; display: inline-block; border-top: 0.3ex solid transparent; border-right: 0.5ex solid #444; border-bottom: 0.3ex solid transparent; vertical-align: 0.35ex; } .anchorjs-link:hover:after { background-color: #666; } .anchorjs-link:hover:before { border-right-color: #666; }</code></pre> </div> </div> </div> <footer class="footer"><p><small>Made by <a href="http://www.bryanbraun.com">Bryan</a>. You should <a href="https://twitter.com/intent/tweet?text=Hi%20%40BryanEBraun%2C%20">say hi</a> sometime. 👋</small></p></footer> <a href="https://github.com/bryanbraun/anchorjs"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://github-camo.global.ssl.fastly.net/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a> </section> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script src="anchor.js"></script> <script src="scripts.js"></script> <script> anchors.add('.main > h2, .main > h3, .main > section > h2, .main > section > h3').remove('.used-by-label'); var ex1 = new AnchorJS({ visible: 'always' }); ex1.add('.examples .example:nth-child(1) h3, .preview-examples .example:nth-child(1) h3'); var ex2 = new AnchorJS({ placement: 'left', visible: 'always' }); ex2.add('.examples .example:nth-child(2) h3'); var ex3 = new AnchorJS({ icon: '¶', visible: 'always', placement: 'left' }); ex3.add('.examples .example:nth-child(3) p, .preview-examples .example:nth-child(2) p'); var ex4 = new AnchorJS({ icon: '#', visible: 'always' }); ex4.add('.examples .example:nth-child(4) h3'); var ex5 = new AnchorJS({ icon: '§', visible: 'always', placement: 'left' }); ex5.add('.examples .example:nth-child(5) h3'); var ex6 = new AnchorJS({ icon: '❡', visible: 'always' }); ex6.add('.examples .example:nth-child(6) p'); var ex7 = new AnchorJS({ icon: '# LINK', visible: 'always' }); ex7.add('.examples .example:nth-child(7) h3'); var ex8 = new AnchorJS({ icon: '', visible: 'always', placement: 'left' }); ex8.add('.examples .example:nth-child(8) h3'); var ex9 = new AnchorJS({ visible: 'always', placement: 'left' }); ex9.add('.examples .example:nth-child(9) h3'); var ex10 = new AnchorJS({ visible: 'always', class: 'ajs-10', icon: '\uf0c1' }); ex10.add('.examples .example:nth-child(10) h3'); var ex11 = new AnchorJS({ visible: 'always', icon: '' }); ex11.add('.examples .example:nth-child(11) h3'); var ex12 = new AnchorJS({ visible: 'always', placement: 'left', icon: '' }); ex12.add('.examples .example:nth-child(12) h3'); var ex13 = new AnchorJS({ visible: 'always', placement: 'left', icon: '' }); ex13.add('.examples .example:nth-child(13) h3'); var ex14 = new AnchorJS({ visible: 'always', placement: 'left', icon: '⚓' }); ex14.add('.examples .example:nth-child(14) p'); var ex15 = new AnchorJS({ visible: 'always', class: 'icon-grunticon-link', icon: '' }); ex15.add('.examples .example:nth-child(15) h3'); var hovEx1 = new AnchorJS(); hovEx1.add('.hover-examples .example:nth-child(1) h3'); var hovEx2 = new AnchorJS(); hovEx2.add('.hover-examples .example:nth-child(2) h3'); var hovEx3 = new AnchorJS({ placement: 'left' }); hovEx3.add('.hover-examples .example:nth-child(3) h3'); var hovEx4 = new AnchorJS({ icon: '# LINK' }); hovEx4.add('.hover-examples .example:nth-child(4) h3'); var hovEx5 = new AnchorJS({ icon: 'Permalink' }); hovEx5.add('.hover-examples .example:nth-child(5) h3'); </script> <script src="//cdn.jsdelivr.net/prism/1.5.1/prism.js"></script> </body> </html>