Встроенный элемент SVG слишком мал на боковой панели навигации - PullRequest
0 голосов
/ 05 мая 2020

Привет всем, у меня есть SVG, экспортированный из Adobe Illustrator, сделанный для меня, который я пытаюсь использовать в настраиваемой выдвижной боковой панели навигации. По какой-то причине изображение не изменится в размере ни на какие значения. Он отображается правильно при открытии самого SVG в веб-браузере, но кажется слишком маленьким, чтобы разглядеть его даже на панели навигации. Может ли кто-нибудь помочь мне в использовании SVG на моем сайте. В настоящее время я использую значок Font Awesome в качестве заполнителя, так как до сегодняшнего дня ждал завершения работы с lo go. Я бы хотел, чтобы он работал аналогично этому. Элемент списка класса lo go содержит заполнитель, который необходимо заменить на фактический lo go. Я могу использовать SVG в теле сайта.

Navbar в индексе. html

<nav class="custom-navbar">
    <ul class="custom-navbar-nav">

      <li class="logo">
        <a class="custom-nav-link">
          <span class="link-text">Kortney Stinson</span>
          <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="kickstarter-k"
            class="svg-inline--fa fa-kickstarter-k fa-w-12" role="img" xmlns="http://www.w3.org/2000/svg"
            viewBox="0 0 384 512">
            <path fill="currentColor"
              d="M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"
              class="fa-primary"></path>
          </svg>


        </a>


      </li>


      <li class="custom-nav-item">
        <a href="#home" class="custom-nav-link">
          <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="home"
            class="svg-inline--fa fa-home fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
            <path fill="currentColor"
              d="M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"
              class="fa-primary"></path>
          </svg>
          <span class="link-text">Home</span>
        </a>
      </li>


      <li class="custom-nav-item">
        <a href="#about" class="custom-nav-link">
          <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="address-card"
            class="svg-inline--fa fa-address-card fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg"
            viewBox="0 0 576 512">
            <path fill="currentColor"
              d="M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"
              class="fa-primary"></path>
          </svg>
          <span class="link-text">About</span>
        </a>
      </li>


      <li class="custom-nav-item">
        <a href="#work" class="custom-nav-link">
          <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="laptop-code"
            class="svg-inline--fa fa-laptop-code fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg"
            viewBox="0 0 640 512">
            <path fill="currentColor"
              d="M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"
              class="fa-primary"></path>
          </svg>
          <span class="link-text">Work</span>
        </a>
      </li>



      <li class="custom-nav-item">
        <a href="#contact" class="custom-nav-link">
          <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="paper-plane"
            class="svg-inline--fa fa-paper-plane fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg"
            viewBox="0 0 512 512">
            <path fill="currentColor"
              d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"
              class="fa-primary"></path>
          </svg>
          <span class="link-text">Contact</span>
        </a>
      </li>

Вот все CSS, которые применяются к Navbar

/ * Боковая панель навигации * /

.custom-navbar {
    width: 5rem;
    height: 100vh;
    position: fixed;
    background-color: var(--bg-primary);
    transition: width 200ms ease;
    z-index: 1;
}

.custom-navbar-nav {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    height: 100%
}

.custom-nav-item {
    width: 100%
}

.custom-nav-item:last-child {
    margin-top: auto;
}

.custom-nav-link {
    display: flex;
    align-items: center;
    height: 5rem;
    color: var(--text-primary);
    text-decoration: none;
    filter: grayscale(100%) opacity(0.7);
    transition: var(--transition-speed);
}

.custom-nav-link:hover {
    filter: grayscale(0%) opacity(1);
    background: var(--bg-secondary);
    color: var(--text-secondary);
}

.link-text {
    display: none;
    margin-left: 1rem;
    font-family: 'Open Sans', sans-serif;
}

.custom-nav-link svg {
    width: 2rem;
    min-width: 2rem;
    margin: 0 1.5rem;
}




.fa-primary {
    color: #f9bc60;

}


.fa-primary,
.fa-secondary {
    transition: var(--transition-speed);
}

.logo {
    font-weight: bold;
    text-transform: uppercase;
    margin-bottom: 1rem;
    text-align: center;
    color: var(--text-secondary);
    background: var(--bg-secondary);
    font-size: 1.5rem;
    letter-spacing: 0.3ch;
    width: 100%;
}

.logo svg {
    transform: rotate(0deg);
    transition: var(--transition-speed);
}

.custom-navbar:hover .logo svg {
    transform: rotate(-360deg);
}

