Site logo

Archived topic

Close icon for top bar widget

10 replies · Started by George on May 22, 2018

Viewing posts 1–11 of 11

Hello. I want to be able to have a close(X) icon to close the top bar widget and make it disappear. I don't mind if it opens up again on another page refresh(that's what I want actually!) but I would like to be able to close it(preferable with a slide out animation). I know I can use a notification top bar plugin but I would like to be able to use GP's top bar while it's there. Is there a way to accomplish that?

Interesting question!

You might be able to do something like this:

CSS:

.top-bar {
    transition: transform 500ms ease;
    position: fixed;
    left: 0;
    right: 0;
}

jQuery (added in wp_footer surrounded by <script></script> tags, or in your JS file:

jQuery( document ).ready( function( $ ) {
    $( '.my-close-element' ).on( 'click', function( e ) {
        e.preventDefault();

        $( '.top-bar' ).css( 'transformY', '-100px' );
    } );
} );

This assumes you have an element within your top bar like this:

<a href="#" class="my-close-element">Close me</a>

Ok, that seemed to work for me $( '.top-bar' ).css( 'transform', 'translate(0%, -100%)' );. The only thing now is that after adding a z-index: 1; to make the bar visible combined with the position: fixed; property, makes the bar sticky but covers the header. Is there a way to solve that? When this is done, I would also need a solution to the fact that when the elements translates up it needs to move teh page up as well as not to create a gap at the top.

Hmm, I wonder what we can do then.. Usually dismissible notices like this are fixed elements.

You could try this instead:

body {
    transition: transform 500ms ease;
}
jQuery( document ).ready( function( $ ) {
    $( '.my-close-element' ).on( 'click', function( e ) {
        e.preventDefault();

        $( 'body' ).css( 'transformY', '-50px' ); /* height of top bar */
    } );
} );

That's great Tom, I am 99% there, it looks beatiful! That worked for me by the way:

$( 'body' ).css( 'transform', 'translate(0%, -32px)' );

One more thing. Is it possible to have a condition to translate the body class to different values depended on weather the admin bar at the top is present or not? Currently I have to set my top bar the same height as the WordPress admin bar to make it 100% pixel perfect and keep the top header margins in tact, if you know what I mean.

Hi George, you could try an additional rule that targets the body .admin-bar

Hi David. Ok, good idea, I have added the div#wpadminbar class to both css and the javascript function as a separete command to translate up the same amount as the width of the bar but it doesn't seem to be taking that into account. I think it needs a javascript conditional in the form of if div#wpadminbar class is present then translate by this amount else translate by that amount. I will have a look, unless Tom saves me a few hours of searching!

Didn't take me long!

CSS

/** Top bar **/
.top-bar {
    left: 0;
    right: 0;
    z-index: 1;
}

.top-bar p {
    margin-bottom: 0;
}

.top-close-button {
    float: right; 
    clear:right; 
    margin-top: -20px;
    cursor: pointer;
}

body, div#wpadminbar, .top-bar {
    transition: transform 500ms ease;
}

JS

<script>
jQuery( document ).ready( function( $ ) {
    $( '.top-close-button' ).on( 'click', function( e ) {
        e.preventDefault();
        $( '.top-bar' ).css( 'transform', 'translate(0%, -100%)' );

        if ($('div#wpadminbar')[0]) {
            $( 'body' ).css( 'transform', 'translate(0, -82px)' );
        } else {
          $( 'body' ).css( 'transform', 'translate(0, -52px)' );
        }

    } );
} );
</script>

Values may vary according to height and contents of top bar. Thank you Tom and David!

Glad to see you got it working. And thanks for sharing!

Hi, I have just created a tutorial in my blog describing how to recreate this type of functionality:
https://bit.ly/2IXCmni

Hope it proves useful, thanks again!

Hi George, thank you for sharing your post, i am sure it will come in useful, lots of fun to be had with that one!

This archived topic is closed to new replies.