область с возможностью перемещения охватывает больше, чем просто текст внутри ?

#html #css

#HTML #css

Вопрос:

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

 a:hover{
    color: #ff0000;
    text-shadow: 1px 1px 20px #ff0000;
}
#shrine{
    display: inline-block;
    font-family: 'aurora';
    text-shadow: 1px 1px 0px #ff0000, 1px -1px 0px #ff0000, -1px -1px 0 #ff0000, -1px 1px 0px #ff0000;
    transform: scaleY(1.6) scaleX(.9);
    padding: 0;
    margin: 0;
    font-size: 8vw;
    margin-bottom: 2vw;
}  
 <div class='maindiv'>
    <ul>
      <li>
        <a href=''><span id='shrine'>SHRINE</span></a>
      </li>
    <ul>
<div>  

Ответ №1:

Это связано со transform свойством, изменяющим способ отображения элемента.

При преобразовании встроенного элемента его контур все равно будет ссылаться на его начальную позицию.

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

 * {
    box-sizing: border-box;
}

a {
    outline: 1px solid #000;
}

a:hover{
    color: #ff0000;
    text-shadow: 1px 1px 20px #ff0000;
}

#shrine,
#shrineSmaller,
#shrineNoTransform,
#shrineRight {
    display: inline-block;
    font-family: 'aurora';
    text-shadow: 1px 1px 0px #ff0000, 1px -1px 0px #ff0000, -1px -1px 0 #ff0000, -1px 1px 0px #ff0000;
    padding: 0;
    margin: 0;
    font-size: 8vw;
    margin-bottom: 2vw;
}

#shrine {
    transform: scaleY(1.6) scaleX(.9);
}

#shrineSmaller {
    transform: scaleY(1.6) scaleX(.5);
}

#shrineRight {
    transform: scaleY(1.6) scaleX(.9) translateX(115%);
}  
 <div class='maindiv'>
    <ul>
        <li>
            <a href=''><span id='shrine'>SHRINE</span></a>
        </li>
        <li>
            <a href=''><span id='shrineSmaller'>SHRINE</span></a>
        </li>
        <li>
            <a href=''><span id='shrineNoTransform'>SHRINE</span></a>
        </li>
        <li>
            <a href=''><span id='shrineRight'>SHRINE</span></a>
        </li>
    <ul>
<div>  

Ответ №2:

