CSS-在悬停时使用字母间距时保持宽度

前端之家收集整理的这篇文章主要介绍了CSS-在悬停时使用字母间距时保持宽度 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一些基本的按钮样式,在:hover上我添加了letter-spacing属性

  1. .btn {
  2. display: inline-block;
  3. text-align: center;
  4. background-color: transparent;
  5. border: 1px solid transparent;
  6. padding: 0.375rem 0.75rem;
  7. font-size: 1rem;
  8. border-radius: 0.25rem;
  9. cursor: pointer;
  10. transition: all 0.2s ease;
  11. }
  12. .btn-primary {
  13. background-color: #8065F1;
  14. color: #FFFFFF;
  15. }
  16. .btn-large {
  17. border-radius: 32px;
  18. Box-shadow: 0 2px 80px 0 rgba(74,74,0.23);
  19. padding: 0.25rem 3rem;
  20. font-size: 1.5rem;
  21. text-transform: uppercase;
  22. }
  23. .btn:hover {
  24. letter-spacing: 4px;
  25. }
  1. <button type="button" class="btn btn-primary btn-large">Lorem</button>

有没有办法不扩大宽度?喜欢添加最小/最大宽度吗?但是,问题在于按钮元素可以包含不同的字符串长度:

  1. .btn {
  2. display: inline-block;
  3. text-align: center;
  4. background-color: transparent;
  5. border: 1px solid transparent;
  6. padding: 0.375rem 0.75rem;
  7. Box-shadow: 0 2px 80px 0 rgba($grey,0.23);
  8. font-size: 1rem;
  9. border-radius: 0.25rem;
  10. cursor: pointer;
  11. transition: all 0.2s ease;
  12. }
  13. .btn-primary {
  14. background-color: #8065F1;
  15. color: #FFFFFF;
  16. }
  17. .btn-large {
  18. border-radius: 32px;
  19. -webkit-Box-shadow: 0 2px 80px 0 rgba(74,0.23);
  20. Box-shadow: 0 2px 80px 0 rgba(74,0.23);
  21. padding: 0.25rem 3rem;
  22. font-size: 1.5rem;
  23. text-transform: uppercase;
  24. min-width: 240px;
  25. }
  26. .btn:hover {
  27. letter-spacing: 4px;
  28. }
  1. <p>I need this "effect" (I added some min-width):</p>
  2. <button type="button" class="btn btn-primary btn-large">Lorem</button>
  3. <p>However it won't work for larger strings</p>
  4. <button type="button" class="btn btn-primary btn-large">Lorem Ipsum</button><br><br>
  5. <button type="button" class="btn btn-primary btn-large">Lorem Ipsum Dolor</button>

我知道我可以使用JS并将元素固定宽度附加到它上面,但是我正在寻找一种CSS解决方案-如果有的话?

最佳答案
大概的想法是,复制文本时要考虑一个隐藏的文本,该文本已经具有字母间距,而另一个文本在动画顶部以填充该隐藏文本已经定义的空间:

这是通过使文本颜色与背景颜色相同来实现的:

  1. .btn {
  2. display: inline-block;
  3. text-align: center;
  4. background-color: transparent;
  5. border: 1px solid transparent;
  6. padding: 0.375rem 0.75rem;
  7. font-size: 1rem;
  8. border-radius: 0.25rem;
  9. cursor: pointer;
  10. transition: all 0.2s ease;
  11. margin-bottom:10px;
  12. }
  13. .btn-primary {
  14. background-color: #8065F1;
  15. color: #FFFFFF;
  16. }
  17. .btn-large {
  18. border-radius: 32px;
  19. Box-shadow: 0 2px 80px 0 rgba(74,0.23);
  20. padding: 0.25rem 3rem;
  21. font-size: 1.5rem;
  22. text-transform: uppercase;
  23. }
  24. .btn::before {
  25. content:attr(data-text);
  26. position:absolute;
  27. left:0;
  28. right:0;
  29. text-align:center;
  30. letter-spacing: initial;
  31. color:#fff;
  32. transition: all 0.2s ease;
  33. }
  34. .btn {
  35. letter-spacing: 4px;
  36. color:#8065F1;
  37. position:relative;
  38. }
  39. .btn:hover::before {
  40. letter-spacing: 4px;
  41. }
  1. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem">Lorem</button></div>
  2. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem Ipsum">Lorem Ipsum</button></div>
  3. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem Ipsum Dolor">Lorem Ipsum Dolor</button></div>

如果背景不是纯色,则另一个使用不透明度和两个伪元素:

  1. .btn {
  2. display: inline-block;
  3. text-align: center;
  4. background-color: transparent;
  5. border: 1px solid transparent;
  6. padding: 0.375rem 0.75rem;
  7. font-size: 1rem;
  8. border-radius: 0.25rem;
  9. cursor: pointer;
  10. transition: all 0.2s ease;
  11. margin-bottom:10px;
  12. }
  13. .btn-primary {
  14. background: linear-gradient(#8065F1,purple);
  15. color: #FFFFFF;
  16. }
  17. .btn-large {
  18. border-radius: 32px;
  19. Box-shadow: 0 2px 80px 0 rgba(74,0.23);
  20. padding: 0.25rem 3rem;
  21. font-size: 1.5rem;
  22. text-transform: uppercase;
  23. }
  24. .btn {
  25. position:relative;
  26. font-size:0;
  27. }
  28. .btn::before {
  29. content:attr(data-text);
  30. position:absolute;
  31. left:0;
  32. right:0;
  33. text-align:center;
  34. letter-spacing: initial;
  35. font-size: 1.5rem;
  36. transition: all 0.2s ease;
  37. }
  38. .btn::after {
  39. content:attr(data-text);
  40. letter-spacing: 4px;
  41. opacity:0;
  42. font-size: 1.5rem;
  43. }
  44. .btn:hover::before {
  45. letter-spacing: 4px;
  46. }
  1. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem">Lorem</button></div>
  2. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem Ipsum">Lorem Ipsum</button></div>
  3. <div><button type="button" class="btn btn-primary btn-large" data-text="Lorem Ipsum Dolor">Lorem Ipsum Dolor</button></div>

猜你在找的CSS相关文章