J'ai le code suivant
div {
width:200px;
border-bottom:1px solid Magenta;
height:50px;
}
La largeur de la div est de 200 pixels, donc border-bottom est également de 200 pixels, mais que dois-je faire si je ne veux que 100 pixels de la frontière sans changer la largeur de la division?
Vous pouvez utiliser des pseudoéléments. Par exemple.
div {
width : 200px;
height : 50px;
position: relative;
z-index : 1;
background: #eee;
}
div:before {
content : "";
position: absolute;
left : 0;
bottom : 0;
height : 1px;
width : 50%; /* or 100px */
border-bottom:1px solid Magenta;
}
<div>Item 1</div>
<div>Item 2</div>
Pas besoin d'utiliser de balisage supplémentaire à des fins de présentation. : after est également supporté par IE8.
modifier:
si vous avez besoin d’une bordure alignée à droite, changez simplement left: 0
avec right: 0
si vous avez besoin d'une bordure centrée, il vous suffit de définir left: 50px;
Une autre façon de procéder (dans les navigateurs modernes) consiste à utiliser une boîte-ombre à propagation négative. Découvrez ce violon mis à jour: http://jsfiddle.net/WuZat/290/
box-shadow: 0px 24px 3px -24px Magenta;
Je pense que le moyen le plus sûr et le plus compatible est la réponse acceptée ci-dessus, cependant. Je pensais juste partager une autre technique.
Vous pouvez utiliser un dégradé linéaire:
div {
width:100px;
height:50px;
display:block;
background-image: linear-gradient(to right, #000 1px, rgba(255,255,255,0) 1px), linear-gradient(to left, #000 0.1rem, rgba(255,255,255,0) 1px);
background-position: bottom;
background-size: 100% 25px;
background-repeat: no-repeat;
border-bottom: 1px solid #000;
border-top: 1px solid red;
}
<div></div>
J'ai ajouté une ligne sous la balise h3 comme celle-ci
<h3 class="home_title">Your title here</h3>
.home_title{
display:block;
}
.home_title:after {
display:block;
clear:both;
content : "";
position: relative;
left : 0;
bottom : 0;
max-width:250px;
height : 1px;
width : 50%; /* or 100px */
border-bottom:1px solid #e2000f;
margin:0 auto;
padding:4px 0px;
}
Vous ne pouvez pas avoir une bordure de taille différente de celle de la div elle-même.
la solution consisterait simplement à ajouter une autre division sous le dessous, centrée ou en position absolue, avec la bordure désirée de 1 pixel et seulement 1 pixel de hauteur.
J'ai laissé la bordure d'origine dans afin que vous puissiez voir la largeur, et avoir deux exemples - l'un avec 100 largeur et l'autre avec 100 largeur centrée. Supprimez celui que vous ne souhaitez pas utiliser.
En retard à la fête mais pour tous ceux qui veulent faire 2 bordures (en bas et juste dans mon cas), vous pouvez utiliser la technique dans la réponse acceptée et ajouter un: après l'élément pseudo-élément pour la deuxième ligne, puis modifiez les propriétés comme donc: http://jsfiddle.net/oeaL9fsm/
div
{
width:500px;
height:500px;
position: relative;
z-index : 1;
}
div:before {
content : "";
position: absolute;
left : 25%;
bottom : 0;
height : 1px;
width : 50%;
border-bottom:1px solid Magenta;
}
div:after {
content : "";
position: absolute;
right : 0;
bottom : 25%;
height : 50%;
width : 1px;
border-right:1px solid Magenta;
}
div{
font-size: 25px;
line-height: 27px;
display:inline-block;
width:200px;
text-align:center;
}
div::after {
background: #f1991b none repeat scroll 0 0;
content: "";
display: block;
height: 3px;
margin-top: 15px;
width: 100px;
margin:auto;
}
J'ai le cas d'avoir un bord inférieur entre les images dans le conteneur div et le meilleur code de ligne était - border-bottom-style: inset;
CA aidera:
http://www.w3schools.com/tags/att_hr_width.asp
<hr width="50%">
Cela crée une ligne horizontale avec une largeur de 50%, vous devrez créer/modifier la classe si vous souhaitez modifier le style.
La bordure est donnée à l'élément HTML complet. Si vous voulez une demi-bordure inférieure, vous pouvez l'envelopper avec un autre bloc identifiable, tel que span.
Code HTML:
<div> <span>content here </span></div>
CSS comme ci-dessous:
div{
width:200px;
height:50px;
}
span{
width:100px;
border-bottom:1px solid Magenta;
}
Je viens d'accomplir le contraire en utilisant :after
et ::after
parce que je devais élargir exactement ma bordure inférieure 1.3rem
:
Mon élément s'est super déformé lorsque j'ai utilisé :before
et :after
en même temps car les éléments sont alignés horizontalement avec display: flex
, flex-direction: row
et align-items: center
.
Vous pouvez utiliser ceci pour créer quelque chose de plus large ou plus étroit, ou probablement n'importe quel mods de dimension mathématique:
a.nav_link-active {
color: $e1-red;
margin-top: 3.7rem;
}
a.nav_link-active:visited {
color: $e1-red;
}
a.nav_link-active:after {
content: '';
margin-top: 3.3rem; // margin and height should
height: 0.4rem; // add up to active link margin
background: $e1-red;
margin-left: -$nav-spacer-margin;
display: block;
}
a.nav_link-active::after {
content: '';
margin-top: 3.3rem; // margin and height should
height: 0.4rem; // add up to active link margin
background: $e1-red;
margin-right: -$nav-spacer-margin;
display: block;
}
Désolé, il s'agit de SCSS
, il suffit de multiplier les nombres par 10 et de modifier les variables avec des valeurs normales.