@drawoharaj' ❤️ ceci ! << clique moi 🐛 🫖 🧚
/eventually-all-products-merge-into-one-and-a-list-runs-through-it
publié le: 2012-07-10

Récemment, en aidant un client à marquer une Shopify thème, je suis tombé sur un problème épineux : comment fusionner la sortie d'une boucle avec celle d'une autre de manière transparente. Permettez-moi de vous expliquer.

La plupart des thèmes Shopify incluent un "modèle de collection" où les produits sont listés via une Liquid boucle. Figure 1 montre comment de telles listes prennent souvent forme.

Maquettes
Figure 1 : Une liste typique de produits Shopify

Si vous n'êtes pas opposé à l'utilisation de TABLEs pour de telles mises en page, Liquid vous couvre avec son TABLEROW tag (référence). Si les systèmes de grille sont plus votre vitesse, vous voudrez employer une sorte de hack de wrapping de ligne, puisque Liquid n'a pas d'énumérateur each_slice() ou d'opérateur modulus.

Mais si vous, comme moi, pensez que le marquage approprié sémantiquement pour une liste de produits est une liste non ordonnée (UL), vous êtes engagé à travailler avec un flux de LIs.

Comme je l'ai mentionné ci-dessus, cette conception nécessitait qu'une liste de collections de produits apparaisse en ligne avec la liste de produits, mais pas n'importe où. Elle était censée être le troisième élément de la première rangée, comme le montre Figure 2.

Disposition Souhaitée
Figure 2 : Apparemment, une boucle de liste de produits interrompue par une liste de navigation

Maintenant, je ne voulais pas commencer une boucle, l'arrêter, en commencer une autre, l'arrêter, puis commencer la première à nouveau avec un décalage approprié. Cela semblait trop manuel. Encore une fois, je voulais que la sortie soit un flux de LIs comme ceci :

Donc, cela m'a laissé avec deux choix pour la mise en page de ce flux de LIs : les flotter et les dégager ou les inline-blocker.

Il est assez facile d'imaginer comment vous pourriez obtenir la mise en page souhaitée avec des flottants, en flottant chaque LI à gauche, sauf pour le premier, qui serait flotté à droite. Mais l'option de flottement nécessite un dégagement soigneux—à la fois le UL lui-même et chaque troisième LI (en commençant par le premier) doivent être dégagés afin d'éviter le problème révélé dans Figure 3.

Problème de Flottement
Figure 3 : Lorsque le premier LI de chaque "rangée" n'est pas dégagé...

Le tag CYCLE de Liquid (référence) est un moyen pratique de le faire, tout comme les pseudo-sélecteurs positionnels de CSS3 positional pseudo selectors. Mais, lorsque le support IE7/IE8 est requis, le cyclage est le meilleur pari.

Pourtant, cette maison de cartes de dégagement me semblait fragile, alors j'ai entrepris de mettre en œuvre la technique de liste inline-block mentionnée précédemment.

Ce qui m'a amené à mi-chemin, comme le montre Figure 4.

Initial Inline Block
Figure 4 : Première tentative de mise en page inline-block

Bien que la technique inline-block m'ait libéré des préoccupations de dégagement, j'ai toujours dû faire face au défi de positionnement du design : la liste de navigation de produits devait être alignée à droite dans la première rangée. La flotter à droite n'était pas non plus la solution, car cela aurait soumis notre mise en page au même risque montré dans Figure 3.

C'est alors que j'ai eu une idée folle : et si je changeais la direction de la langue du UL pour que la liste s'affiche de droite à gauche ? Encouragé par un article récent de Chris Coyier, j'ai décidé d'essayer. Voici ce que j'ai finalement trouvé :

Comme vous pouvez le voir, j'ai dû changer la direction de la langue sur le UL conteneur, puis la réinitialiser sur les éléments à l'intérieur de ses LIs (pour une raison quelconque, la réinitialisation de la direction de la langue sur les LIs eux-mêmes ne fonctionnait pas dans Opera). J'ai également dû définir la taille de la police du UL à zéro afin d'éviter ceci.

Puisque la liste des produits de ce magasin ne nécessitait pas d'ordre spécifique (alphabétique, prix, etc.), il était acceptable que la sortie s'écoule de droite à gauche, comme le montre Figure 5.

Inline Block Final
Figure 5 : le changement de direction de la langue en action

Bien qu'il y ait des avantages et des inconvénients aux mises en page flottantes et inline-block, j'ai trouvé que cette dernière était un peu plus élégante dans cette situation. L'un de vous a-t-il déjà rencontré cela ? Êtes-vous hanté par les listes ?