Instead of relying on jQuery for this, you can make two elements glued together in CSS by making them inline elements, making them touch and setting the CSS container to white-space: nowrap .
HTML:
<div id="main"> <p>If the draw is popped out, and you resize the page, it breaks, because it has position:absolute</p> <div id="clickable"> <div id="trigger"> <span>Click here - click away to hide</span> </div><div id="pop"> <span>Now Resize Page</span> </div> </div> </div>
Please note that </div><div id="pop"> not a typo. To make inline elements touch, you need to remove all spaces in your markup.
CSS
#main { width:300px; margin:50% auto; margin-top:0; margin-bottom:0; background-color:#EEE; padding:10px; } #clickable { white-space: nowrap; } #trigger { background-color: #FFF; width: 100%; border: 4px solid #ddd; display: inline-block; } #trigger span { margin: 5px; display: block; } #pop { background-color: #333; color: #EEE; height: 38px; opacity: 0; display: none; } #pop span { margin: 10px; display: block; }
JS:
$('#trigger').click(function(event) { event.stopPropagation(); var width = $(this).outerWidth(); var offset = $(this).offset(); var top = (offset.top+4)+'px'; var left = (offset.left+width)+'px'; $('#pop').css({ 'top' : top, 'left' : left, 'display' : 'inline-block', 'opacity' : 0, 'width' : 0 }).animate({ 'width' : '140px', 'opacity' : 1 }); }); $('html').click(function(event) { if (!($(event.target).closest('#pop').length)) { $('#pop').animate({'width':0,'opacity':0},500, function() { $(this).hide(); }); } });
Preview: http://jsfiddle.net/Wexcode/4kg2W/3/
source share