Voici une structure de menu simple:
<ul id="menu">
<li><a href="javascript:;">Home</a></li>
<li><a href="javascript:;">Test</a></li>
</ul>
Je veux que le <a>
soit étiré de manière à remplir tout le <li>
. J'ai essayé d'utiliser quelque chose comme width: 100%; height: 100%
mais cela n'a eu aucun effet. Comment étirer correctement la balise d'ancrage?
La balise "a" est un élément de niveau en ligne. Aucun élément de niveau en ligne ne peut avoir sa largeur définie. Pourquoi? Parce que les éléments de niveau en ligne sont censés représenter un texte fluide qui pourrait théoriquement se terminer d'une ligne à l'autre. Dans ce genre de cas, il n’a pas de sens de fournir la largeur de l’élément, car on ne sait pas nécessairement s’il est emballé ou non. Afin de définir sa largeur, vous devez modifier sa propriété display en block
ou inline-block
:
a.wide {
display:block;
}
...
<ul id="menu">
<li><a class="wide" href="javascript:;">Home</a></li>
<li><a class="wide" href="javascript:;">Test</a></li>
</ul>
Si la mémoire est utilisée, vous pouvez définir la largeur de certains éléments de niveau en ligne dans IE6. Mais c’est parce que IE6 n’implémente pas correctement les CSS et veut vous confondre.
Dénommez simplement le A avec un display:block;
:
ul#menu li a { display: block;}
display:flex
est la manière HTML5.
Utile pour pirater des boutons de framework, ou tout autre élément, mais vous devrez peut-être d'abord retirer leur remplissage et les régler à la hauteur souhaitée.
Dans ce cas, les onglets en matériau angulaire, qui sont assez délicats pour les faire fonctionner comme un navigateur de site Web "standard".
Notez que le pointeur change dès que vous entrez dans l'onglet: les <a> sont maintenant étirés pour correspondre à leurs dimensions parent.
Hors sujet, remarquez à quel point un matériau angulaire sans défaut affiche l'effet d'entraînement, même sur une "grande surface".
.md-header{
/* THIS IS A CUSTOM HEIGHT */
height: 50vh !important; /* '!important' IS JSFIDDLE SPECIFIC */
}
md-tab{
padding: 0 !important; /* '!important' IS JSFIDDLE SPECIFIC */
}
a{
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
MISE À JOUR 2018
AngularJS Material émet un avertissement (léger) lors de l’utilisation de flex sur des éléments de bouton; ne supposez donc pas que tous les éléments/balises HTML peuvent gérer display:flex
correctement ou avoir un comportement homogène sur tous les navigateurs.
N'oubliez pas de consulter flexbugs en cas de comportement inattendu dans un navigateur particulier.
J'ai utilisé ce code pour remplir la largeur et la hauteur 100%
HTML
<ul>
<li>
<a>I need to fill 100% width and height!</a>
</li>
<ul>
CSS
li a {
display: block;
height: 100%; /* Missing from other answers */
}
Une approche différente:
<ul>
<li>
<a></a>
<img>
<morestuff>TEXTEXTEXT</morestuff>
</li>
</ul>
a {
position: absolute;
top: 0;
left: 0;
z-index: [higher than anything else inside parent]
width:100%;
height: 100%;
}
Ceci est utile si le conteneur du lien contient également des images et autres à l'intérieur, ou si sa taille est potentiellement différente en fonction de la taille de l'image/du contenu. Avec cela, la balise d'ancrage elle-même peut être vide et vous pouvez organiser d'autres éléments à l'intérieur du conteneur de l'ancre comme vous le souhaitez. Anchor correspondra toujours à la taille du parent et sera au-dessus pour rendre la totalité de li
cliquable.
Changer la propriété display en block ne fonctionnait pas pour moi ... J'ai enlevé le padding de li et lui ai mis le même.
li a {
display:block;
padding: 4px 8px;
}
Utilisez line-height et text-indent au lieu de remplir l’élément li et utilisez display: block;
pour balise d'ancrage
<!doctype html>
<html>
<head>
<style type="text/css">
#wide li a {
display:block;
}
</style>
</head>
<body>
<ul id="menu">
<li><a href="javascript:;">Home</a></li>
<li><a href="javascript:;">Test</a></li>
</ul>
</body>
</html>
Vous devriez essayer d'éviter d'utiliser une classe sur chaque balise afin que votre contenu reste facile à gérer.
Je voulais cette fonctionnalité uniquement dans l'onglet i.e ci-dessous 720px.
@media(max-width:720px){
a{
display:block;
width:100%;
}
}