Fermer

décembre 27, 2018

Problèmes CSS courants pour les projets frontaux


À propos de l'auteur

Ahmad Shadeed est un concepteur UX / UI et développeur front-end originaire de Palestine qui aime travailler et vivre à l'intersection du code et de la conception. Il écrit sur…
Pour en savoir plus sur Ahmad

Le rendu et les interactions sont devenus beaucoup plus homogènes d'un navigateur à l'autre ces dernières années. Cependant, il n’est toujours pas parfaitement uniforme et de nombreux petits problèmes peuvent vous tromper. Ajoutez en plus de ces problèmes les variables de différentes tailles d'écran, préférences de langue et erreur humaine flagrante, et nous trouvons beaucoup de petites choses qui dérangeraient un développeur.

Lors de l’implémentation d’une interface utilisateur dans un navigateur, il est conseillé de réduire ces différences et ces problèmes autant que possible afin que l’interface utilisateur soit prévisible. Il est difficile de suivre toutes ces différences, aussi ai-je dressé une liste de problèmes courants, avec leurs solutions, comme guide de référence pratique lorsque vous travaillez sur un nouveau projet.

Commençons. [19659006]1. Bouton Réinitialiser les fonds de et entrée Eléments

Lorsque vous ajoutez un bouton, réinitialisez son arrière-plan, sinon l'apparence sera différente selon les navigateurs. Dans l'exemple ci-dessous, le même bouton est affiché dans Chrome et dans Safari. Ce dernier ajoute un fond gris par défaut.


( Grand aperçu )

La réinitialisation de l'arrière-plan résoudra le problème suivant:

 button {
  apparence: aucune;
  fond: transparent;
  / * Autres styles * /
}

Voir le stylo Le bouton et les entrées de Ahmad Shadeed ( @shadeed ) sur CodePen .

2. Débordement: faites défiler contre auto

Pour limiter la hauteur d'un élément et permettre à l'utilisateur de le faire défiler, ajoutez overflow: scroll-y . Cela aura l'air bien dans Chrome sur macOS. Cependant, sous Chrome Windows, la barre de défilement est toujours présente (même si le contenu est court). Ceci est dû au fait que scroll-y affichera une barre de défilement quel que soit le contenu, alors que overflow: auto affichera une barre de défilement uniquement si nécessaire.


À gauche: Chrome sur macOS. Droite: Chrome sous Windows. ( Grand aperçu )
 .element {
    hauteur: 300px;
    débordement-y: auto;
}

Voir le stylo overflow-y de Ahmad Shadeed ( à Shadeed ) sur CodePen .

3. Ajoutez flex-wrap

Faites qu'un élément se comporte comme un conteneur flex simplement en ajoutant display: flex . Cependant, lorsque la taille de l'écran diminue, le navigateur affiche une barre de défilement horizontale si le flex-wrap n'est pas ajouté.

 .wrapper {.
  affichage: flex;
}

.article {
  flex: 0 0 120px;
  hauteur: 100px;
}

L'exemple ci-dessus fonctionnera parfaitement sur les grands écrans. Sur le mobile, le navigateur affiche une barre de défilement horizontale.


Gauche: une barre de défilement horizontale s’affiche et les éléments ne sont pas encapsulés. Droite: Les éléments sont placés sur deux rangées. ( Grand aperçu )

La solution est assez simple. Le wrapper doit savoir que, lorsqu'il ne dispose pas d'espace libre, il doit envelopper les éléments.

 .wrapper {
    affichage: flex;
    enveloppe souple: enveloppe;
}

Voir le stylo flex-wrap de Ahmad Shadeed ( @shadeed ) sur CodePen .

4. N'utilisez pas justification-contenu: espace-entre lorsque le nombre d'éléments flexibles est dynamique

lorsque justification-contenu: espace-entre est appliqué à un conteneur flexible, il va distribuer les éléments et laisser un espace égal entre eux. Notre exemple contient huit éléments de carte, et ils ont l'air bien. Et si, pour une raison quelconque, le nombre d’articles était de sept? La deuxième rangée d'éléments serait différente de la première.


L'emballage contenant huit éléments. ( Grand aperçu )

Le wrapper avec sept articles. ( Grand aperçu )

Voir le stylo justifier-contenu de Ahmad Shadeed ( @shadeed ) sur CodePen .

Dans ce cas, utiliser la grille CSS serait plus approprié.

Lorsqu'un article est affiché sur un écran de mobile, un mot long ou un lien en ligne peut faire apparaître une barre de défilement horizontale. L’utilisation du code CSS permettra d’éviter que cela se produise.

Grand aperçu
 .article-content p {
    mot-break: tout-rompre;
}