Вы можете использовать путь SVG, чтобы сделать доступным только текст.

  • Сначала перейдите к https://danmarshall.github.io/google-font-to-svg-path / и сгенерируйте SVG-путь.
  • Во-вторых, <a href=''><span id='shrine'>SHRINE</span></a> замените сгенерированным кодом пути SVG.
  • В-третьих, примените стиль наведения CSS к пути.

 .maindiv svg > g > path:hover {
    fill: red;
    stroke: red;
}  
 <div class='maindiv'>
  <ul>
    <li>
      <svg width="255.8" height="70" viewBox="0 0 255.8 70" xmlns="http://www.w3.org/2000/svg"><g id="svgGroup" stroke-linecap="round" fill-rule="evenodd" font-size="9pt" stroke="#000" stroke-width="0.25mm" fill="none" style="stroke:#000;stroke-width:0.25mm;fill:none"><path d="M 195.1 68.1 L 195.1 70 L 160.9 70 L 160.9 68.1 L 167.5 68.1 L 152.6 41.7 L 136.7 68.1 L 147.3 68.1 L 147.3 70 L 126.6 70 L 126.6 68.1 L 133.3 68.1 L 150.8 38.7 L 129.9 2 L 124.5 2 L 124.5 0 L 158.2 0 L 158.2 2 L 151.4 2 L 164.9 26.2 L 180 2 L 169.6 2 L 169.6 0 L 190.1 0 L 190.1 2 L 183.5 2 L 166.6 29 L 189.3 68.1 L 195.1 68.1 Z M 66.8 2.2 L 66.8 0 L 118.8 0 L 119.8 19.8 L 118 19.8 A 67.919 67.919 0 0 0 115.61 14.629 Q 112.508 8.647 109.2 5.95 A 14.803 14.803 0 0 0 104.453 3.42 Q 100.776 2.2 95.7 2.2 L 92.2 2.2 L 92.2 33.1 L 95.6 33.1 A 10.151 10.151 0 0 0 103.094 29.98 A 12.683 12.683 0 0 0 103.5 29.55 A 17.096 17.096 0 0 0 106.329 25.162 Q 107.216 23.219 107.796 20.88 A 30.604 30.604 0 0 0 108 20 L 109.5 20 L 109.5 49.6 L 107.8 49.6 A 43.088 43.088 0 0 0 106.689 45.721 Q 105.372 41.871 103.587 39.632 A 10.977 10.977 0 0 0 102.95 38.9 A 10.075 10.075 0 0 0 97.44 35.96 A 14.764 14.764 0 0 0 94.6 35.7 L 92.2 35.7 L 92.2 67.8 L 96 67.8 A 25.565 25.565 0 0 0 104.39 66.468 A 22.33 22.33 0 0 0 111.65 62.3 Q 118.1 56.8 120.5 48.2 L 122.5 48.2 L 121.7 70 L 66.8 70 L 66.8 67.8 L 72.7 67.8 L 72.7 2.2 L 66.8 2.2 Z M 1 0 L 60 0 L 61 25.1 L 59.1 25.1 Q 54.709 11.827 51.314 6.97 A 17.41 17.41 0 0 0 51.3 6.95 A 10.911 10.911 0 0 0 43.334 2.207 A 15.276 15.276 0 0 0 41.5 2.1 L 40.3 2.1 L 40.3 67.9 L 48.8 67.9 L 48.8 70 L 12.3 70 L 12.3 67.9 L 20.8 67.9 L 20.8 2.1 L 19.5 2.1 A 12.906 12.906 0 0 0 14.943 2.871 Q 11.833 4.035 9.734 6.959 A 14.19 14.19 0 0 0 9.6 7.15 A 29.46 29.46 0 0 0 7.691 10.387 Q 5.851 13.948 3.837 19.465 A 169.507 169.507 0 0 0 1.9 25.1 L 0 25.1 L 1 0 Z M 195.8 0 L 254.8 0 L 255.8 25.1 L 253.9 25.1 Q 249.509 11.827 246.114 6.97 A 17.41 17.41 0 0 0 246.1 6.95 A 10.911 10.911 0 0 0 238.134 2.207 A 15.276 15.276 0 0 0 236.3 2.1 L 235.1 2.1 L 235.1 67.9 L 243.6 67.9 L 243.6 70 L 207.1 70 L 207.1 67.9 L 215.6 67.9 L 215.6 2.1 L 214.3 2.1 A 12.906 12.906 0 0 0 209.743 2.871 Q 206.633 4.035 204.534 6.959 A 14.19 14.19 0 0 0 204.4 7.15 A 29.46 29.46 0 0 0 202.491 10.387 Q 200.651 13.948 198.637 19.465 A 169.507 169.507 0 0 0 196.7 25.1 L 194.8 25.1 L 195.8 0 Z" vector-effect="non-scaling-stroke"/></g></svg>
     </li>
   </ul>
 </div>  

Ответ №3:

Масштабирование, которое вы выполняете, увеличивает высоту текста за пределы высоты строки li , которая его содержит. Если вы установите li{overflow:hidden} , вы можете увидеть, какая часть высоты текста li учитывает переполнение.

Например, я могу добавить li {line-height: 350%; overflow:hidden} в ваш CSS, чтобы высота строки соответствовала точному размеру текста (в моем браузере), чтобы обеспечить более плотный периметр наведения. Тем не менее, я не рекомендую это; Я просто пытаюсь показать вам, что происходит.

 a:hover{
    color: #ff0000;
    text-shadow: 1px 1px 20px #ff0000;

}
#shrine{
    display: inline-block;
    font-family: 'aurora';
    text-shadow: 1px 1px 0px #ff0000, 1px -1px 0px #ff0000, -1px -1px 0 #ff0000, -1px 1px 0px #ff0000;
    transform: scaleY(1.6) scaleX(.9);
    padding: 0;
    margin: 0;
    font-size: 8vw;
    margin-bottom: 2vw;
    
}
li {line-height: 350%; overflow:hidden}  
 <div class='maindiv'>
            <ul>
                <li>
                    <a href=''><span id='shrine'>SHRINE</span></a>
                </li>
            <ul>
<div>