Keep width when using letter-spacing on hover

后端 未结 2 1366
情歌与酒
情歌与酒 2020-12-11 06:39

I have a some basic button styles where on :hover I add the letter-spacing property:

2条回答
  •  自闭症患者
    2020-12-11 07:24

    On idea to approximate this is to duplicate the text considering a hidden one that has already the letter-spacing and another one on the top that you animate to fill the space already defined by the hidden text:

    Here is an idea by making the text color the same as background:

    .btn {
      display: inline-block;
      text-align: center;
      background-color: transparent;
      border: 1px solid transparent;
      padding: 0.375rem 0.75rem;
      font-size: 1rem;
      border-radius: 0.25rem;
      cursor: pointer;
      transition: all 0.2s ease;
      margin-bottom:10px;
    }
    
    .btn-primary {
      background-color: #8065F1;
      color: #FFFFFF;
    }
    
    .btn-large {
      border-radius: 32px;
      box-shadow: 0 2px 80px 0 rgba(74, 74, 74, 0.23);
      padding: 0.25rem 3rem;
      font-size: 1.5rem;
      text-transform: uppercase;
    }
    
    .btn::before {
      content:attr(data-text);
      position:absolute;
      left:0;
      right:0;
      text-align:center;
      letter-spacing: initial;
      color:#fff;
      transition: all 0.2s ease;
    }
    .btn {
      letter-spacing: 4px;
      color:#8065F1;
      position:relative;
    }
    .btn:hover::before {
      letter-spacing: 4px;
    }

    Another one using opacity and both pseudo element in case the background is not a solid color:

    .btn {
      display: inline-block;
      text-align: center;
      background-color: transparent;
      border: 1px solid transparent;
      padding: 0.375rem 0.75rem;
      font-size: 1rem;
      border-radius: 0.25rem;
      cursor: pointer;
      transition: all 0.2s ease;
      margin-bottom:10px;
    }
    
    .btn-primary {
      background: linear-gradient(#8065F1,purple);
      color: #FFFFFF;
    }
    
    .btn-large {
      border-radius: 32px;
      box-shadow: 0 2px 80px 0 rgba(74, 74, 74, 0.23);
      padding: 0.25rem 3rem;
      font-size: 1.5rem;
      text-transform: uppercase;
    }
    .btn {
      position:relative;
      font-size:0;
    }
    .btn::before {
      content:attr(data-text);
      position:absolute;
      left:0;
      right:0;
      text-align:center;
      letter-spacing: initial;
      font-size: 1.5rem;
      transition: all 0.2s ease;
    }
    .btn::after {
      content:attr(data-text);
      letter-spacing: 4px;
      opacity:0;
      font-size: 1.5rem;
    }
    .btn:hover::before {
      letter-spacing: 4px;
    }

提交回复
热议问题