( Grand aperçu )

Consultez CSS-Tricks pour plus de détails.

6. Dégradés transparents

Lors de l'ajout d'un dégradé avec un début et une fin transparents, cela aura l'air noir dans Safari. En effet, Safari ne reconnaît pas le mot clé transparent . En le remplaçant par rgba (0, 0, 0, 0) cela fonctionnera comme prévu. Notez la capture d'écran ci-dessous:


En haut: Chrome 70. En bas: Safari 12. ( Grand aperçu )
 .section-hero {
  fond: linéaire-dégradé (transparent, # d7e0ef), # 527ee0;
  / * Autres styles * /
}

Cela devrait plutôt être:

 .section-hero {
  arrière-plan: gradient linéaire (rgba (0, 0, 0,0), # d7e0ef), # 527ee0;
  / * Autres styles * /
}

7. Idée fausse sur la différence entre ajustement automatique et remplissage automatique dans une grille CSS

dans une grille CSS, la fonction répétition peut créer une disposition de colonne réactive sans nécessiter l'utilisation de requêtes de médias. Pour ce faire, utilisez le remplissage automatique ou le ajustement automatique .

 .wrapper {
    Grille-modèle-colonnes: répéter (remplissage automatique, minmax (100px, 1fr));
}

( Grand aperçu )

En bref, le remplissage automatique disposera les colonnes sans élargir leur largeur, alors que le réglage automatique les réduira à une largeur nulle, mais uniquement si vous avez des colonnes vides. Sara Soueidan a rédigé un excellent article sur le sujet.

8. Fixation d'éléments en haut de l'écran lorsque la fenêtre d'affichage n'est pas assez grande

Si vous corrigez un élément en haut de l'écran, que se passe-t-il si la fenêtre d'affichage n'est pas assez grande? C'est simple: cela prendra de la place à l'écran et, par conséquent, la zone verticale disponible pour que l'utilisateur puisse parcourir le site Web sera petite et inconfortable, ce qui nuira à l'expérience.

 @media (min-height: 500px ) {
    .site-header {
        position: collante;
        en haut: 0;
        / * autres styles * /
    }
}

Dans l'extrait ci-dessus, nous indiquons au navigateur de ne placer l'en-tête en haut que si la hauteur de la fenêtre d'affichage est égale ou supérieure à 500 pixels.

Également important: lorsque vous utilisez position: sticky cela ne fonctionnera que si vous spécifiez la propriété top .

Grand aperçu

Voir le stylo Requêtes de média verticales: Fixed Header de Ahmad Shadeed [ @shadeed ) sur CodePen .

9. Paramètre max-width pour les images

Lors de l'ajout d'une image, définissez max-width: 100% afin que l'image soit redimensionnée lorsque l'écran est petit. Sinon, le navigateur affichera une barre de défilement horizontale.

 img {
    largeur maximale: 100%;
}

10. Utilisation de la grille CSS pour définir main et côté La grille CSS des éléments

permet de définir les sections principales et de [miseenpagecequiestuneutilisationparfaitepourlagrilleEnconséquencelahauteurdelasection de côté sera égale à celle de l'élément principal même s'il est vide.

Pour résoudre ce problème, alignez l'élément de côté . ] élément au début de son parent, de sorte que sa hauteur ne se développe pas.

 .wrapper {
  affichage: grille;
  Grille-modèle-colonnes: répéter (12, minmax (0, 1fr));
  intervalle de grille: 20px;
}

// align-self indiquera à l’élément de côté de s’aligner sur le début de son parent.
de côté {
  grille-colonne: 1/4;
  rangée de grille: 1;
  align-self: start;
}

principale {
  grille-colonne: 4/13;
}

( Grand aperçu )

Voir le stylo principal et de côté de Ahmad Shadeed ( @ Shadeed ) sur CodePen .

11. Ajout de fill à un SVG

Parfois, lorsque vous travaillez avec des SVG, fill ne fonctionnera pas comme prévu si l'attribut fill a été ajouté en ligne dans l'élément SVG. Pour résoudre ce problème, supprimez l'attribut fill du fichier SVG lui-même ou remplacez fill: color .

Prenez cet exemple:

 .some-icon {
    remplir: # 137cbf;
}

Cela ne fonctionnera pas si le SVG a un remplissage en ligne. Ce devrait être plutôt ceci:

 .some-icon path {
    remplir: # 137cbf;
}

12. Utilisation de pseudo-éléments

J'aime utiliser des pseudo-éléments chaque fois que je le peux. Ils nous permettent de créer de faux éléments, principalement à des fins décoratives, sans les ajouter au code HTML.

Lorsqu'il travaille avec eux, l'auteur peut oublier de procéder de l'une des manières suivantes:

  • ajouter le content: "" property,
  • définissez ses propriétés width et sans définir la propriété display display .

Dans l'exemple ci-dessous , nous avons un titre avec un badge en tant que pseudo-élément. La propriété content: "" doit être ajoutée. En outre, l'élément devrait afficher: inline-block défini dans l'ordre dans lequel width et height fonctionneront comme prévu.

Grand aperçu

13 L'espace bizarre lors de l'utilisation de l'affichage : inline-block

Régler deux éléments ou plus sur l'affichage : inline-block ou display: inline créera une infime espace entre chacun. L'espace est ajouté car le navigateur interprète les éléments en tant que mots, ce qui ajoute un espace de caractère entre chaque élément.

Dans l'exemple ci-dessous, chaque élément a un espace de 8px à droite. , mais le minuscule espace créé par l'utilisation de display: inline-block le rend 12px ce qui n'est pas le résultat souhaité.

 li: not (: last-child) {
  marge droite: 8px;
}

( Grand aperçu )

Une solution simple consiste à définir taille de la police: 0 sur l'élément parent.

 ul {
    taille de police: 0;
}

li {
    taille de police: 16px; / * La taille de la police doit être réaffectée ici car elle héritera de «font-size: 0» de son parent. * /
}

( Grand aperçu )

Voir la plume Espacement entre les blocs de Ahmad Shadeed ( @shadeed ) sur CodePen .

14. Ajouter pour = "ID" Lorsque vous affectez un élément d'étiquette à une entrée

Lorsque vous travaillez avec des éléments de formulaire, assurez-vous qu'un identifiant est attribué à tous les éléments d'étiquette . Cela les rendra plus accessibles et, une fois cliqué dessus, l’entrée associée sera mise au point.



Grand aperçu

15. Les polices ne fonctionnant pas avec les éléments HTML interactifs

Lors de l'attribution de polices à l'ensemble du document, elles ne seront pas appliquées à des éléments tels que l'entrée le bouton sélectionnez . ] et textarea . Ils n’héritent pas par défaut car le navigateur leur applique la police système par défaut.

Pour résoudre ce problème, affectez manuellement la propriété de la police:

 input, button, select, textarea {
  font-family: votre-génial-nom-de-police;
}

16. Barre de défilement horizontale

En raison de la largeur de certains éléments, une barre de défilement horizontale apparaît.

Le moyen le plus simple de rechercher la cause de ce problème consiste à utiliser un contour CSS. Addy Osmani a partagé un script très pratique qui peut être ajouté à la console du navigateur pour définir tous les éléments de la page.

[] .forEach.call ($$ ("*"), fonction (a) {
  a.style.outline =
    "1px solid #" + (~~ (Math.random () * (1 

( Grand aperçu )

17. Images comprimées ou étirées

Lorsque vous redimensionnez une image en CSS, celle-ci peut être comprimée ou étirée si le rapport de format ne correspond pas à la largeur et à la hauteur de l'image.

La solution est simple: utilisez CSS ' object-fit . Sa fonctionnalité est similaire à celle de background-size: cover pour les images d’arrière-plan.

 img {
    ajustement d'objet: couverture;
}

( Grand aperçu )

L’utilisation de object-fit ne sera pas la solution parfaite dans tous les cas. Certaines images doivent apparaître sans recadrage ni redimensionnement, et certaines plates-formes obligent l'utilisateur à télécharger ou à recadrer une image à une taille définie. Par exemple, Dribbble accepte les téléchargements de vignettes de 800 x 600 pixels.

18. Ajoutez le type correct pour l'entrée .

Utilisez le type correct pour un champ à entrée. Cela améliorera l'expérience utilisateur dans les navigateurs mobiles et le rendra plus accessible.

Voici un code HTML:

       

C’est à quoi ressemblera chaque entrée une fois qu’elle aura été ciblée:


( Grand aperçu )

19. Numéros de téléphone dans les dispositions RTL

Lors de l'ajout d'un numéro de téléphone tel que + 972-123555777 dans une disposition de droite à gauche, le symbole plus est placé à la fin du numéro. Pour résoudre ce problème, réaffectez la direction du numéro de téléphone.

 p {
    direction: ltr;
}

( Grand aperçu )

Conclusion

Tous les problèmes mentionnés ici font partie des problèmes les plus courants que j’ai rencontrés dans mon travail de développement initial. Mon objectif est de conserver une liste de vérification régulière lorsque vous travaillez sur un projet Web.

Avez-vous un problème que vous rencontrez toujours dans CSS? Faites-le-nous savoir dans les commentaires!

 Éditorial éclatant (dm, ra, al, yk, il)




Source link