Как правильно централизовать пролёт внутри кнопки? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь придать кнопке вид градиента градиента, создавая интервал внутри кнопки и устанавливая некоторую разницу между ними.

Это очень хорошо работает на codepen, но когда я передаю его на свой веб-сайт, что-то происходит, и эти теги внезапно перестают выравниваться.

Однако, как лучше всего установить диапазон, централизованный внутри кнопки для имитации границы?

body{
  background:white;
  text-align:center;
  box-sizing:border-box;
  font-family:"Lato",Sans-serif;
  padding-top:5%;
/*   position:relative; */
}

.btn:link,
.btn:visited{
  text-decoration: none;
  text-transform:uppercase;
  position:relative;
  top:0;
  left:0;
  padding:22px 2px;
  border-radius:100px;
  display:inline-block;
  transition: all .5s;
}

.btn-white{
  background-image:linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
  color:#000;
  font-family: Lato;
  font-size:1.3rem;
}

.btn span {
	align-items: center;
	background-color: #fff;
	border-radius:100px;
	display: absolute;
	justify-content: center;
  padding:20px 40px;
	height: 100%;
	transition: background .5s ease;
	width: 100%;
}

.btn:hover span {
	background: transparent;
}

.btn:hover{
    background-image: linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
    border: none;
    box-shadow:0px 10px 10px rgba(0,0,0,0.2);
    color: #fff;
    transform : translateY(-3px);
    
}

.btn:active{
  box-shadow:0px 5px 10px rgba(0,0,0,0.2)
  transform:translateY(-1px);
}

.btn-bottom-animation-1{
  animation:comeFromBottom 1s ease-out .8s;
}

.btn::after{
  content:"";
  text-decoration: none;
  text-transform:uppercase;
  position:absolute;
  width:100%;
  height:100%;
  top:0;
  left:0;
  border-radius:100px;
  display:inline-block;
  z-index:-1;
  transition: all .5s;
}

.btn-white::after {
    background-image: linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
    background-color: #fff;
}

.btn-animation-1:hover::after {
    transform: scaleX(1.4) scaleY(1.6);
    opacity: 0;
}

@keyframes comeFromBottom{
  0%{
    opacity:0;
    transform:translateY(40px);
  } 
  100%{
    opacity:1;
    transform:translateY(0);
  }
}
<a class="btn" href="#">
  <span>A brand new button!</span>
</a>

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Может быть, это решение, которое вы намеревались достичь. Я должен многое отредактировать в вашем коде, чтобы добиться этого. Вот Кодовая версия

body {
  background: white;
  text-align: center;
  box-sizing: border-box;
  font-family: "Lato", Sans-serif;
  padding-top: 5%;
  /*   position:relative; */
}

.btn:link,
.btn:visited {
  text-decoration: none;
  text-transform: uppercase;
  /* position: relative; */
  /* top: 0; */
  /* left: 0; */
  padding: 10px;
  /* this padding will be your gradient border */
  border-radius: 100px;
  display: inline-block;
  transition: all .5s;
  border: none;
}

.btn:hover {
  background-image: linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
  /* border: none; */
  box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.2);
  /* color: #fff; */
  transform: translateY(-3px);
}

.btn span {
  /* align-items: center; */
  background-color: transparent;
  /* background-color: #fff; */
  border-radius: 100px;
  /* display: absolute; */
  /* justify-content: center; */
  /* padding: 20px 40px; */
  /* padding: 20px; */
  /* height: 100%; */
  /* transition: background .5s ease; */
  transition: all .5s ease;
  /* width: 100%; */
  display: block;
  padding: 20px 40px;
}

.btn:hover span {
  /* background: transparent; */
  background: #fff;
  color: #ccc;
}


/* .btn-white {
    background-image: linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
    color: #000;
    font-family: Lato;
    font-size: 1.3rem;
} */


/* 
.btn:active {
    box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2);
    transform: translateY(-1px);
}

.btn-bottom-animation-1 {
    animation: comeFromBottom 1s ease-out .8s;
} */


/* .btn::after {
    content: "";
    text-decoration: none;
    text-transform: uppercase;
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    border-radius: 100px;
    display: inline-block;
    z-index: -1;
    transition: all .5s;
} */


/*
.btn-white::after {
    background-image: linear-gradient(56deg, #08AEEA 0%, #2AF598 100%);
    background-color: #fff;
}

.btn-animation-1:hover::after {
    transform: scaleX(1.4) scaleY(1.6);
    opacity: 0;
}

@keyframes comeFromBottom {
    0% {
        opacity: 0;
        transform: translateY(40px);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}
*/
<a class="btn" href="#">
  <span>A brand new button!</span>
</a>
0 голосов
/ 14 мая 2019

Хорошо, если он работал в Codepen, а теперь - нет, потому что ваш сайт что-то переопределяет, или вы не включаете префикс сброса / нормализации или поставщика, который Codepen использует по умолчанию.

Теперь вам не нужно делать какие-либо "центрирования", чтобы выполнить то, что, я думаю, вы хотите.

Просто сделайте span элементом уровня блока и присвойте ему margin или кнопку padding.

button {
  background-color: blue;
  border: 2px solid darkBlue;
  font-size: 14px;
  padding: 4px;
}

button span {
  display:block;
  background: tan;
  border:2px solid aqua;
  padding: 10px 20px;
  color: white;
}
<button>
  <span>Text</span>
</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...