Это SVG, который я пытаюсь использовать.

 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
        x="0px" y="0px" width="1080px" height="1080px" viewBox="0 0 1080 1080"
        style="enable-background:new 0 0 1080 1080;" xml:space="preserve">
        <style type="text/css">
          .st0 {
            fill: #F9BC60;
          }
        </style>
        <g>
          <g>
            <polygon class="st0" points="470.04,589.59 456.54,589.59 497.02,490.41 510.52,490.41        " />
            <path class="st0" d="M608.83,490.41l-44.35,24.24v13.3v0.02v15.53l30.89,15.16l-30.89,15.28v15.65l44.35-24.24v-13.3v-0.02V536.5
            l-30.89-15.16l30.89-15.28V490.41z M607.51,564.56l-41.7,22.8v-12.6l30.16-14.92l2.4-1.19l-2.41-1.18l-30.16-14.8v-12.5
            l41.7,22.64L607.51,564.56L607.51,564.56z" />
            <path class="st0"
              d="M547.92,509.18v15.65l-30.89,15.28l30.89,15.16v15.55l-44.35-24.08v-13.31L547.92,509.18z" />
          </g>
          <path class="st0"
            d="M652.33,633.55H427.67v-187.1h224.65v187.1H652.33z M441.54,619.68h196.92V460.32H441.54V619.68z" />
        </g>
      </svg>

1 Ответ

1 голос
/ 05 мая 2020

Попробуйте следующее: удалите ширину и высоту элемента svg и используйте это viewBox="427.6 446 225 187". Поскольку вы собираетесь использовать svg внутри документа html, вам не нужно использовать пространства имен.

Чтобы узнать, какой viewBox использовать, я добавил идентификатор к элементу <g>, который оборачивает все формы внутри. Затем в javascript I'm console.log(elSVG.getBBox()) Это возвращает объект SVGRect со следующими свойствами: x, y, width, height. Затем я использую эти свойства для определения нового значения viewBox, например: viewBox="x y width height". Теперь элемент svg примет всю доступную ширину, то есть ширину родительского элемента.

Также я удалил элемент стиля, так как вы можете использовать css вместо

.st0 {
            fill: #F9BC60;
          }
<svg viewBox="427.6 446 225 187">
        <g id="elSVG">
          <g>
            <polygon class="st0" points="470.04,589.59 456.54,589.59 497.02,490.41 510.52,490.41        " />
            <path class="st0" d="M608.83,490.41l-44.35,24.24v13.3v0.02v15.53l30.89,15.16l-30.89,15.28v15.65l44.35-24.24v-13.3v-0.02V536.5
            l-30.89-15.16l30.89-15.28V490.41z M607.51,564.56l-41.7,22.8v-12.6l30.16-14.92l2.4-1.19l-2.41-1.18l-30.16-14.8v-12.5
            l41.7,22.64L607.51,564.56L607.51,564.56z" />
            <path class="st0"
              d="M547.92,509.18v15.65l-30.89,15.28l30.89,15.16v15.55l-44.35-24.08v-13.31L547.92,509.18z" />
          </g>
          <path class="st0"
            d="M652.33,633.55H427.67v-187.1h224.65v187.1H652.33z M441.54,619.68h196.92V460.32H441.54V619.68z" />
        </g>
      </svg>
ОБНОВЛЕНИЕ

OP комментирует;

Я хотел спросить, могу ли я просто отредактировать ширину / высоту, чтобы увеличить или уменьшить размер SVG, если он использовался где-то еще, где требовалось более точное управление? Или мне нужно изменить какие-либо другие значения?

Элемент svg будет принимать всю доступную ширину, то есть ширину родительского элемента.

В качестве альтернативы вы можете добавить ширину в CSS. Избегайте использования ширины и высоты или, по крайней мере, сохраняйте одно и то же соотношение сторон.

Если вам нужно использовать один и тот же значок несколько раз, вы можете создать новый элемент svg с тем же viewBox, и вместо повторения кода вы можете повторно использовать то, что в моем коде <g id="elSVG">

.st0 {fill: #F9BC60;}

svg:nth-of-type(1){width:50px}
svg:nth-of-type(2){width:150px}
<svg viewBox="427.6 446 225 187">
        <g id="elSVG">
          <g>
            <polygon class="st0" points="470.04,589.59 456.54,589.59 497.02,490.41 510.52,490.41        " />
            <path class="st0" d="M608.83,490.41l-44.35,24.24v13.3v0.02v15.53l30.89,15.16l-30.89,15.28v15.65l44.35-24.24v-13.3v-0.02V536.5
            l-30.89-15.16l30.89-15.28V490.41z M607.51,564.56l-41.7,22.8v-12.6l30.16-14.92l2.4-1.19l-2.41-1.18l-30.16-14.8v-12.5
            l41.7,22.64L607.51,564.56L607.51,564.56z" />
            <path class="st0"
              d="M547.92,509.18v15.65l-30.89,15.28l30.89,15.16v15.55l-44.35-24.08v-13.31L547.92,509.18z" />
          </g>
          <path class="st0"
            d="M652.33,633.55H427.67v-187.1h224.65v187.1H652.33z M441.54,619.68h196.92V460.32H441.54V619.68z" />
        </g>
      </svg>
      
 <svg viewBox="427.6 446 225 187">
 <use xlink:href="#elSVG" />
 </svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...