web-dev-qa-db-ja.com

線形勾配によるcss遷移

背景がcss linear-gradientで作成されているボタンに遷移を追加しようとしていますが、機能していません。

これは私のボタンのCSSです。

a.button
{
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@green), color-stop(100%,#a5c956));
-webkit-transition: background 5s linear;
}

a.button:hover
{
-webkit-gradient(linear, left top, left bottom, color-stop(0%,@greenhover), color-stop(100%,#89af37))
}

@greenと@greenhoverについて疑問がある場合は、.lessを使用してCSSを作成しています。

これで何か問題がありますか?何か案は?

49
Johan Alkstål

残念ながら、現時点ではグラデーションを実際に移行することはできません。

したがって、唯一の有効な回避策は、必要なグラデーションとトランジションを持つ追加の要素を使用することです。

a.button {
  position: relative;
  z-index: 9;
  display: inline-block;
  padding: 0 10px;
  background: -webkit-gradient(linear, 0 0, 0 100%, from(green), to(#a5c956));
  background: -webkit-linear-gradient(top, green, #a5c956);
  background: -moz-linear-gradient(top, green, #a5c956);
  background: -o-linear-gradient(top, green, #a5c956);
  background: linear-gradient(top, green, #a5c956);
}

.button-helper {
  position: absolute;
  z-index: -1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  background: -webkit-gradient(linear, 0 0, 0 100%, from(Lime), to(#89af37));
  background: -webkit-linear-gradient(top, Lime, #89af37);
  background: -moz-linear-gradient(top, Lime, #89af37);
  background: -o-linear-gradient(top, Lime, #89af37);
  background: linear-gradient(top, Lime, #89af37);
  -webkit-transition: opacity 1s linear;
  -moz-transition: opacity 1s linear;
  -o-transition: opacity 1s linear;
  transition: opacity 1s linear;
}

a.button:hover .button-helper {
  opacity: 1;
}
<a href="#" class="button"><span class="button-helper"></span>button</a>
39
kizu

それはトリッキーです..そしてもちろんトリッキーはクールです;)

大丈夫..私は解決策を得た。基本的には驚くべき:beforeセレクター

#cool-hover{
        width: 120px;
        height: 120px;
        display: block;
        cursor: pointer;
        border-radius: 10px;
        box-shadow: 0 0 15px rgba(0,0,0,0.3);
        margin: 0px auto 24px auto;
        transition: all 0.5s;
        position: relative;
        overflow: hidden;
}
#cool-hover:before{
        border-radius: inherit;
        display: block;
        width: 200%;
        height: 200%;
        content: '';
        position: absolute;
        top: 0; 
        left: 0;
        background: linear-gradient(135deg, #21d4fd 25%, #b721ff 75%);  
        transition: all 0.5s;
        transform: translate(-25%, -25%);
        z-index: 0;
}
#cool-hover:after{
        border-radius: 9px;
        display: block;
        width: 108px;
        height: 108px;
        margin: 6px;
        background: url('https://i.imgur.com/w0BjFgr.png');
        background-size: cover;
        content: '';
        position: absolute;
        top: 0; left: 0;
        z-index: 1;
}
#cool-hover:hover:before{
        transform: translate(-25%, -25%) rotate(-180deg);
}
#cool-hover:hover{
        box-shadow: 0 0 35px rgba(0,0,0,0.3);
}
<div id="cool-hover"></div>

[〜#〜] note [〜#〜]:afterトップオンイメージプレースホルダー用のSudoクラス。

すてきなスタイリングがあります;)

19

ドロップシャドウを使用してグラデーショントランジションを偽造できます!たとえば、私のページの1つから:

c { 
color: #FFF;
background: #000;
border-style:solid;
border-color:#CCC;
border-width: 0 0 0 1px;
box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-moz-box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-o-box-shadow: 2px 2px 2px #555, inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-webkit-box-shadow: 2px 2px 2px #555,
    inset 0 25px 20px -10px rgba(255, 255, 255, 0.3),
    inset 0 -15px 20px -10px rgba(0, 0, 0, 0.15);
-moz-transition: background-color .5s ease; 
-o-transition: background-color .5s ease; 
-webkit-transition: background-color .5s ease-in-out; 
transition: background-color .5s ease;
}

に続く:

c:hover {
color:#FFF;
background: #505;
position:relative;
top:1px;
box-shadow: -1px -1px -1px #555,inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
        inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-moz-box-shadow: -1px -1px -1px #555,inset 0 20px 20px -10px rgba(0, 0, 0, 0.15),
    inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-o-box-shadow: -1px -1px -1px #555, inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
        inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
-webkit-box-shadow: 1px -1px -1px #555, inset 0 20px 20px -10px rgba(0, 0, 0, 0.15), 
    inset 0 -15px 20px -10px rgba(255, 255, 255, 0.3);
}

ここでは、インセットシャドウをPhotoshopのようなマスクとして基本的に使用しており、基になる要素にグラデーション効果を引き起こしています。ホバーすると、効果が反転します。

5
Mark Choi

ボタンをホバーするときにわずかなハイライトを行う場合、はるかに簡単な解決策があります。グラデーションを少し下に移動し、背景色をグラデーションの一番上の色と同じにすることができます。 http://cdpn.io/oaByI

私が知っていることはかなり限られていますが、そのユースケースでうまく機能する場合。

2
Hampus Ahlgren

私はこれはかなり古いことを知っていますが、まだ良い解決策を見つけることができませんでした。だからここで私はこれに対して良い解決策を作りました。

最初に「:before」でグラデーションを作成し、不透明度で非表示にし、ホバーで不透明度1に切り替えます。

https://jsfiddle.net/sumon380/osqLpboc/3/

HTML:

<a href="#" class="button">Button</a>

CSS:

.button {
    text-decoration: none;
    padding: 10px 25px;
    font-size: 20px;
    color: #333;
    display: inline-block;
    background: #d6e9eb;
    position: relative;
    z-index: 1;
    transition: color 0.3s ease-out;

}
.button:before {
    background: #91a5f4;
    background: linear-gradient(135deg, #91a5f4 0%, #b08cf9 86%);
    content: "";
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    position: absolute;
    z-index: -1;
    opacity: 0;
    transition: opacity 0.3s ease-out;
}
.button:hover:before {
    opacity: 1;
}
.button:hover {
    color: #fff;
}
1
user2462948

この質問はかなり古いものですが、場合によっては機能する基本的なグラデーションをアニメーション化する良い方法を見つけました。

このメソッドを使用すると、グラデーションの色の変化をアニメーション化できますが、カラーストップの位置の変化はアニメーション化できません。

https://jsfiddle.net/62vzydeh/

HTML:

<div class="button">
    Click Me!
</div>

CSS:

.button {

  width: 200px;
  height: 30px;

  margin: 50px;
  padding-top: 10px;

  color: #C0C0C0;
  background: linear-gradient(to left, #F8F8F8, transparent 30%);
  background-color: #808080;

  text-align: center;
  font-family: sans-serif;

  cursor: pointer;

  transition: background-color 500ms;
}

.button:hover {

  background-color: #A0A0A0;
}
1
Gogeta70

私が試したハックな方法は、<spans>「位置」を複製するには、CSSのみをここにハックします。 https://codepen.io/philipphilip/pen/OvXEaV

0
philip