Skip to content

hover link effect

Solved Customisation
  • Hello @phenomlab

    I see this effect on link here.

    64ce4a20-4dbf-468f-9180-38e657810970-image.png

    I research how to do this or other effect and i found this code for example on css tricks

    a {
      position: relative;
    }
    
    a::before {
        content: '';
        position: absolute;
        width: 100%;
        height: 2px;
        border-radius: 2px;
        background-color: red;
        bottom: 0;
        left: 0;
        transform-origin: right;
        transform: scaleX(0);
        transition: transform .3s ease-in-out;
      }
    
    a:hover::before {
        color: red;
      transform-origin: left;
      transform: scaleX(1);
    }
    
    a:focus, a:hover {
        color: red;
    }
    

    The effect is good but he is active on reply button, quote, reply to, username and I don’t want that… Just on post (url, @mention)

    And you, what is your code ?

  • @DownPW

    reply to me, maybe .posts .content a:focus

    I will test 😉

  • @DownPW I also had some issues with this effect showing on unwanted elements, and off the top of my head I can’t recall the CSS I used, but will check.

  • @phenomlab

    .posts .content seems to be pretty good for me 😉

  • @DownPW said in hover link effect:

    @phenomlab

    .posts .content seems to be pretty good for me 😉

    it not worked on my web site.

  • @DownPW My CSS is as below

    .content p a:not(.noanimate):after {    
      background: none repeat scroll 0 0 transparent;
      bottom: 0;
      content: "";
      display: block;
      height: 1px;
      left: 0%;
      position: absolute;
      background: var(--link);
      transition: width 0.3s ease 0s, left 0.3s ease 0s;
      width: 0;
    }
    .content p a:hover:after { 
      width: 100%; 
      left: 0; 
    }
    
  • @phenomlab

    And here is mine with mirror effect on the text (for default theme) 😉

    .posts .content a {
      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;
    }
    
    .posts .content a:before {
      content: '';
      background: #54b3d6;
      display: block;
      position: absolute;
      bottom: 1px;
      left: 0;
      width: 0;
      height: 1px;
      transition: all 0.3s ease-in-out;
    } 
    
    .posts .content a:hover {
     background-position: 0;
    }
    
    .posts .content a:hover::before{
      width: 100%;
    }
    
  • DownPWundefined DownPW has marked this topic as solved on
  • With my code the only problem is I have the same effect on images (on mouse hover) that contain a url.

    Do you have a solution to fix this @phenomlab ?

  • @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;
    }
    
  • @phenomlab

    Thanks dude I will test that

  • @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 😉

  • @DownPW these look great! Thanks for sharing.

  • @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

  • @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? Why not buy me a coffee? It's a nice gesture, and a great way to show your appreciation 💗

Related Topics
  • CSS border gradients

    Blog
    10
    2 Votes
    10 Posts
    467 Views

    ah f5 need 🙂

  • The theme came with space on left side

    Solved WordPress
    7
    3 Votes
    7 Posts
    563 Views

    @phenomlab yes it’s a different theme. The other one was not offering much on editable sidebar. It was like flarum hahah

  • Widget | CSS customization

    Solved WordPress
    53
    17 Votes
    53 Posts
    3k Views

    @Sala the only way you can achieve this is to use a robots.txt file and disallow access to those links.

  • Link Text Colour.

    Solved Customisation
    5
    2 Votes
    5 Posts
    417 Views

    @phenomlab Thx again for the reply.

    Well I am sure that it will be well worth the wait. 🙂 I will watch with anticipation. For now it is OK. Just small minor irritations I fell in a lot of NodeBB ‘default’ things.

  • Blinking text Effect

    Customisation
    3
    5 Votes
    3 Posts
    462 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 😉

  • Avatar on Topic Header

    Solved Customisation
    9
    0 Votes
    9 Posts
    658 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 🙂

  • Reading Meter Progress bar

    Locked Solved Customisation
    15
    9 Votes
    15 Posts
    1k Views

    For anyone else following this thread, please see
    https://sudonix.com/topic/467/issues-with-progress-bar-on-v3

  • Bug Navbar CSS

    Solved Customisation
    3
    1 Votes
    3 Posts
    362 Views

    Not better way.

    Thanks.