Skip to content

hover link effect

Solved Customisation
18 3 6.2k 1
  • @DownPW I had exactly the same issue. Before I provide my solution, from recollection, you are using Fancybox ?

  • @DownPW I had exactly the same issue. Before I provide my solution, from recollection, you are using Fancybox ?

  • @DownPW in that case, you’ll need to add the below jQuery function just after the one you should already have

        $(window).on('action:posts.loaded', function(data) {
            console.log("Polling DOM for lazyLoaded images to apply Fancybox");
            $(document).ready(function() {
                $('a').not('.forum-logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() {
                    $('a[href*=".jpg"], a[href*=".jpeg"], a[href*=".png"], a[href*=".gif"], a[href*=".webp"]').addClass("noanimate");
                });
            });
        });
    

    What we are doing here is polling the DOM looking for any new images as posts are being loaded (hence the hook action:posts.loaded, and then it we get a match, we add new class .noanimate. You’ll need to modify your existing class block you are using for the hover effect so that it is not being executed against any HTML that contains this class - see below for an example (in your use case)

    .posts .content a:not(.noanimate) {
      background-image: linear-gradient(to right, #54b3d6, #54b3d6 50%, #337ab7 50%);
      background-size: 200% 100%;
      background-position: -100%;
      display: inline-block;
      padding: 5px 0;
      position: relative;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      transition: all 0.3s ease-in-out;
    }
    
  • @DownPW in that case, you’ll need to add the below jQuery function just after the one you should already have

        $(window).on('action:posts.loaded', function(data) {
            console.log("Polling DOM for lazyLoaded images to apply Fancybox");
            $(document).ready(function() {
                $('a').not('.forum-logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() {
                    $('a[href*=".jpg"], a[href*=".jpeg"], a[href*=".png"], a[href*=".gif"], a[href*=".webp"]').addClass("noanimate");
                });
            });
        });
    

    What we are doing here is polling the DOM looking for any new images as posts are being loaded (hence the hook action:posts.loaded, and then it we get a match, we add new class .noanimate. You’ll need to modify your existing class block you are using for the hover effect so that it is not being executed against any HTML that contains this class - see below for an example (in your use case)

    .posts .content a:not(.noanimate) {
      background-image: linear-gradient(to right, #54b3d6, #54b3d6 50%, #337ab7 50%);
      background-size: 200% 100%;
      background-position: -100%;
      display: inline-block;
      padding: 5px 0;
      position: relative;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      transition: all 0.3s ease-in-out;
    }
    

    @phenomlab

    Thanks dude I will test that

  • @DownPW in that case, you’ll need to add the below jQuery function just after the one you should already have

        $(window).on('action:posts.loaded', function(data) {
            console.log("Polling DOM for lazyLoaded images to apply Fancybox");
            $(document).ready(function() {
                $('a').not('.forum-logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() {
                    $('a[href*=".jpg"], a[href*=".jpeg"], a[href*=".png"], a[href*=".gif"], a[href*=".webp"]').addClass("noanimate");
                });
            });
        });
    

    What we are doing here is polling the DOM looking for any new images as posts are being loaded (hence the hook action:posts.loaded, and then it we get a match, we add new class .noanimate. You’ll need to modify your existing class block you are using for the hover effect so that it is not being executed against any HTML that contains this class - see below for an example (in your use case)

    .posts .content a:not(.noanimate) {
      background-image: linear-gradient(to right, #54b3d6, #54b3d6 50%, #337ab7 50%);
      background-size: 200% 100%;
      background-position: -100%;
      display: inline-block;
      padding: 5px 0;
      position: relative;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      transition: all 0.3s ease-in-out;
    }
    

    @phenomlab said in hover link effect:

    .posts .content a:not(.noanimate) {
    background-image: linear-gradient(to right, #54b3d6, #54b3d6 50%, #337ab7 50%);
    background-size: 200% 100%;
    background-position: -100%;
    display: inline-block;
    padding: 5px 0;
    position: relative;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    transition: all 0.3s ease-in-out;
    }

    it’s worked, thank you.

  • @phenomlab said in hover link effect:

    .posts .content a:not(.noanimate) {
    background-image: linear-gradient(to right, #54b3d6, #54b3d6 50%, #337ab7 50%);
    background-size: 200% 100%;
    background-position: -100%;
    display: inline-block;
    padding: 5px 0;
    position: relative;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    transition: all 0.3s ease-in-out;
    }

    it’s worked, thank you.

    Hello ✋

    I play with URL/Link CSS Trick for topic on nodebb V3

    Here are 3 effects I love that I share with you I love the first one and I think it’s the one I’d keep in production.

    – Style 1 :

    test.gif

    .posts .content a {
        box-shadow: inset 0 0 0 0 var(--bs-link-color);
        color: var(--bs-link-color);
        padding: 0 .25rem;
        margin: 0 -.25rem;
        transition: color .3s ease-in-out, box-shadow .3s ease-in-out;
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover {
        color: #fff;
        box-shadow: inset 200px 0 0 0 var(--bs-link-color);
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    } 
    

    – Style 2 :

    test2.gif

     .posts .content a {
        color: var(--bs-link-color);
        background-image: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color) 50%, var(--bs-link-hover-color) 50%);
        background-size: 200% 100%;
        background-position: -100%;
        display: inline-block;
        padding: 5px 0;
        position: relative;
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        transition: all 0.3s ease-in-out;
    }
    
    .posts .content a:hover {
     background-position: 0;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    – Style 3 :

    test3.gif

    .posts .content a {
        color: var(--bs-link-color);
        text-decoration: none;
        background: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color)), linear-gradient(to right, var(--bs-link-hover-color), var(--bs-link-hover-color), var(--bs-link-hover-color));
        background-size: 100% 3px, 0 3px;
        background-position: 100% 100%, 0 100%;
        background-repeat: no-repeat;
        transition: background-size 400ms;
        padding-bottom: 3px;
    }
    
    .posts .content a:hover {
     background-size: 0 3px, 100% 3px;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    –> It’s up to you to play with colors, adapt the code to your environment etc.

    Have fun 😉

  • Hello ✋

    I play with URL/Link CSS Trick for topic on nodebb V3

    Here are 3 effects I love that I share with you I love the first one and I think it’s the one I’d keep in production.

    – Style 1 :

    test.gif

    .posts .content a {
        box-shadow: inset 0 0 0 0 var(--bs-link-color);
        color: var(--bs-link-color);
        padding: 0 .25rem;
        margin: 0 -.25rem;
        transition: color .3s ease-in-out, box-shadow .3s ease-in-out;
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover {
        color: #fff;
        box-shadow: inset 200px 0 0 0 var(--bs-link-color);
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    } 
    

    – Style 2 :

    test2.gif

     .posts .content a {
        color: var(--bs-link-color);
        background-image: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color) 50%, var(--bs-link-hover-color) 50%);
        background-size: 200% 100%;
        background-position: -100%;
        display: inline-block;
        padding: 5px 0;
        position: relative;
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        transition: all 0.3s ease-in-out;
    }
    
    .posts .content a:hover {
     background-position: 0;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    – Style 3 :

    test3.gif

    .posts .content a {
        color: var(--bs-link-color);
        text-decoration: none;
        background: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color)), linear-gradient(to right, var(--bs-link-hover-color), var(--bs-link-hover-color), var(--bs-link-hover-color));
        background-size: 100% 3px, 0 3px;
        background-position: 100% 100%, 0 100%;
        background-repeat: no-repeat;
        transition: background-size 400ms;
        padding-bottom: 3px;
    }
    
    .posts .content a:hover {
     background-size: 0 3px, 100% 3px;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    –> It’s up to you to play with colors, adapt the code to your environment etc.

    Have fun 😉

    @DownPW these look great! Thanks for sharing.

  • Hello ✋

    I play with URL/Link CSS Trick for topic on nodebb V3

    Here are 3 effects I love that I share with you I love the first one and I think it’s the one I’d keep in production.

    – Style 1 :

    test.gif

    .posts .content a {
        box-shadow: inset 0 0 0 0 var(--bs-link-color);
        color: var(--bs-link-color);
        padding: 0 .25rem;
        margin: 0 -.25rem;
        transition: color .3s ease-in-out, box-shadow .3s ease-in-out;
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover {
        color: #fff;
        box-shadow: inset 200px 0 0 0 var(--bs-link-color);
        border-radius: 0.5rem;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    } 
    

    – Style 2 :

    test2.gif

     .posts .content a {
        color: var(--bs-link-color);
        background-image: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color) 50%, var(--bs-link-hover-color) 50%);
        background-size: 200% 100%;
        background-position: -100%;
        display: inline-block;
        padding: 5px 0;
        position: relative;
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        transition: all 0.3s ease-in-out;
    }
    
    .posts .content a:hover {
     background-position: 0;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    – Style 3 :

    test3.gif

    .posts .content a {
        color: var(--bs-link-color);
        text-decoration: none;
        background: linear-gradient(to right, var(--bs-link-color), var(--bs-link-color)), linear-gradient(to right, var(--bs-link-hover-color), var(--bs-link-hover-color), var(--bs-link-hover-color));
        background-size: 100% 3px, 0 3px;
        background-position: 100% 100%, 0 100%;
        background-repeat: no-repeat;
        transition: background-size 400ms;
        padding-bottom: 3px;
    }
    
    .posts .content a:hover {
     background-size: 0 3px, 100% 3px;
    }
    
    .posts .content a:hover::before{
        width: 100%;
    }
    

    –> It’s up to you to play with colors, adapt the code to your environment etc.

    Have fun 😉

    @DownPW good job 🙂

  • Hello !!!

    I search to have this hover link effect on nodebb without success.
    If anyone has an idea, I’m a taker.

    go to the download button

    https://www.warp.dev

  • Hello !!!

    I search to have this hover link effect on nodebb without success.
    If anyone has an idea, I’m a taker.

    go to the download button

    https://www.warp.dev

    @DownPW Looking at the underlying code, class start is being added on hover by jQuery in this function

    
      document.querySelectorAll(".button-gradient, .button-transparent").forEach((button) => {
        const style = getComputedStyle(button);
    
        const lines = document.createElement("div");
    
        lines.classList.add("lines");
    
        const groupTop = document.createElement("div");
        const groupBottom = document.createElement("div");
    
        const svg = createSVG(
          button.offsetWidth,
          button.offsetHeight,
          parseInt(style.borderRadius, 10)
        );
    
        groupTop.appendChild(svg);
        groupTop.appendChild(svg.cloneNode(true));
        groupTop.appendChild(svg.cloneNode(true));
        groupTop.appendChild(svg.cloneNode(true));
    
        groupBottom.appendChild(svg.cloneNode(true));
        groupBottom.appendChild(svg.cloneNode(true));
        groupBottom.appendChild(svg.cloneNode(true));
        groupBottom.appendChild(svg.cloneNode(true));
    
        lines.appendChild(groupTop);
        lines.appendChild(groupBottom);
    
        button.appendChild(lines);
    
        button.addEventListener("pointerenter", () => {
          button.classList.add("start");
        });
    
        svg.addEventListener("animationend", () => {
          button.classList.remove("start");
        });
      });
    })
    

    The CSS for start is below

    .button-gradient.start .lines svg, .button-transparent.start .lines svg {
      animation: stroke 0.3s linear;
    }
    

    And this is the corresponding keyframe

    @keyframes stroke {
      30%, 55% {
        opacity: 1;
      }
      100% {
        stroke-dashoffset: 5;
        opacity: 0;
      }
    }
    

    It’s using both CSS and SVG, so might not be a simple affair to replicate without the SVG files.


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee ☕
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • The best css to customize our logo?

    Solved Customisation css
    2
    1 Votes
    2 Posts
    3k Views
    @Sala This should look better .sidenav .navbar-brand { padding-top: 0.5rem; padding-bottom: 0.5rem; } [image: 1669026666905-e5cec20e-be36-4ee8-9129-fd11ad4656ac-image.png] You can increase the top and bottom padding by increasing the values above.
  • Make logo rotate on page load and hover

    Solved Customisation
    20
    2 Votes
    20 Posts
    6k Views
    @phenomlab grrrrrrr [image: grrr.gif] that simple… Thanks Mark
  • Blinking text Effect

    Customisation nodebb text effect css
    3
    5 Votes
    3 Posts
    2k Views
    @phenomlab I love it too @phenomlab said in Blinking text Effect: Has that “broken neon light” look that you see in films. It’s exactly that, kind of old neon signs of bar or pubs a bit cyberpunk too
  • [NODEBB] Help for my custom CSS

    Solved Customisation nodebb css bugfix
    258
    49 Votes
    258 Posts
    161k Views
    mark hi, Refused to apply style from ‘https://efelsefe.com/assets/customfonts/FontAwesome-6-Pro/pro/css/v4-font-face.css’ because its MIME type (‘text/plain’) is not a supported stylesheet MIME type, and strict MIME checking is enabled. I keep getting this error.
  • [NodeBB] Import custom Font

    Solved Customisation custom fonts nodebb css
    12
    3 Votes
    12 Posts
    4k Views
    @cagatay you’ll need to define this in the body tag (or another element if you want greater or more granular targets) - for example body { font-family: "Poppins"; font-size: 16px; } Essentially, you use the font-size CSS directive.
  • [NODEBB] Welcome Message

    Solved Customisation css html nodebb
    20
    2
    13 Votes
    20 Posts
    8k Views
    @DownPW the ‘js’ code for the banner takes the time from the client, so what it displays really depends on the regional settings for the operating system. I’ve not seen this issue myself but would like to see some examples of screenshots if possible.
  • Avatar on Topic Header

    Solved Customisation css avatar header
    9
    1
    0 Votes
    9 Posts
    3k Views
    @jac said in Avatar on Topic Header: @downpw said in Avatar on Topic Header: Great Plugin I make it a bit cleaner via this CSS code: /*------------------------------------------------------------------*/ /*---------------- nodebb-plugin-browsing-users -----------------*/ /*------------------------------------------------------------------*/ /*Space between the avatar and the RSS icon */ .topic [component="topic/browsing-users"] { margin-bottom: -5px; padding-left: 10px; } /*Space between avatars*/ .pull-left { float: left!important; padding-right: 5px; } Do you have a screenshot of how this looks with the CSS change? Just added this change, thanks @DownPW
  • CSS Help on my Flarum

    Solved Customisation
    5
    2
    2 Votes
    5 Posts
    3k Views
    @mike-jones Yes, you’ll typically see this type of behaviour if there is another style that has higher priority in the sense that yours will be overridden. Using !important will override the higher preference, but should be used sparingly rather than everywhere.