alinhar submenu à esuerda ou à direita de forma automática

188 views
Skip to first unread message

www.vitorneves.com

unread,
Sep 3, 2013, 5:02:52 AM9/3/13
to php-b...@googlegroups.com
Viva pessoal

Não se o tópico é off ou n, pois não sei qual a melhor forma de fazer.
Tenho um menu com submenus q carrega a informação vinda da base de dados.
Agora queria que ele alinhasse à esquerda ou à direita (tem um classe que faz isso) consoante a largura do viewport.
Ou seja quero que por defeito ele alinhe à esquerda, mas caso o submenu fique fora das medidas do viewport ele alinhe à direita e em último caso, caso alinhando à direita tb fique fora do viewport, deverá ficar alinhar à esquerda.

Já agora aqui fica o link para o menu que usei como base.
http://nettuts.s3.amazonaws.com/819_megamenu/demo/index.html

Agradeço qq dica.

Att,
Vitor Neves

Jean Rafael Tardem Delefrati

unread,
Sep 3, 2013, 10:17:13 AM9/3/13
to php-b...@googlegroups.com
Na minha opinião é off, isso é client-side porque o PHP mesmo não consegue pegar a largura da página. 
Pode ser feito com Javascript ou CSS. Pesquisa por "design responsivo".

Pode usar o Javascript para pegar a largura da tela e aplicar a classe que você escolheu, ou pode usar @media (max-width) do CSS (que é mais fácil).

Ou, numa gambiarra maluca você pode pegar o tamanho da tela pelo Javascript e passar por ajax/json para o PHP e tratar nele o que for usar.


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/php-brasil.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Vitor Neves

unread,
Sep 3, 2013, 4:38:51 PM9/3/13
to php-brasil
Oi Jean

Obrigado pelas dicas.
Agora estava a pensar numa outra solução, mas não tenho a certeza se é possível.
Os menus principais são arrays, por isso é possível contar quantos menus principais/arrays tenho.
Agora a minha está em saber se n seria possivel pegando esse valor e q apartir do array x ou y ele escreve o nome da classe q existe q faz o menu alinhar à direita.

É possível fazer isto?

Atentamente,

Vitor Neves

----------------------------------------------------------------------------
Telm. +351.964805453
 | Skype: vitorneves.com
www.vitorneves.com

----------------------------------------------------------------------------



2013/9/3 Jean Rafael Tardem Delefrati <jeande...@gmail.com>

Jean Rafael Tardem Delefrati

unread,
Sep 4, 2013, 8:10:30 AM9/4/13
to php-b...@googlegroups.com
Nesse caso dá para fazer em PHP ou Javascript:

<style>
.esquerda {
  float: left;
}
.direita{
  float: right;
}
<?php 
$classe = count($seu_menu_em_array)>3?"esquerda":"direita"; //Exemplo, se for maior que 3 itens
?>
<ul class="<?= $classe ?>">

(fora do escopo do grupo:)
JQuery: função size() (http://api.jquery.com/size/)

Seria isso?


Vitor Neves

unread,
Sep 4, 2013, 9:18:41 AM9/4/13
to php-brasil
Viva Jean

Obrigado

Atentamente,

Vitor Neves

----------------------------------------------------------------------------
Rua Casal do Conde, 7 - 3º Dto | 2330-522 Entroncamento
Telef. +351.249403801 | Telm. +351.964805453
MSN:
in...@vitorneves.com | Skype: vitorneves.com
www.vitorneves.com

----------------------------------------------------------------------------

Vitor Neves

unread,
Sep 4, 2013, 12:58:49 PM9/4/13
to php-brasil
Viva Jean

Me tira só uma dúvida, dessa forma por exemplo se o numero de arrays do menu for 5 ele coloca os 3 primeiros para um lado e os restantes para o outro?

Atentamente,

Vitor Neves

----------------------------------------------------------------------------
Rua Casal do Conde, 7 - 3º Dto | 2330-522 Entroncamento
Telef. +351.249403801 | Telm. +351.964805453
MSN:
in...@vitorneves.com | Skype: vitorneves.com
www.vitorneves.com

----------------------------------------------------------------------------



Jean Rafael Tardem Delefrati

unread,
Sep 4, 2013, 4:19:06 PM9/4/13
to php-b...@googlegroups.com
Não, do jeito que eu fiz era só jogar tudo para a direita ou jogar tudo para a esquerda, era só um exemplo.

Teria que fazer um loop e tal e ao invés de aplicar à <ul>, teria que aplicar à <li>.

Algo do tipo:
<ul>
<?php
for($i=0; $i<=count($menus); $i++):
    $item = $menus[$i];
    $classe = ($i<=2)?"esquerda":"direita";
    ?><li class="<?= $classe ?>"><?= $item ?></li><?php
endfor;
?>

Ou então dividindo o menu em dois (que fica melhor):
<?php
$menu_esquerda = array_slice($menu, 0, 3);
$menu_direita = array_slice($menu, 4);
?>
<nav class="menu">
<ul class="esquerda">
<?php
for($i=0; $i<=count($menu_esquerda); $i++):
    $item = $menu_esquerda[$i];
    ?><li><?= $item ?></li><?php
endfor;
?>
</ul>
<ul class="direita">
<?php
for($i=0; $i<=count($menu_direita); $i++):
    $item = $menu_direita[$i];
    ?><li><?= $item ?></li><?php
endfor;
?>
</ul>
</nav>

Repare que a sintaxe alternativa (for / endfor) é só uma sugestão para deixar mais visível no meio do HTML e não vai funcionar direito se for misturar com a sintaxe padrão com as chaves ({}): http://php.net/manual/pt_BR/control-structures.alternative-syntax.php

Abraço


Vitor Neves

unread,
Sep 4, 2013, 4:32:53 PM9/4/13
to php-brasil
Valeu Jean

Obrigado.

Atentamente,

Vitor Neves

----------------------------------------------------------------------------
Rua Casal do Conde, 7 - 3º Dto | 2330-522 Entroncamento
Telef. +351.249403801 | Telm. +351.964805453
MSN:
in...@vitorneves.com | Skype: vitorneves.com
www.vitorneves.com

----------------------------------------------------------------------------



2013/9/4 Jean Rafael Tardem Delefrati <jeande...@gmail.com>
Reply all
Reply to author
Forward
0 new messages