Création de formulaires HTML. Formulaires HTML Quel style de page de connexion choisir
Un tutoriel sur la façon de créer un formulaire de connexion et d'inscription avec HTML5 et CSS3.
Dans ce tutoriel, nous allons créer deux formulaires HTML5 qui basculeront entre la connexion et l'inscription en utilisant la pseudo classe CSS3 :target . Nous allons le styliser en utilisant CSS3 et une police d'icônes. L'idée derrière cette démo est de montrer à l'utilisateur le formulaire de connexion et de fournir un lien pour « basculer » vers le formulaire d'inscription.
Notez que ceci est uniquement à des fins de démonstration, cela ne fonctionnera que dans un navigateur prenant en charge la pseudo-classe :target, et vous ne devez pas utiliser ce code sur un site Web en direct sans fournir une solution de secours solide.
Dans ce qui suit, nous passerons par la démo 1.
Le HTML
Dans le HTML, nous mettrons les deux formulaires en cachant le second avec CSS. Voici le code, j'expliquerai certaines des parties intéressantes plus tard.
Nous avons ajouté ici quelques qualités HTML5 et utilisé certaines des nouvelles entrées. L'entrée tapez=mot de passe masque automatiquement ce que l'utilisateur tape et le remplace par des points (selon le navigateur). L'entrée tapez=email permet au navigateur de vérifier si ce que l'utilisateur a saisi a le format d'une adresse e-mail valide. Nous avons également utilisé le exiger=obligatoire attribut; les navigateurs qui prennent en charge cet attribut ne permettront pas à l'utilisateur de soumettre le formulaire tant que ce champ n'est pas rempli, aucun JavaScript n'est requis.
Le saisie semi-automatique = activé L'attribut préremplira les valeurs en fonction des entrées précédentes de l'utilisateur. Nous avons également utilisé de jolis espaces réservés pour les entrées qui afficheront une valeur directrice lorsque l'entrée n'est pas remplie.
Maintenant les deux parties délicates. Vous avez peut-être remarqué les deux liens en haut du formulaire. C'est une petite astuce qui permettra à notre formulaire de bien se comporter lorsque nous jouons avec des ancres, afin qu'il ne « saute » pas sur de longues pages lorsque nous cliquons sur le lien de commutation et déclenchons la pseudo-classe :target.
La deuxième petite astuce est liée à l’utilisation de la police des icônes. Nous utiliserons un attribut de données pour afficher les icônes. En définissant data-icon = "icon_character" avec le caractère correspondant dans le HTML, nous n'aurons besoin que d'un seul sélecteur d'attribut CSS pour styliser toutes les icônes. En savoir plus sur cette technique sur 24 façons : afficher des icônes avec des polices et des attributs de données.
Le CSS
Pour la clarté du code de ce tutoriel, j'omettrai tous les préfixes des fournisseurs, mais vous les retrouverez bien sûr dans les fichiers. Encore une fois, j'utilise des astuces CSS3 assez avancées qui pourraient ne pas fonctionner dans tous les navigateurs. Commençons.
Styliser les deux formulaires en utilisant CSS3
Tout d’abord, donnons à nos deux formulaires un style général pour le conteneur.
#subscribe, #login( position : absolue ; haut : 0px ; largeur : 88 % ; remplissage : 18px 6% 60px 6% ; marge : 0 0 35px 0 ; arrière-plan : rgb(247, 247, 247) ; bordure : 1px solide rgba(147, 184, 189,0.8); ombre de la boîte : 0pt 2px 5px rgba(105, 108, 109, 0.7), 0px 0px 8px 5px rgba(208, 223, 226, 0.4) encart ; rayon de bordure : 5px ; ) #login( z-index: 22; )
Nous avons ajouté une jolie ombre de boîte composée de deux ombres : une en médaillon pour créer la lueur bleue intérieure et une ombre extérieure. Nous expliquerons le z-index dans un instant.
Dans ce qui suit, nous styliserons l’en-tête avec un découpage d’arrière-plan :
/**** style général du texte ****/ #wrapper h1( taille de police : 48px ; couleur : rgb(6, 106, 117) ; remplissage : 2px 0 10px 0 ; famille de polices : "FranchiseRegular", Arial Narrow",Arial,sans-serif; font-weight: bold; text-align: center; padding-bottom: 30px; ) /** Pour le moment seul le webkit supporte le background-clip:text; */ #wrapper h1( arrière-plan : -webkit-repeating-linear-gradient(-45deg, rgb(18, 83, 93) , rgb(18, 83, 93) 20px, rgb(64, 111, 118) 20px, rgb (64, 111, 118) 40px, rgb(18, 83, 93) 40px); -webkit-text-fill-color: transparent; -webkit-background-clip: texte; ) #wrapper h1:after( content:" "; affichage: bloc; largeur: 100%; hauteur: 2px; marge supérieure: 10px; arrière-plan: dégradé linéaire (gauche, rgba (147 184 189,0) 0%, rgba (147 184 189,0.8) 20%, rgba (147 184 189) ,1) 53%, rgba(147 184 189,0,8) 79%, rgba(147 184 189,0) 100%); )
Notez qu'à l'heure actuelle, seuls les navigateurs Webkit prennent en charge clip d'arrière-plan : texte, nous allons donc créer ici un arrière-plan dépouillé uniquement pour le webkit et le couper au texte pour ajouter les rayures au titre H1. Depuis le clip d'arrière-plan : texte La propriété ne fonctionne actuellement que dans les navigateurs Webkit, j'ai décidé d'utiliser uniquement le préfixe webkit. C'est la raison pour laquelle j'ai divisé la déclaration CSS en deux parties et j'utilise uniquement un dégradé préfixé par un kit Web. Utiliser uniquement le préfixe –webkit- est une mauvaise pratique, c'est uniquement à des fins de démonstration, et vous ne devriez jamais faire cela sur un vrai site Web ! C'est aussi là que le -webkit-text-fill-color : transparent est pratique : cela nous permet d'avoir uniquement un fond transparent sur les navigateurs du webkit, tous les autres l'ignoreront et nous donneront la couleur de repli du texte fournie.
Nous avons également créé une ligne de fondu sous le titre à l’aide de la pseudo-classe :after. Nous utilisons un dégradé de hauteur de 2 pixels et estompons l'arrière-plan à une opacité de 0 aux deux extrémités.
Maintenant, stylisons nos entrées et donnons-leur un aspect plus joli.
/**** style d'entrée avancé ****/ /* espace réservé */ ::-webkit-input-placeholder ( couleur : rgb(190, 188, 188); style de police : italique ; ) input:-moz- espace réservé, textarea:-moz-placeholder( couleur : rgb(190, 188, 188); style de police : italique ; ) entrée ( contour : aucun ; )
Nous stylisons d’abord les entrées et supprimons le contour. Mais soyez prudent ici ; le plan aide l'utilisateur à savoir quelle entrée est ciblée, donc si vous la supprimez, vous devez fournir des états : active et : focus pour les entrées.
/* toutes les entrées sauf la soumission et la case à cocher */ #wrapper input:not())( width: 92%; margin-top: 4px; padding: 10px 5px 10px 32px; border: 1px solid rgb(178, 178, 178) ; dimensionnement de la boîte : boîte de contenu ; rayon de bordure : 3 px ; ombre de la boîte : 0px 1px 4px 0px rgba(168, 168, 168, 0.6) encart ; transition : tous les 0,2 s linéaires ; ) #wrapper input:not() : actif, #wrapper input:not():focus( border: 1px solid rgba(91, 90, 90, 0.7); background: rgba(238, 236, 240, 0.2); box-shadow : 0px 1px 4px 0px rgba ( 168, 168, 168, 0,9) encart ; )
Ici, nous avons utilisé la pseudo-classe :not, pour styliser toutes les entrées, à l'exception de la case à cocher. J'ai fourni un état:focus et:active, puisque j'ai décidé de supprimer le contour.
Et maintenant la partie amusante : la police des icônes. Comme nous ne pouvons pas utiliser les pseudo-classes :before et :after sur les entrées, nous allons devoir tricher un peu : nous allons ajouter l’icône à l’étiquette, puis la placer dans l’entrée. J'utilise la bibliothèque fontomas qui rassemble de jolies icônes. Vous pouvez les réorganiser pour définir l'icône sur une lettre spécifique. Se souvenir du icône de données attribut? C'est là que tu dois mettre la lettre. j'ai utilisé icône de données = 'u' pour l'utilisateur, « e » pour l'e-mail, « p » pour le mot de passe. Une fois les lettres choisies, j'ai téléchargé la police et utilisé le générateur de polices fontsquirrel pour la transformer dans un format compatible @font-face.
@font-face ( font-family: "FontomasCustomRegular"; src: url("fonts/fontomas-webfont.eot"); src: url("fonts/fontomas-webfont.eot?#iefix") format("embedded- opentype"), url("fonts/fontomas-webfont.woff") format("woff"), url("fonts/fontomas-webfont.ttf") format("truetype"), url("fonts/fontomas-webfont .svg#FontomasCustomRegular") format("svg"); font-weight: normal; font-style: normal; ) /** le tour magique des icônes ! **/ :after ( contenu : attr(data-icon); font-family : "FontomasCustomRegular" ; couleur : rgb(106, 159, 171) ; position : absolue ; gauche : 10px ; haut : 35px ; largeur : 30px ; )
Ouais, c'est tout, vous n'avez pas besoin d'avoir une classe pour chaque icône. Nous avons utilisé contenu : attr (icône de données) pour récupérer la lettre depuis l'attribut data-icon, il suffit donc de déclarer la police, de choisir une jolie couleur et de la positionner.
Stylisons maintenant le bouton d'envoi pour les deux formulaires.
/*style des deux boutons de soumission */ #wrapper p.button input( width: 30%; curseur: pointeur; arrière-plan: rgb(61, 157, 179); padding: 8px 5px; font-family: "BebasNeueRegular","Arial Narrow", Arial, sans-serif ; couleur : #fff ; taille de police : 24 px ; bordure : 1px solid rgb(28, 108, 122); marge inférieure : 10px ; ombre du texte : 0 1px 1px rgba(0, 0, 0, 0,5); rayon de bordure : 3 px ; ombre de la boîte : 0px 1px 6px 4px rgba(0, 0, 0, 0.07) encart, 0px 0px 0px 3px rgb(254, 254, 254), 0px 5px 3px 3px rgb(210, 210, 210); transition : tous les 0,2 s linéaires ; ) #wrapper p.button input:hover( arrière-plan : rgb(74, 179, 198); ) #wrapper p.button input:active, #wrapper p .button input:focus( arrière-plan : rgb(40, 137, 154); position : relative; haut : 1px; bordure : 1px solid rgb(12, 76, 87); box-shadow : 0px 1px 6px 4px rgba(0, 0, 0, 0.2) encart; ) p.login.button, p.signin.button( text-align: right; margin: 5px 0; )
L'astuce ici est d'utiliser l'ombre de la boîte afin de créer des bordures supplémentaires. Vous ne pouvez utiliser qu’une seule bordure, mais autant d’ombres de boîte que vous le souhaitez. Nous utiliserons la valeur de longueur pour créer une « fausse » deuxième bordure blanche, de 3 pixels de large, sans flou.
Ensuite, nous styliserons la case à cocher, rien de bien spécial ici :
/* stylisant la case à cocher "garde-moi connecté"*/ .keeplogin( margin-top: -5px; ) .keeplogin input, .keeplogin label( display: inline-block; font-size: 12px; font-style: italic; ) .keeplogin input#loginkeeping( margin-right: 5px; ) .keeplogin label( width: 80%; )
Nous styliserons le bas du formulaire en utilisant des dégradés linéaires répétitifs pour créer un arrière-plan rayé.
P.change_link( position : absolue ; couleur : rgb(127, 124, 124) ; gauche : 0px ; hauteur : 20px ; largeur : 440px ; remplissage : 17px 30px 20px 30px ; taille de police : 16px ; alignement du texte : droite ; bordure supérieure : 1 px RVB solide (219, 229, 232 ); rayon de bordure : 0 0 5px 5px ; arrière-plan : RVB (225, 234, 235); arrière-plan : dégradé linéaire répétitif (-45deg, RVB (247, 247, 247) , rgb(247, 247, 247) 15px, rgb(225, 234, 235) 15px, rgb(225, 234, 235) 30px, rgb(247, 247, 247) 30px); ) #wrapper p .change_link a ( affichage : bloc en ligne ; poids de la police : gras ; arrière-plan : rgb(247, 248, 241) ; remplissage : 2px 6px ; couleur : rgb(29, 162, 193) ; marge gauche : 10px ; texte -décoration : aucune ; rayon de bordure : 4 px ; bordure : 1 px solide rgb(203, 213, 214) ; transition : tous les 0,4 s linéaires ; ) #wrapper p.change_link a:hover ( couleur : rgb(57, 191, 215 ); arrière-plan : rgb(247, 247, 247); bordure : 1px solid rgb(74, 179, 198); ) #wrapper p.change_link a:active( position: relative; top: 1px; )
Vous remarquerez maintenant que nous avons deux jolis formulaires, mais nous voulons vraiment qu’un seul s’affiche à la fois. Alors c'est l'heure de quelques animations !!
Création de l'animation de commutation
La première chose à faire est de masquer le deuxième formulaire en définissant l'opacité à 0 :
#register( z-index : 21 ; opacité : 0 ; )
Vous vous souvenez que notre formulaire de connexion avait un z-index de 22 ? Nous donnerons au deuxième formulaire un z-index de 21, pour le mettre « sous » le formulaire de connexion.
Et maintenant la très bonne partie : changer de formulaire en utilisant la pseudo-classe :target. Ce qu'il faut vraiment comprendre à propos de :target, c'est que nous allons utiliser des ancres pour effectuer la transition. Le comportement normal d'un lien d'ancrage est de sauter vers la cible dans la page. Mais nous ne voulons pas aller n’importe où, nous voulons seulement changer de forme. Et voici notre astuce en utilisant les deux liens en haut de la page. Au lieu de créer un lien direct vers le deuxième formulaire, et de risquer d'obtenir un effet « saut », nous plaçons en fait les deux liens en haut de la page et leur donnons affichage : aucun. Cela évitera tout saut de page. À crédit, à César : j’ai trouvé cette astuce sur CSS3 create (en français).
#toregister:target ~ #wrapper #register, #tologin:target ~ #wrapper #login( z-index : 22 ; nom d'animation : fadeInLeft ; délai d'animation : .1s ; )
Voici donc ce qui se passe : lorsque l'on clique sur le Rejoignez-nous bouton, on déclenche le #toregister. Nous faisons ensuite l'animation, en utilisant le sélecteur frère ~ pour trouver notre élément #register. Nous utilisons une animation appelée fondu à gauche. Puisque nous « masquons » le formulaire en utilisant une opacité nulle, nous utiliserons une animation qui apparaît en fondu pour le faire apparaître. Nous avons également modifié le z-index pour qu'il apparaisse au-dessus de l'autre formulaire.
La même chose se produit pour l'autre forme.
Et voici le code de l'animation. Nous utilisons le framework d'animation CSS3 de Dan Eden et l'avons adapté pour ce tutoriel.
Animer ( durée d'animation : 0,5 s ; fonction de synchronisation d'animation : facilité ; mode de remplissage d'animation : les deux ; ) @keyframes fadeInLeft ( 0 % (opacité : 0 ; transformation : traduireX(-20px); ) 100 % (opacité : 1; transformation : traduireX(0); ) )
Le formulaire qui « disparaît » aura une autre animation qui le fera disparaître vers la gauche :
#toregister:target ~ #wrapper #login, #tologin:target ~ #wrapper #register( animation-name: fadeOutLeftBig; ) @keyframes fadeOutLeft ( 0% ( opacité : 1; transform: translateX(0); ) 100% ( opacité : 0; transformation : traduireX(-20px); ) )
Vous pouvez désormais utiliser d'autres animations du fichier animate.css de Dan Eden : ajustez simplement votre classe .animate et remplacez les noms des animations. Vous trouverez également quelques animations personnalisées à la fin du fichier animate-custom.css.
Eh bien, c'est tout, les amis. J'espère que vous avez apprécié le tutoriel !
Veuillez noter que dans certains navigateurs clip d'arrière-plan : texte n’est pas pris en charge. Dans Internet Explorer 9, les transitions et les animations ne fonctionnent pas, il n'y aura donc pas de changement de forme sophistiqué. Dans Internet Explorer 8 et versions antérieures, la pseudo-classe :target n'est pas prise en charge, elle ne fonctionnera donc pas du tout (vous verrez simplement le formulaire de connexion).
Le formulaire lui-même est généralement destiné à recevoir des informations de l'utilisateur pour les envoyer ensuite au serveur, où les données du formulaire sont reçues par le programme de gestion. Un tel programme peut être écrit dans n'importe quel langage de programmation côté serveur comme PHP, Perl, etc. L'adresse du programme est indiquée dans l'attribut action de la balise
Dans cet exemple, les données du formulaire indiquées par l'attribut name (login et mot de passe) seront transmises au fichier /example/handler.php. Si l'attribut action n'est pas spécifié, alors le transfert s'effectue vers l'adresse de la page en cours.
Le transfert vers le serveur s'effectue selon deux méthodes différentes : GET et POST, pour définir la méthode dans la balise