CSS кнопка перехода линейно-градиентного фона в прозрачный фон - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть кнопка с линейно-градиентным фоном, оранжевой рамкой и текстом.При наведении курсора на кнопку я хочу, чтобы фон стал прозрачным, не меняя другие свойства кнопки.

Я попытался изменить непрозрачность до 0, но, очевидно, это скроет границу и текст.,Я также попытался перенести фон, но он не работает, потому что у меня нет конечной точки для перехода, поскольку он должен быть прозрачным.

body {
    background-color: darkblue;
}

.button {
    background-image: linear-gradient(red,yellow);
    border: solid orange 2px;
    border-radius: 10px;
    color: white;
    padding: 15px 25px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 24px;
}
<button class="button">Submit</button>

Ответы [ 4 ]

0 голосов
/ 04 марта 2019

В Chrome с включенными функциями экспериментальной веб-платформы ( см. ) мы можем использовать:

CSS.registerProperty({
  name: '--alpha', 
  syntax: '<number>', 
  initialValue: 1, 
  inherits: true,
})
body {
  background-color: darkblue;
}

.button {
  --alpha: 1;
  background: linear-gradient(rgba(255,0,0,var(--alpha)), rgba(255,255,0,var(--alpha))) transparent;
  border: solid orange 2px;
  border-radius: 10px;
  color: white;
  padding: 15px 25px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 24px;
  transition: --alpha 1s linear;
}

.button:hover {
  --alpha: 0;
}
<button class="button">Submit</button>

enter image description here

enter image description here

0 голосов
/ 24 февраля 2019

Я сделал с помощью переменных JavaScript и CSS.

const b = document.querySelector(".button");

b.addEventListener("mouseover",function(){
  let i = 1;
  setInterval(function(){
  if(i>0){
    i=i - 0.009;
    b.style.setProperty("--a", i);
    b.style.setProperty("--b", i); 
  }
  },5);
});

b.addEventListener("mouseout",function(){
  let i = 0;
  setInterval(function(){
  if(i<1){
    i=i + 0.009;
    b.style.setProperty("--a", i);
    b.style.setProperty("--b", i);   
  }
  },5);
});
body {
    background-color: darkblue;
}

.button {
    --a:1;
    --b:1;
    background-image: linear-gradient(rgba(255,0,0,var(--a)),rgba(255,255,0,var(--b)));
    background-color:transparent;
    border: solid orange 2px;
    border-radius: 10px;
    color: white;
    padding: 15px 25px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 24px;
}
<button class="button">Submit</button>
0 голосов
/ 24 февраля 2019

Используйте псевдоэлемент для фона, и вы можете легко сделать это:

body {
  background-color: darkblue;
}

.button {
  border: solid orange 2px;
  border-radius: 10px;
  color: white;
  padding: 15px 25px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 24px;
  position: relative;
  overflow: hidden;
  z-index:0;
  background:transparent;
}

.button::before {
  content: "";
  position: absolute;
  z-index:-1;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-image: linear-gradient(red, yellow);
  transition:1s;
}
.button:hover::before {
  opacity:0;
}
<button class="button">Submit</button>

Вот еще одна идея без использования псевдоэлемента, где вы можете рассчитывать на изменение background-color и background-size.Хитрость заключается в том, чтобы сохранить один из цветов градиента прозрачным, чтобы мы могли видеть background-color (у вас может быть переход на прозрачный).Затем вы увеличиваете background-size, чтобы скрыть нижний цвет, и мы видим только прозрачный.

body {
  background-color: darkblue;
}

.button {
  border: solid orange 2px;
  background-image: linear-gradient(transparent, yellow);
  background-size:100% 100%;
  background-color:red;
  border-radius: 10px;
  color: white;
  padding: 15px 25px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 24px;
  transition:1s;
}

.button:hover {
  background-color:transparent;
  background-size:100% 500%;
}
<button class="button">Submit</button>

Или рассмотрите возможность настройки background-size для перехода другого типа:

body {
  background-color: darkblue;
}

.button {
  border: solid orange 2px;
  background: 
    linear-gradient(red, yellow),
    transparent;
  background-size:100% 100%;
  background-position:left; /*change this to change the way the transtion happen*/
  background-repeat:no-repeat;
  border-radius: 10px;
  color: white;
  padding: 15px 25px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 24px;
  transition:1s;
}

.button:hover {
  background-size:0% 100%;
}
<button class="button">Submit</button>
0 голосов
/ 24 февраля 2019

Это может помочь:

body {
    background-color: darkblue;
}

.button {
    background-image: linear-gradient(red,yellow);
    border: solid orange 2px;
    border-radius: 10px;
    color: white;
    padding: 15px 25px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 24px;
    transition: 2s;
    z-index: 1000;
    
}
button:hover{
background:linear-gradient(transparent, transparent);
}
<button class="button">Submit</button>
Итак, я просто установил наведение на прозрачный линейный градиент, поскольку у вас нет фиксированного цвета.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...