J'essaie de créer un effet de fondu lorsque la quantité de texte est supérieure à la taille de la ligne. Je réalise cela avec le mélange de max-height
, overflow
et linear-gradient
. Quelque chose comme ça.
max-height:200px;
overflow:hidden;
text-overflow: Ellipsis;
background: -webkit-linear-gradient(#000, #fff);
Le le violon complet est disponible . J'essaie d'obtenir un effet similaire à celui-ci
et je suis un peu proche. Le problème est que, dans mon cas, le texte commence à disparaître du début à la fin, et je veux que le fondu disparaisse seulement s'il est vraiment proche de la taille maximale. Disons commencer à disparaître s'il est déjà 150px. De plus, je n'utilise que -webkit
préfixe et je suppose qu’il peut y avoir d’autres préfixes que je peux ajouter pour d’autres moteurs de rendu.
Y a-t-il un moyen de faire cela en CSS pur?
Il semble que votre exigence consiste simplement à supprimer le texte commençant en fondu à une certaine hauteur (environ 150 pixels), le texte (le cas échéant) présenté à cette hauteur est considéré comme un dépassement de capacité. Pour que vous puissiez utiliser une sorte de couche de dégradé linéaire transparent placée au-dessus de la zone de texte, nous pouvons le faire de manière nette en utilisant le pseudo- élément :before
comme ça:
.row:before {
content:'';
width:100%;
height:100%;
position:absolute;
left:0;
top:0;
background:linear-gradient(transparent 150px, white);
}
Je suggérerais quelque chose comme ça:
Appliquez le dégradé à un pseudo-élément positionné de manière absolue (:after
), Qui se positionne à 160px du haut avec une hauteur de 40px - ainsi, il ne sera pas affiché du tout dans des cases plus courtes (en raison de leur max-height
En combinaison avec overflow:hidden
). Et le dégradé lui-même va de totalement transparent (rgba(0,0,0,0)
) au noir uni.
.row{
position:relative;
/* … */
}
.row:after {
content:"";
position:absolute;
top:160px;
left:0;
height:40px;
width:100%;
background: linear-gradient(rgba(0,0,0,0), #000);
}
Je pense que vous cherchez quelque chose comme ça, non?
.text {
position:relative;
width:200px;
max-height:10em;
overflow:hidden;
}
.shadow {
position:absolute;
top:8em;
width:100%;
height:2em;
background: -webkit-linear-gradient(transparent, white);
background: -o-linear-gradient(transparent, white);
background: -moz-linear-gradient(transparent, white);
background: linear-gradient(transparent, white);
}
Votre code est correct, il suffit de définir le pourcentage de doublure
background: -webkit-linear-gradient(top,#000 70%, #fff);
Essayez le lien de violon
http://jsfiddle.net/ShinyMetilda/kb4fL/1/
Vous pourriez aussi le spécifier en pixel comme ceci
background: -webkit-linear-gradient(top,#000 140px, #fff);
Les deux fonctionnent de la même manière
Je vous recommande d'utiliser http://www.colorzilla.com/gradient-editor/ .
Ce que vous recherchez peut être:
background: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,0) 80%, rgba(0,0,0,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0)), color-stop(80%,rgba(255,255,255,0)), color-stop(100%,rgba(0,0,0,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#000000',GradientType=0 ); /* IE6-9 */
et, si vous ne le souhaitez pas, copiez et collez ces css dans l’url (fenêtre css) et modifiez-les à volonté.
Si vous n’avez pas besoin de vous fier aux pourcentages, utilisez box-shadow
au lieu de background-image
. Il permet à l'utilisateur d'interagir avec les éléments situés derrière votre fondu, sans avoir besoin de pointer-events: none
( http://caniuse.com/#feat=pointer-events ):
box-shadow: 0 0 2em 1em #f00;
height: 0;
Mais attention, box-shadow peut ralentir le défilement:
J'ai utilisé cette méthode pour rendre le fond transparent.
http://jsfiddle.net/IAMCHIEF/x7qLon18/4/
.row{
position:relative;
width: 300px;
margin-bottom: 5px;
padding-bottom: 5px;
border-bottom: 3px solid #777;
max-height:200px;
overflow:hidden;
color:#fff;
background:#000;
}
.row:after {
content: "";
position: absolute;
top: 137px;
left: 0;
height: 40px;
width: 100%;
background: -webkit-linear-gradient(rgba(255, 255,255, .4), rgba(255, 255, 255, 1));
}
<div class="row">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div class="row">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div class="row">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
</div>
J'ai eu un problème similaire avec un bouton bootstrap) qui a un dégradé vertical et également un changement de dégradé en survol. Cela a fonctionné pour moi.
<button class="btn btn-success" style="width:250px">
<div class="faderflow">
SOME TEXT THAT'S TOO LONG FOR THE BUTTON
</div>
</button>
.faderflow {
overflow: hidden;
/* same color as text (white) */
background: linear-gradient(to right, rgb(255, 255, 255) 80%,rgba(255, 255, 255, 0) 100%);
background-clip: border-box;
-webkit-background-clip: text;
-webkit-text-fill-color: #fff0;
/* overwrite the bootstrap text shadow */
text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.2);
}