Як я можу відцентрувати SVG у діві?


252

У мене є SVG, який я намагаюся зосередити в діві. Діл має ширину або 900 пікс. SVG має ширину 400 пікс. У SVG встановлено автоматичне поле ліворуч та поле праворуч. Не працює, він просто діє так, ніби лівий край дорівнює 0 (за замовчуванням).

Хтось знає мою помилку?

Відповіді:


459

SVG за замовчуванням є вбудованим. Додайте display: blockдо нього і тоді margin: autoбуде працювати, як очікувалося.


10
досить впевнений, що це також означає, що вирівнювання тексту: центр на батьківському елементі також буде працювати (він працює для мене в Chrome в будь-якому випадку)
Натан

29

Вище відповіді для мене не спрацювали. Додавання атрибута preserveAspectRatio="xMidYMin"до <svg>тегу все-таки виправдало трюк. Для цього також viewBoxпотрібно вказати атрибут. Джерело: Мережа розробників Mozilla


7
Мій сучасний підхід - це флексбокс. Просто додайте: .container { display: flex; justify-content: center; }І додайте .container клас у div, який містить ваш svg.
Есгер

1
Подумайте, як додати ще одну відповідь до цього нового підходу, щоб я міг його схвалити. Спасибі за вашу допомогу!
Кріс Пітерс

24

Прочитавши вище, що svg за замовчуванням є вбудованим рядком, я просто додав у div таке:

<div style="text-align:center;">

і це зробило для мене трюк.

Пуристам це може не сподобатися (це зображення, а не текст), але, на мою думку, HTML і CSS перекрутили над центром, тому я вважаю, що це виправдано.


спасибі за це. простий і ефективний. божевільний годинами возився з viewPort та viewBox. це зробило трюк за лічені секунди. просто загорніть тупу річ у діву і відцентруйте її.
anon58192932

@ anon58192932 - Вас дуже вітають. Це нерозумно просто, але задовольняє те, що це корисно для інших, оскільки я отримав користь від безлічі більш складних відповідей на запитання тут.
Девід

20

Жодна з цих відповідей не працювала для мене. Ось як я це зробив.

position: relative;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);

3
я не знаю чому, але мені довелося скористатисяleft: 100%
Luís Deschamps Rudge

16

Відповіді вище виглядають неповними, оскільки вони говорять лише з точки зору css.

на позиціонування svg у вікні перегляду впливають два атрибути svg

  1. viewBox: визначає область прямокутника для покриття svg.
  2. зберегтиAspectRatio: визначити, де розмістити wrt viewport viewBox та як його розтягнути, якщо змінити вікно перегляду.

Перейдіть за цим посиланням з codepen для детального опису

<svg viewBox="70 160 800 190" preserveAspectRatio="xMaxYMax meet">


4

переконайтеся, що ваш css читає:

margin: 0 auto;

Незважаючи на те, що ви говорите, що ліворуч і праворуч встановлено автоматичне налаштування, можливо, ви ставите помилку. Звичайно, ми б не знали, оскільки ви не показали нам жодного коду.


3

Ви також можете зробити це:

<center>
<div style="width: 40px; height: 40px;">
    <svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
        <use class="sqs-use--icon" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#twitter-icon">
            <svg id="twitter-icon" viewBox="0 0 64 64" width="100%" height="100%">
                <path
                    d="M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z"
                    />
            </svg>
        </use>
    </svg>
</div>
</center>

2

Поставте свій код між цим, divякщо ви використовуєте bootstrap :

  <div class="text-center ">
  <i class="fa fa-twitter" style="font-size:36px "></i>
  <i class="fa fa-pinterest" style="font-size:36px"></i>
  <i class="fa fa-dribbble" style="font-size:36px"></i>
  <i class="fa fa-instagram" style="font-size:36px"></i>
  </div>

2

Flexbox - це ще один підхід: додайте .container { display: flex; justify-content: center; }І додайте .containerклас до div, який містить ваш svg.


0

Для мене виправлення було додати margin: 0 auto;до елемента, що містить <svg>.

Подобається це:

<div style="margin: 0 auto">
   <svg ...</svg>
</div>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.