CSS - exactement la même hauteur et l'alignement du bouton et de la zone de texte d'entrée
J'ai besoin d'avoir un bouton et un tex boîte de assis les uns à côté des autres et qu'ils ont pour aligner parfaitement que si l'un est plus grand que les autres, puis il sera immédiatement perceptible.
Habituellement je ne reviendrai pas à vous soucier de petites différences entre les navigateurs, mais ces deux entrées sont assis dans une position très en vue sur chaque page et sont une fonctionnalité du site, de sorte qu'ils ont à aligner parfaitement dans tous les principaux navigateurs et les niveaux de zoom.
Quelqu'un aurait-il des conseils sur la façon d'atteindre cet objectif.
Comme un exemple rapide de ce que je suis en train de réaliser: la nouvelle page d'accueil google. Après avoir commencé à taper la saisie semi-automatique des coups de pied dans la zone de recherche est déplacé vers le haut avec un bouton bleu parfaitement alignée sur la zone de texte. Il fonctionne parfaitement croix-navigateur, mais sa marque dans un tableau. Ne qui suggèrent que cela peut être la meilleure façon d'atteindre cet objectif?
- Quelle marque utilisez-vous?
- Hi - ont essayé beaucoup de choses différentes, j'essaie de garder tout supplémentaire une annotation à un minium donc, idéalement, il s'agirait d'une forme avec une étiquette, une zone de saisie et un bouton de type submit.
- Vous pouvez aussi essayer de demander à ce sur le nouveau Expérience Utilisateur bêta sur le site.
- oui: mais mark-up vous utilisez déjà? Que sommes-nous travailler avec, de voir ce que vous avez déjà nous permet de fournir des réponses de meilleure qualité et afin de mieux vous aider.
- Si vous fournissez un jsFiddle démo avec des exemples de code, et de l'état exactement où les navigateurs/versions vous avez besoin de la hauteur et l'alignement de cohérence, je vais lui donner un aller.
- Si la question est de Firefox, cette réponse résolu pour moi: stackoverflow.com/a/12734594/970551
Vous devez vous connecter pour publier un commentaire.
Je te suggère d'essayer de le style de l'élément parent de l'
input
/button
appariement (unfieldset
, dans mon exemple) afin de donner un communfont-size
, etfont-family
, puis à l'aideem
mesures pour le style dimensions/padding/marges pour les éléments enfants. Idéalement style de tous les éléments d'enfant avec la même feuille de style CSS.Le suivant mark-up:
Je vous suggère quelque chose de similaire, mais adaptées à votre design particulier, pour le code CSS suivant:
JS Fiddle démo.
À la suite de la clarification que c'est pour répliquer/reproduire le style de Google jouxtant l'entrée texte/bouton envoyer:
JS Fiddle démo.
Bien que le ci-dessus fonctionne très bien dans Chrome 12.x et de l'Opéra De 11,5 (Ubuntu 11.04), Firefox semble montrer un pixel supplémentaire ou deux dans la dernière démonstration.
J'ai été en tirant sur mes cheveux pendant des heures à essayer d'atteindre cet objectif. Après beaucoup de recherche et d'expérimentation, voici la recette pour la résolution de l'OP du problème (au moins des versions contemporaines de l') Chrome, Firefox, IE, Opera et Safari:
Oui, c'est tout là est à lui. Voici le plus minimaliste CSS qui produit les résultats escomptés:
Si vous avez besoin de plus de style, n'hésitez pas à ajouter de la couleur, le remplissage et les marges -- tout va bien fonctionner. Mais, quoi que vous fassiez, ne PAS spécifier la hauteur explicitement. C'est la seule pierre d'achoppement, car chaque navigateur calcule la hauteur différemment; certains vont laisser un pixel supplémentaire ou deux au-dessus de la sélectionner et de ne pas le bouton, certains vont quitter au-dessus du bouton et de ne pas le sélectionner, et certains fonctionnent comme prévu.
Pour l'enregistrement, Chrome semble être la plus cohérente dans ce domaine (qui est, si vous ne spécifiez la hauteur), mais là encore, qui s'en soucie.
Je pense que c'est très pare-balles:
http://codepen.io/herrfischer/pen/pbkyoJ
Sur les deux éléments suffit d'utiliser:
Et utiliser "normaliser.css" - c'est tout. Semble bon sur l'iPhone:
J'ai vérifié de nombreuses sources dans le WEB comment faire la meilleure, la croix-navigateur, de thème indépendant. J'espère avoir une solution, peu, ça n'est pas à 100% (il doit être découpés en vertical CSS padding). Mon problème a été d'avoir l'étiquette et le texte d'entrée avec la même largeur et compact.
Résultat désiré:
La solution que j'ai trouvé par plusieurs expériences est décrite par mon blog: http://vasvadev.blogspot.cz/2013/02/css-exact-same-height-and-alignment-of.html
Solution
CSS:
HTML:
Mon code expérimental est partagée par JSFIDDLE: css-exact-same-height-and-alignment-of.html
Je suis en train d'essayer de résoudre ce pendant des jours et chaque solution n'est pas tout, et pas de travail dans les différents navigateurs.
Je trouve que ce code faire le travail:
J'ai mis à jour le Violon https://jsfiddle.net/p9maozk2/
En essayant d'atteindre l'pixel perfect dimensions dans une manière de croix-navigateur, la première chose que vous devez faire est de considérer la mise en œuvre d'un CSS reset. Je préfère HTML5 Boilerplate, mais il en existe d'autres que vous pouvez trouver à partir d'une recherche sur google.
Le CSS reset est vraiment fondamental dans la normalisation de la croix-navigateur différences (surtout lorsqu'il s'agit de formes).
Pour IE: Vous pouvez définir le style les choses différemment à l'aide de feuilles de style conditionnel:
Donc, on peut écrire:
Votre autre option est d'utiliser Bootstrap. - Je résoudre ce problème par l'attribution de la classe "entrée-groupe" à la div qui encapsule l'entrée et le bouton/s.
En 2019, vous voulez être à l'aide de Grille CSS pour vos formes, même si elles n'ont qu'une entrée et un bouton.
Cela permet d'économiser beaucoup de douleur.
J'ai beaucoup mon travail si je ne vais pas poster un exemple ici. Au lieu de cela, voici les choses que vous devez savoir.
Le récipient externe peut être la
form
, CSS et ce pourdisplay: grid; grid-template-rows: 2em; grid-template-columns: 1fr auto;
L'entrée doit avoir une étiquette qui je suppose est configuré pour être caché. Donc le CSS pour l'entrée a
grid-column: 1; height: 100%;
le bouton agrid-column: 2; height: 100%
Vous allez faire votre propre avec des marges, les décors, les rembourrages, les frontières, les frontières rayon et telles.
L'essentiel d'obtenir le bouton à la ligne avec l'entrée se fait avec la ligne de grille ayant une hauteur fixe en ems ou à un autre sensible sensible d'une unité amie et l'entrée et le bouton d'une hauteur de 100%.
Je n'ai trouvé aucune des réponses ci-dessus entraînera concis et maniable code de la Grille CSS option qui fonctionne pour moi sur Firefox, Chrome et un navigateur basé sur Webkit.
Remarque que si l'utilisation de Grille CSS, alors vous devez précisément zéro
div
éléments dans votre formulaire, cependant, si vous utilisez des balises html fieldsets vous devrez peut-être configurer pourdisplay: content
comme Grille CSS ne fonctionne pas avecfieldset
.Quelqu'un qui est en train de le faire maintenant, j'ai trouvé que cette solution semble fonctionner. Essayez d'ajouter :
à votre
css
sur les deux éléments qui seront toujours les laisser légèrement décalés, et puis jouer avec le haut de rembourrage dans le mal alignées élément. J'ai constaté que :a fonctionné pour moi.
Utiliser un arrière-plan div avec une image pour l'entrée. C'est beaucoup plus facile de garder une cohérence. Aussi, le positionnement absolu est bonne pour ce type de situation.
edit: j'ai écrit cette réponse il y a 5 ans, il y a de meilleures façons maintenant.
CSS:
HTML:
Tous d'excellentes réponses! Mais aucun n'était vraiment ce que je cherchais...
J'ai eu plus de satisfaction de plus simple approche: