Uitklap menu en positie andere divs
Jointjeff - 01/11/2011 10:15 (laatste wijziging 01/11/2011 10:25)
HTML interesse
Goedemorgen iedereen,
Ik heb een menu die kan uitklappen, zowel horizontaal als verticaal. Het "probleem", of beter gezegd uitdaging, is op het moment wanneer het menu in de breedte uitklapt dat de andere divs, in dit geval #content wat verplaatst naar rechts.
Zie ook deze screenshots om een een beter beeld te krijgen van de situatie.
- http://vrds.nl/sima/screens/afb1.jpg
- http://vrds.nl/sima/screens/afb2.jpg
CSS:
Plaatscode: 141368
HTML code:
Plaatscode: 141369
Hopende op hulp om dit met CSS dan wel jQuery voor elkaar te krijgen.
10 antwoorden
Gesponsorde links
vinTage - 01/11/2011 10:41
Nieuw lid
met jQuery kan je gemakkelijk content wat opzij zetten met css
Je knoopt een hover en click aan je main menu en gaat daarin klooien met die css.
Jointjeff - 01/11/2011 10:48
HTML interesse
Heb ik ook geprobeerd. Het ging alleen mis op het punt, dat de content dan ook weer terug moet als het menu dichtgeklapt is, en dat de content niet telkens als er geklikt wordt b.v. 200px naar rechts gaat.
jQuery code menu:
Plaatscode: 141370
Bedankt voor je antwoord!
vinTage - 01/11/2011 10:55
Nieuw lid
je kan bv met een timertje kijken of het menu dicht mag klappen, (als de muis zich niet in het menu bevind).
Jointjeff - 01/11/2011 10:59 (laatste wijziging 01/11/2011 11:40)
HTML interesse
Zou je me enigszins op weg kunnen helpen om dat te bewerkstelligen?
Wederom bedankt voor je antwoord.
Was nog even verder gegaan met het eerdere idee. Enig idee waarom dit niet werkt (hover wel, click niet)?
$(function() {
$('#menu li ul li a').click( function(){
$('#content').css('left', '420px');
},
function(){
$('#content').css('left', '210px');
});
});
$( function ( ) {
$( '#menu li ul li a' ) .click ( function ( ) {
$( '#content' ) .css ( 'left' , '420px' ) ;
} ,
function ( ) {
$( '#content' ) .css ( 'left' , '210px' ) ;
} ) ;
} ) ;
vinTage - 01/11/2011 13:47
Nieuw lid
waneer wil je dan wanneer je 'sub' weer verdwijnt ?
Jointjeff - 01/11/2011 13:49 (laatste wijziging 01/11/2011 13:50)
HTML interesse
als er een ander menu-item aangeklikt wordt.
vinTage - 01/11/2011 13:56 (laatste wijziging 01/11/2011 13:56)
Nieuw lid
dus niet als je van het menu af gaat ?
Dan blijft het dus altijd openstaan nadat je op het menu hovert/klikt (en tot je op een ander item klikte))?
Jointjeff - 01/11/2011 14:03
HTML interesse
Daar heb je een goed punt. Wellicht is dat irritant voor gebruikers inderdaad.
Oke, wanneer je van het menu af gaat toch maar.
vinTage - 01/11/2011 14:15
Nieuw lid
zo iets:
<style>
#menu{
width:100px;
float:left;
background:grey
}
#content{
width:500px;
float:left
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
$(document).ready(function () {
$('#menu').css('height', $(window).height());//voor het gemak even de hele hoogte van de pagina gebruik
$('#menu a').click( function(){
$('#menu').animate({width: "200px"}, 300);
});
$('#menu a').mouseover( function(){
$('#menu').animate({width: "200px"}, 300);
});
$('#menu').mouseleave( function(){
$('#menu').animate({width: "100px"}, 300);
});
});
</script>
<div id="menu">
<a href="#">linkje</a>
</div>
<div id="content">
<?php echo str_repeat('content div inhoud<br />', 25);?>
</div>
#menu{
width:100px;
float:left;
background:grey
}
#content{
width:500px;
float:left
}
<script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" ></ script > $(document).ready(function () {
$('#menu').css('height', $(window).height());//voor het gemak even de hele hoogte van de pagina gebruik
$('#menu a').click( function(){
$('#menu').animate({width: "200px"}, 300);
});
$('#menu a').mouseover( function(){
$('#menu').animate({width: "200px"}, 300);
});
$('#menu').mouseleave( function(){
$('#menu').animate({width: "100px"}, 300);
});
});
<?php echo str_repeat( 'content div inhoud<br /> ', 25);?>
Jointjeff - 04/11/2011 11:41 (laatste wijziging 04/11/2011 14:30)
HTML interesse
Hallo Vintage,
Bedankt voor je antwoord.
Op een of andere manier reageert hij niet op de click functie (ook niet als ik jou voorbeeld toepas), maar wel op de mouseover.
Dit is mijn accordion script, wellicht heeft het hier mee te maken.
jQuery.fn.initMenu = function() {
return this.each(function(){
var theMenu = $(this).get(0);
$('.sub-menu', this).hide();
$('li.current-menu-parent > .sub-menu', this).show();
$('li.current-menu-parent > .sub-menu', this).prev().addClass('active');
$('li a', this).click(
function(e) {
e.stopImmediatePropagation();
var theElement = $(this).next();
var parent = this.parentNode.parentNode;
if($(parent).hasClass('noaccordion')) {
if(theElement[0] === undefined) {
window.location.href = this.href;
}
$(theElement).slideToggle('normal', function() {
if ($(this).is(':visible')) {
$(this).prev().addClass('active');
}
else {
$(this).prev().removeClass('active');
}
});
return false;
}
else {
if(theElement.hasClass('sub-menu') && theElement.is(':visible')) {
if($(parent).hasClass('collapsible')) {
$('.sub-menu:visible', parent).first().slideUp('normal',
function() {
$(this).prev().removeClass('active');
}
);
return false;
}
return false;
}
if(theElement.hasClass('sub-menu') && !theElement.is(':visible')) {
$('.sub-menu:visible', parent).first().slideUp('normal', function() {
$(this).fadeOut().prev().removeClass('active');
});
theElement.slideDown('normal', function() {
$(this).prev().addClass('active');
});
return false;
}
}
}
);
});
};
$(document).ready(function() {$('.main').initMenu();});
jQuery.fn .initMenu = function ( ) {
return this .each ( function ( ) {
var theMenu = $( this ) .get ( 0 ) ;
$( '.sub-menu' , this ) .hide ( ) ;
$( 'li.current-menu-parent > .sub-menu' , this ) .show ( ) ;
$( 'li.current-menu-parent > .sub-menu' , this ) .prev ( ) .addClass ( 'active' ) ;
$( 'li a' , this ) .click (
function ( e) {
e.stopImmediatePropagation ( ) ;
var theElement = $( this ) .next ( ) ;
var parent = this .parentNode .parentNode ;
if ( $( parent) .hasClass ( 'noaccordion' ) ) {
if ( theElement[ 0 ] === undefined) {
window.location .href = this .href ;
}
$( theElement) .slideToggle ( 'normal' , function ( ) {
if ( $( this ) .is ( ':visible' ) ) {
$( this ) .prev ( ) .addClass ( 'active' ) ;
}
else {
$( this ) .prev ( ) .removeClass ( 'active' ) ;
}
} ) ;
return false ;
}
else {
if ( theElement.hasClass ( 'sub-menu' ) && theElement.is ( ':visible' ) ) {
if ( $( parent) .hasClass ( 'collapsible' ) ) {
$( '.sub-menu:visible' , parent) .first ( ) .slideUp ( 'normal' ,
function ( ) {
$( this ) .prev ( ) .removeClass ( 'active' ) ;
}
) ;
return false ;
}
return false ;
}
if ( theElement.hasClass ( 'sub-menu' ) && ! theElement.is ( ':visible' ) ) {
$( '.sub-menu:visible' , parent) .first ( ) .slideUp ( 'normal' , function ( ) {
$( this ) .fadeOut ( ) .prev ( ) .removeClass ( 'active' ) ;
} ) ;
theElement.slideDown ( 'normal' , function ( ) {
$( this ) .prev ( ) .addClass ( 'active' ) ;
} ) ;
return false ;
}
}
}
) ;
} ) ;
} ;
$( document) .ready ( function ( ) { $( '.main' ) .initMenu ( ) ; } ) ;
EDIT:
Kun je niet instellen dat wanneer "#menu ul li ul li ul" wel zichtbaar is (ipv niet) het menu 420px breed is in plaats van 220px?
EDIT 2:
Deze code lijkt te werken.
if ($('#menu ul li ul li ul').is(':visible')) { $('#menu').css('width','440px');
} else { $('#menu').css('width','240px');
}
if ( $( '#menu ul li ul li ul' ) .is ( ':visible' ) ) { $( '#menu' ) .css ( 'width' , '440px' ) ;
} else { $( '#menu' ) .css ( 'width' , '240px' ) ;
}
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.