Suite du fil http://forum.alsacreations.com/topic-1-73922-1-Jarrive-pas-a-centrer-mon-menu-et-autre-.html
audrasjb a écrit :
Il est vrai que ma solution rapide à la question soulevée par GaranceT ne répond pas parfaitement à la question : en effet, ça ne marche plus parfaitement si le texte du lien passe sur deux lignes. Mais les solutions élégantes (plus qu'un traitement JS en tout cas Smiley cligne ) existent, et ne sont pas très compliquées à mettre en place Smiley smile

Désolé, je ne parlais pas centrer verticalement mais horizontalement.

Ne parvenant pas à mettre sur ce forum une image lisible (elle est trop petite pour qu'on voie les détails) je joins un code simple:
<div class="menu">
            <div class="menuitem">Galeries</div>
            <div class="menuitem">Paravents</div>
            <div class="menuitem">L'Artiste</div>
            <div class="menuitem">Actualités</div>
            <div class="menuitem">Revue de presse</div>
            <div class="menuitem">Contact</div>
        </div>


           .menu {
                width:80%;
                display: table-cell;
                vertical-align: middle;
                text-align:center;
                margin: auto;
                border:1px solid red;
                height:100px;
            }
            .menuitem {
                float:left;
                white-space: nowrap;
                padding: 0 5px;
                text-align:center;
                border:1px solid blue;
            }

Pour des raisons que je comprends très bien, la div "menu" est bien centrée dans la page, et les "menuitem" sont à gauche de cette div.

Ce que je voudrais faire: la même chose que (code simplifié)

<div id="main_menu">
    <table align="center">
         <tr class="menu-row">
                <td id="galleries" class="menu">Galeries</td>
                <td id="screens" class="menu" >Paravents</td>
                <td id="artist" class="menu">L'Artiste</td>
                <td id="news" class="menu">Actualités</td>
                <td id="pressbook" class="menu" >Revue·de·presse</td>
                <td id="contact" class="menu">Contact</td>
         </tr>
    </table>
</div>


De plus, si la largeur de l'écran est trop petite pour contenir les 6 entrées (écran de smart phone par exemple) je voudrais que les entrées se répartissent sur 2 lignes, chacune étant centrée.

Actuellement, pour réaliser cette présentation, je fais un programme javascript qui:
1) calcule la largeur en px de chaque entrée
2) en déduit combien d'entrées sont à mettre en ligne 1 et combien en ligne 2 si nécessaire
3) génère une ou deux tables centrées similaires à celle décrite ci-dessus.

voir http://www.bonieux.com faire varier la largeur de la fenêtre et rafraichir pour voir le résultat.
Je ne l'ai pas asservi à un "on resize", l'idée étant surtout de s'adapter à des largeurs d'écran différentes, plutôt que s'adapter à des.changements dynamiques de largeur de fenêtre du navigateur


Ça marche très bien, mais si ça pouvait se faire en CSS, ça m'éviterait le javascript, surtout que j'ai pas mal d'autres cas où j'utilise une technique similaire faute d'avoir trouvé mieux.
Modérateur
Bonjour,


Wow ça sort l'artillerie OVER-lourde pour un simple petit menu....!! Restons simple...
Avec ce html
<div class="menu">
            <div class="menuitem">Galeries</div>
            <div class="menuitem">Paravents</div>
            <div class="menuitem">L'Artiste</div>
            <div class="menuitem">Actualités</div>
            <div class="menuitem">Revue de presse</div>
            <div class="menuitem">Contact</div>
</div>

On peut faire un centrage simplement en css :
.menu{
    text-align:center;
}
.menuitem{
    display:inline-block;
    vertical-align:top;
    padding:10px;
}

ici en test : http://jsfiddle.net/Undless/ez0kpbtb/

J'ai peut être pas tout compris parce-que là j'ai du mal a cerner ou est le problème d'un centrage horizontal....
_laurent a écrit :
J'ai peut être pas tout compris parce-que là j'ai du mal a cerner ou est le problème d'un centrage horizontal....

Bonjour Laurent
Merci beaucoup, ça a l'air de ressembler à ce que je veux faire (je crois même que c'est tout à fait ça!), je vais regarder de très près, et surtout essayer de comprendre pourquoi je n'y avais pas pensé.
Sans doute parce que les programmeurs ont tendance à programmer: quand on ne trouve pas de solution évidente, c'est si facile de faire un programme, surtout qu'avec le temps on a dans sa boite à outil des tas de choses qui fonctionnaient déjà dans les années 90 (voire avant) et qui font à peu près ce qu'on veut.
Les langages déclaratifs (xslt ou css) ont toujours un aspect bizarre et difficile à comprendre pour des gens qui ont programmé en assembleur depuis les années 1960...
Modifié par PapyJP (02 Dec 2014 - 14:22)
Modérateur
Oui je pense voir comment on en arrive vite là en passant a coté du très (trop) basique Smiley ravi
Mais le contraste entre le fait que t'ai codé ça en js par rapport à un centrage horizontal de div m'a fait douter !
Tiens nous au jus (de kiwi) de ton avancement !
_laurent a écrit :
Oui je pense voir comment on en arrive vite là en passant a coté du très (trop) basique Smiley ravi
Mais le contraste entre le fait que t'ai codé ça en js par rapport à un centrage horizontal de div m'a fait douter !
Tiens nous au jus (de kiwi) de ton avancement !

Le truc c'est "display:inline-block;". J'étais parti sur l'idée que pour mettre des div côte à côte il fallait mettre "float:left;", ce qui fait perdre le centrage. Je me demande du reste si des <span> ne suffiraient pas.
En fait détricoter mon script n'est pas si simple, je préfère m'y mettre à tête reposée.
Merci encore, je mettrai l'avancement de mes travaux sur le forum, bien entendu.

"Valar murghulis", certes, mais le plus tard sera le mieux!
Modifié par PapyJP (02 Dec 2014 - 22:10)
Comme promis: j'ai effectivement nettoyé le code de pas mal de choses liées au centrage des menus.
Merci encore à Laurent pour m'avoir signalé une solution évidente que je n'avais pas vue.

Je vais sans doute poser d'autres questions sur forum pour voir comment d'autres choses que je calcule actuellement par Javascript pourraient être avantageusement remplacées par du CSS.
Mieux vaut tard...