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

Я пытаюсь разместить tunnel1 и tunnel2 рядом друг с другом, чтобы они показывали идентичные изображения рядом и имели одинаковый размер. Извините за вопрос новичка, спасибо.

В настоящее время у меня есть

<svg
     version="1.1"
     baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:svg="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     style="position: fixed; width: 100%; height: 100%; margin: 0;">


  <!--== TUNNEL ===============================================================-->
    <svg id="tunnel1"
       width="50%" height="50%"
       preserveAspectRatio="xMidYMid meet"
       viewBox="-100 -100 200 200"
       visibility="hidden">
    </svg>
    <svg id="tunnel2"
       width="50%" height="50%"
       preserveAspectRatio="xMidYMid meet"
       viewBox="-100 -100 200 200"
       visibility="hidden">
    </svg>
</svg>

1 ответ

Решение

Вы не предоставили никакого контента для дочерних SVG, поэтому неясно, что именно вы хотели сделать.

Я добавил несколько прямоугольников и удалил visibility="hidden" поэтому они видны. Осталось только расположить второй SVG вправо, что было легко достигнуто установкой x="50%",

<svg
     version="1.1"
     baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:svg="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     style="position: fixed; width: 100%; height: 100%; margin: 0;">


  <!--== TUNNEL ===============================================================-->
    <svg id="tunnel1"
       width="50%" height="50%"
       preserveAspectRatio="xMidYMid meet"
       viewBox="-100 -100 200 200">
           <rect x="-100" y="-100" width="200" height="200" fill="red"/>
    </svg>
    <svg id="tunnel2"
       x="50%"
       width="50%" height="50%"
       preserveAspectRatio="xMidYMid meet"
       viewBox="-100 -100 200 200">
           <rect x="-100" y="-100" width="200" height="200" fill="green"/>
    </svg>
</svg>

Это будет работать (коробки будут прилегать друг к другу), пока документ выше, чем он широкий. Если страница шире, чем квадратная, то будут и два дочерних SVG, потому что вы установили их ширину и высоту 50%.

Есть два основных решения этого:

(а) дать внешнему SVG заданный размер, квадратный или высокий, или (b) выровнять дочерние SVG так, чтобы они упирались в верхнюю среднюю точку.

Вы достигаете (б), используя preserveAspectRatio приписывать. Расположите левый дочерний SVG в правом верхнем углу его области просмотра (xMaxYMin"), а правый дочерний SVG - в верхнем левом углу своего окна просмотра (xMinYMin").

<svg
     version="1.1"
     baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:svg="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     style="position: fixed; width: 100%; height: 100%; margin: 0;">


  <!--== TUNNEL ===============================================================-->
    <svg id="tunnel1"
       width="50%" height="50%"
       preserveAspectRatio="xMaxYMin meet"
       viewBox="-100 -100 200 200">
           <rect x="-100" y="-100" width="200" height="200" fill="red"/>
    </svg>
    <svg id="tunnel2"
       x="50%"
       width="50%" height="50%"
       preserveAspectRatio="xMinYMin meet"
       viewBox="-100 -100 200 200">
           <rect x="-100" y="-100" width="200" height="200" fill="green"/>
    </svg>
</svg>

Другие вопросы по тегам