اخیراً شخصی از من پرسید که چگونه می توانم به اشکال زدایی SVG های درون خطی نزدیک شوم. از آنجایی که بخشی از DOM است، می توانیم هر SVG درون خطی را در هر DevTools مرورگری بررسی کنیم. و به همین دلیل، ما این توانایی را داریم که همه چیز را بررسی کنیم و هرگونه مشکل یا فرصت بالقوه برای بهینه سازی SVG را کشف کنیم.
اما گاهی اوقات، ما حتی نمی توانیم SVG های خود را اصلا ببینیم. در این موارد، شش مورد خاص وجود دارد که من در هنگام اشکال زدایی به دنبال آنها هستم.
viewBox
ارزش
1. La viewBox
یک نقطه سردرگمی رایج هنگام کار با SVG است. از نظر فنی استفاده از SVG درون خطی بدون آن خوب است، اما یکی از مهم ترین مزایای آن را از دست خواهیم داد: مقیاس بندی با ظرف. در عین حال، در صورت پیکربندی نادرست میتواند بر علیه ما کار کند و منجر به برش ناخواسته شود.
عناصر زمانی که بریده می شوند وجود دارند - آنها فقط در بخشی از سیستم مختصات هستند که ما نمی بینیم. اگر بخواهیم فایل را در برخی از برنامه های ویرایش گرافیکی باز کنیم، ممکن است به شکل زیر باشد:
ساده ترین راه برای رفع این مشکل؟ اضافه کردن overflow="visible"
به SVG، خواه در شیوه نامه ما باشد، به صورت خطی روی style
ویژگی یا مستقیماً به عنوان یک ویژگی ارائه SVG. اما اگر الف را نیز اعمال کنیم background-color
به SVG یا اگر عناصر دیگری در اطراف آن داشته باشیم، ممکن است اوضاع کمی بد به نظر برسد. در این صورت بهترین گزینه ویرایش آن خواهد بود viewBox
برای نشان دادن بخشی از سیستم مختصات که پنهان شده است:
چند چیز اضافی در مورد وجود دارد viewBox
که ارزش پوشش دادن را دارند در حالی که ما در مورد موضوع هستیم:
viewBox
کار می کند؟
چطور؟ SVG یک بوم بینهایت است، اما ما میتوانیم آنچه را که میبینیم و نحوه دیدن آن را از طریق ویوپورت و viewBox
.
La درگاه مشاهده یک قاب پنجره روی بوم بی نهایت است. ابعاد آن توسط تعریف می شود width
و height
ویژگی ها، یا در CSS با مربوطه width
و height
خواص ما میتوانیم هر واحد طولی را که میخواهیم تعیین کنیم، اما اگر اعداد بدون واحد ارائه کنیم، آنها بهطور پیشفرض روی پیکسل هستند.
La viewBox
با چهار مقدار تعریف می شود. دو مورد اول نقطه شروع در گوشه سمت چپ بالا هستند (x
و y
مقادیر، اعداد منفی مجاز). من اینها را ویرایش می کنم تا تصویر را دوباره قاب کنم. دو مورد آخر، عرض و ارتفاع سیستم مختصات در داخل نما هستند - اینجا جایی است که میتوانیم مقیاس شبکه را ویرایش کنیم (که در بخش به آن خواهیم پرداخت. زوم کردن).
در اینجا نشانه گذاری ساده شده SVG را نشان می دهد viewBox
و width
و height
هر دو صفت بر روی تنظیم می شوند <svg>
:
<svg viewBox="0 0 700 700" width="700" height="700"> <!-- etc. -->
</svg>
تغییر شکل مجدد
بنابراین، این:
<svg viewBox="0 0 700 700">
...نقشه های این:
<svg viewBox="start-x-axis start-y-axis width height">
ویوپورتی که می بینیم از جایی شروع می شود 0
در محور x و 0
در محور y ملاقات می کنند.
با تغییر این:
<svg viewBox="0 0 700 700">
…به این:
<svg viewBox="300 200 700 700">
... عرض و ارتفاع ثابت می ماند (700
هر واحد)، اما شروع سیستم مختصات اکنون در پایان است 300
نقطه روی محور x و 200
در محور y
در ویدیوی زیر یک رنگ قرمز اضافه می کنم <circle>
به SVG با مرکز آن در 300
نقطه روی محور x و 200
در محور y توجه کنید که چگونه تغییر می کند viewBox
مختصات به مقادیر یکسان همچنین محل دایره را در گوشه سمت چپ بالای کادر تغییر می دهد در حالی که اندازه رندر شده SVG ثابت می ماند (700
×700
). تمام کاری که من انجام دادم این بود که چیزها را با آن "قالب مجدد" کنم viewBox
.
زوم کردن
ما می توانیم دو مقدار آخر را در داخل تغییر دهیم viewBox
برای بزرگنمایی یا کوچکنمایی تصویر. هر چه مقادیر بزرگتر باشند، واحدهای SVG بیشتری برای قرار گرفتن در ویوپورت اضافه میشوند و در نتیجه تصویر کوچکتری ایجاد میشود. اگر بخواهیم نسبت 1:1 را حفظ کنیم، viewBox
عرض و ارتفاع باید با مقادیر عرض و ارتفاع ما مطابقت داشته باشند.
بیایید ببینیم وقتی این پارامترها را تغییر می دهیم در Illustrator چه اتفاقی می افتد. تابلو هنری است viewport
که با یک مربع سفید 700px نشان داده شده است. هر چیز دیگری خارج از آن منطقه، بوم بی نهایت SVG ما است و به طور پیش فرض بریده می شود.
شکل 1 زیر یک نقطه آبی را نشان می دهد 900
در امتداد محور x و 900
در امتداد محور y اگر دو مورد آخر را عوض کنم viewBox
مقادیر از 700
به 900
مثل این:
<svg viewBox="300 200 900 900" width="700" height="700">
... سپس نقطه آبی تقریباً به طور کامل به نظر می رسد، همانطور که در شکل 2 زیر مشاهده می شود. تصویر ما کوچک شده است زیرا مقادیر viewBox را افزایش دادیم، اما ابعاد واقعی عرض و ارتفاع SVG ثابت باقی ماندند و نقطه آبی راه خود را به ناحیه بدون برش نزدیکتر کرد.
یک مربع صورتی رنگ به عنوان شواهدی وجود دارد که نشان میدهد چگونه شبکه برای تناسب با دریچه دید مقیاس میشود: واحد کوچکتر میشود و خطوط شبکهای بیشتری در همان ناحیه دید قرار میگیرند. میتوانید با همان مقادیر در قلم زیر بازی کنید تا عملکرد آن را ببینید:
width
و height
2. گمشده یکی دیگر از موارد متداول دیگری که در هنگام اشکال زدایی SVG درون خطی به آن توجه می کنم این است که آیا نشانه گذاری حاوی این است width
or height
ویژگی های. این در بسیاری از موارد مشکل بزرگی نیست، مگر اینکه SVG داخل یک ظرف با موقعیت مطلق یا یک ظرف انعطاف پذیر باشد (همانطور که سافاری SVG را محاسبه می کند. width
ارزش با 0px
بجای auto
). مستثنی کردن width
or height
در این موارد ما را از دیدن تصویر کامل، همانطور که میتوانیم میبینیم، باز میدارد باز کردن این نسخه ی نمایشی CodePen و مقایسه آن در کروم، سافاری و فایرفاکس (برای نمایش بزرگتر روی تصاویر ضربه بزنید).
راه حل؟ عرض یا ارتفاع را اضافه کنید، چه به عنوان یک ویژگی ارائه، چه به صورت خطی در ویژگی سبک یا در CSS. از استفاده از ارتفاع به تنهایی خودداری کنید، به خصوص زمانی که روی آن تنظیم شده است 100%
or auto
. راه حل دیگر این است که حق را تنظیم کنید و مقادیر سمت چپ.
می توانید با آنها بازی کنید قلم زیر و گزینه های مختلف را با هم ترکیب کنید.
fill
و stroke
رنگ
3. سهوی همچنین ممکن است که ما رنگ را به آن اعمال کنیم <svg>
برچسب، چه یک سبک درون خطی باشد یا از CSS. این خوب است، اما ممکن است مقادیر رنگ دیگری در سرتاسر نشانه گذاری وجود داشته باشد یا سبک هایی که با رنگ تنظیم شده در تضاد هستند. <svg>
، باعث نامرئی شدن قطعات می شود.
به همین دلیل است که من تمایل دارم به دنبال آن باشم fill
و stroke
ویژگی های موجود در نشانه گذاری SVG و پاک کردن آنها. ویدیوی زیر یک SVG را نشان می دهد که در CSS با رنگ قرمز استایل داده شده است fill
. چند مورد وجود دارد که بخشهایی از SVG مستقیماً در علامتگذاری که برای آشکار کردن قطعات گمشده حذف کردم، با رنگ سفید پر میشوند.
4. مفقود شدن شناسنامه ها
این یکی ممکن است بسیار بدیهی به نظر برسد، اما تعجب خواهید کرد که هر چند وقت یکبار آن را می بینم. فرض کنید ما یک فایل SVG در Illustrator ساختهایم و در مورد نامگذاری لایههایمان بسیار کوشا بودیم تا هنگام صادرات فایل، شناسههای تطبیق خوبی در نشانهگذاری دریافت کنید. و بیایید بگوییم که قصد داریم با اتصال به آن شناسهها، به آن SVG در CSS استایل دهیم.
این یک راه خوب برای انجام کارها است. اما موارد زیادی وجود دارد که من مشاهده کردهام که فایل SVG برای بار دوم به همان مکان صادر شده و شناسهها متفاوت است، معمولاً هنگام کپی/پیست کردن مستقیم وکتورها. شاید یک لایه جدید اضافه شده باشد، یا یکی از لایه های موجود تغییر نام داده باشد یا چیزی مشابه. در هر صورت، قوانین CSS دیگر با شناسههای نشانهگذاری SVG مطابقت ندارند و باعث میشوند SVG متفاوت از آنچه انتظار دارید ارائه شود.
در فایلهای بزرگ SVG ممکن است پیدا کردن آن شناسهها مشکل باشد. این زمان خوبی است برای باز کردن DevTools، بررسی آن قسمت از گرافیک که کار نمی کند و ببینید آیا آن شناسه ها هنوز مطابقت دارند یا خیر.
بنابراین، میتوانم بگویم ارزش دارد که یک فایل SVG صادر شده را در یک ویرایشگر کد باز کنید و قبل از تعویض چیزها، آن را با نسخه اصلی مقایسه کنید. برنامه هایی مانند Illustrator، Figma و Sketch هوشمند هستند، اما این بدان معنا نیست که ما مسئول بررسی آنها نیستیم.
5. چک لیست برای برش و پوشش
اگر یک SVG به طور غیرمنتظره ای بریده شود و viewBox
درست است، من معمولاً به CSS نگاه می کنم clip-path
or mask
ویژگی هایی که ممکن است با تصویر تداخل داشته باشند. وسوسه انگیز است که به نشانه گذاری درون خطی نگاه کنید، اما خوب است به یاد داشته باشید که یک ظاهر طراحی SVG ممکن است در جای دیگری اتفاق بیفتد.
برش و ماسک کردن CSS به ما اجازه می دهد تا بخش هایی از یک تصویر یا عنصر را "پنهان" کنیم. در SVG، <clipPath>
یک عملیات برداری است که بخش هایی از یک تصویر را بدون هیچ نتیجه ای در نیمه برش می دهد. را <mask>
تگ یک عملیات پیکسلی است که امکان شفافیت، جلوه های نیمه شفاف و تار شدن لبه ها را فراهم می کند.
این یک چک لیست کوچک برای اشکال زدایی مواردی است که در آن Clipping و masking درگیر است:
- مطمئن شوید که مسیر برش (یا ماسک) و گرافیک با یکدیگر همپوشانی دارند. قسمت های همپوشانی آن چیزی است که نمایش داده می شود.
- اگر مسیر پیچیدهای دارید که گرافیک شما را قطع نمیکند، سعی کنید تبدیلها را تا زمانی که مطابقت داشته باشند اعمال کنید.
- شما همچنان می توانید کد داخلی را با DevTools بررسی کنید، حتی اگر
<clipPath>
or<mask>
ارائه نشده اند، پس از آن استفاده کنید! - نشانه گذاری را در داخل کپی کنید
<clipPath>
و<mask>
و قبل از بستن آن را بچسبانید</svg>
برچسب زدن سپس a را اضافه کنیدfill
به آن اشکال و مختصات و ابعاد SVG را بررسی کنید. اگر هنوز تصویر را نمی بینید، سعی کنید آن را اضافه کنیدoverflow="hidden"
به<svg>
برچسب. - بررسی کنید که الف منحصر به فرد شناسه برای
<clipPath>
or<mask>
، و اینکه همان شناسه برای اشکال یا گروهی از اشکالی که بریده شده یا ماسک شده اند اعمال می شود. یک شناسه ناهماهنگ ظاهر را خراب می کند. - وجود اشتباهات تایپی در علامت گذاری بین
<clipPath>
or<mask>
برچسب ها fill
,stroke
,opacity
، یا برخی سبک های دیگر که بر روی عناصر داخل اعمال می شود<clipPath>
بی فایده هستند - تنها بخش مفید هندسه منطقه پر آن عناصر است. به همین دلیل است که اگر از a<polyline>
به عنوان یک رفتار خواهد کرد<polygon>
و در صورت استفاده از a<line>
هیچ اثر بریده ای نخواهید دید.- اگر بعد از اعمال a تصویر خود را نمی بینید
<mask>
، مطمئن شوید کهfill
محتوای پوشش کاملاً سیاه نیست. درخشندگی عنصر پوشاننده کدورت گرافیک نهایی را تعیین می کند. میتوانید قسمتهای روشنتر را ببینید و قسمتهای تیرهتر محتوای تصویرتان را پنهان میکنند.
می توانید با عناصر ماسک شده و بریده شده بازی کنید این قلم.
6. فضای نام
آیا می دانستید که SVG یک زبان نشانه گذاری مبتنی بر XML است؟ خوب، این است! فضای نام برای SVG بر روی تنظیم شده است xmlns
صفت:
<svg xmlns="http://www.w3.org/2000/svg"> <!-- etc. -->
</svg>
چیزهای زیادی برای دانستن در مورد فاصله نام در XML وجود دارد و MDN دارای یک آغازگر عالی بر روی آن است. کافی است بگوییم، فضای نام زمینه را برای مرورگر فراهم می کند و به آن اطلاع می دهد که نشانه گذاری مختص SVG است. ایده این است که وقتی بیش از یک نوع XML در یک فایل مانند SVG و XHTML وجود دارد، فضاهای نام به جلوگیری از درگیری ها کمک می کنند. این مسئله در مرورگرهای مدرن بسیار کمتر رایج است، اما میتواند به توضیح مشکلات رندر SVG در مرورگرهای قدیمیتر یا مرورگرهایی مانند Gecko که در تعریف Doctypes و فضاهای نام سختگیر هستند کمک کند.
مشخصات SVG 2 نیازی به فاصله نامی ندارد هنگام استفاده از نحو HTML ولی بسیار مهم است اگر پشتیبانی از مرورگرهای قدیمی در اولویت است - به علاوه، اضافه کردن آن ضرری ندارد. به این ترتیب، زمانی که <html>
عناصر xmlns
ویژگی تعریف شده است، در آن موارد نادر تضاد نخواهد داشت.
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <body> <svg xmlns="http://www.w3.org/2000/svg" width="700px" height="700px"> <!-- etc. --> </svg> </body>
</html>
این همچنین در هنگام استفاده از SVG درون خطی در CSS، مانند تنظیم آن به عنوان تصویر پس زمینه، صادق است. در مثال زیر، پس از تایید موفقیت آمیز، یک نماد تیک بر روی ورودی ظاهر می شود. این چیزی است که CSS به نظر می رسد:
textarea:valid { background: white url('data:image/svg+xml, <svg xmlns="http://www.w3.org/2000/svg" width="26" height="26"> <circle cx="13" cy="13" r="13" fill="%23abedd8"/> <path fill="none" stroke="white" stroke-width="2" d="M5 15.2l5 5 10-12"/> </svg>') no-repeat 98% 5px;
}
وقتی فضای نام داخل SVG را در ویژگی پسزمینه حذف میکنیم، تصویر ناپدید میشود:
یکی دیگر از پیشوندهای رایج فضای نام این است xlink:href
. ما هنگام ارجاع به بخشهای دیگر SVG مانند: الگوها، فیلترها، انیمیشنها یا گرادیانها از آن بسیار استفاده میکنیم. توصیه این است که شروع به تعویض آن کنید href
همانطور که یکی دیگر از SVG 2 منسوخ شده است، اما ممکن است مشکلات سازگاری با مرورگرهای قدیمی وجود داشته باشد. در این صورت می توانیم از هر دو استفاده کنیم. فقط به یاد داشته باشید که فضای نام را درج کنید xmlns:xlink="http://www.w3.org/1999/xlink"
اگر هنوز استفاده می کنید xlink:href
.
مهارت های SVG خود را ارتقا دهید!
امیدوارم اگر متوجه شدید که SVG های درون خطی به درستی رندر شده را عیب یابی می کنید، این نکات به شما در صرفه جویی در زمان بسیار کمک کند. اینها فقط چیزهایی هستند که من به دنبال آنها هستم. شاید پرچمهای قرمز متفاوتی داشته باشید که تماشا میکنید - اگر چنین است، در نظرات به من بگویید!
نکته اصلی این است که داشتن حداقل درک اولیه از آن به صرفه است روش های مختلف SVG می تواند استفاده شود. چالش های CodePen اغلب SVG را ترکیب می کنند و تمرین خوبی ارائه می دهند. در اینجا چند منبع دیگر برای ارتقاء سطح وجود دارد:
چند نفر را پیشنهاد می کنم برای خوبی های مربوط به SVG دنبال کنید:
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. Web3 Metaverse Intelligence. دانش تقویت شده دسترسی به اینجا.
- منبع: https://css-tricks.com/6-common-svg-fails-and-how-to-fix-them/
- 1
- 1: نسبت 1
- 11
- 7
- 9
- 98
- a
- توانایی
- قادر
- درباره ما
- مطلق
- عمل
- اضافه
- اضافی
- پس از
- در برابر
- معرفی
- اجازه می دهد تا
- بسيار خوب
- و
- تصاوير متحرك
- دیگر
- اعمال می شود
- درخواست
- با استفاده از
- روش
- برنامه های
- محدوده
- دور و بر
- هنر
- آثار هنری
- خواص
- به عقب
- زمینه
- اساسی
- زیرا
- قبل از
- بودن
- در زیر
- مزایای
- بهترین
- میان
- بزرگ
- بیت
- سیاه پوست
- آبی
- پایین
- شکستن
- روشن تر
- مرورگر
- مرورگرهای
- نقاشی
- مورد
- موارد
- CAT
- باعث می شود
- مرکز
- تغییر دادن
- تبادل
- متغیر
- بررسی
- علامت تیک
- چک
- کروم
- دایره
- نزدیک
- بسته
- رمز
- رنگ
- ترکیب
- بیا
- آینده
- مشترک
- مقایسه
- سازگاری
- پیچیده
- تضاد
- گیجی
- ظرف
- شامل
- محتوا
- زمینه
- کنترل
- مختصات
- گوشه
- متناظر
- میتوانست
- زن و شوهر
- پوشش
- CSS
- کاهش
- داده ها
- مقدار
- به طور پیش فرض
- تعریف کردن
- تعیین می کند
- DID
- مختلف
- مشکل
- ابعاد
- مستقیما
- نمی کند
- DOM
- آیا
- DOT
- پایین
- رسم
- هر
- آسان ترین
- سردبیر
- اثر
- اثرات
- عناصر
- در جای دیگر
- به طور کامل
- و غیره
- حتی
- همه چیز
- مدرک
- مثال
- به استثنای
- موجود
- انتظار
- توضیح دهید
- نتواند
- کمی از
- فیگما
- شکل
- پرونده
- فایل ها
- پر شده
- فیلترها برای تصفیه آب
- نهایی
- پیدا کردن
- پایان
- فایرفاکس
- نام خانوادگی
- مناسب
- رفع
- پرچم ها
- قابل انعطاف
- پیروی
- FRAME
- از جانب
- کامل
- کاملا
- دریافت کنید
- خوب
- شیب ها
- گرافیک
- گرافیک
- بزرگ
- توری
- گروه
- اتفاق می افتد
- ارتفاع
- کمک
- اینجا کلیک نمایید
- پنهان
- پنهان شدن
- امید
- چگونه
- چگونه
- HTML
- HTTPS
- صدمه
- ICON
- اندیشه
- تصویر
- تصاویر
- in
- شامل
- ترکیب کردن
- افزایش
- نا محدود
- ورودی
- در عوض
- مداخله کردن
- گرفتار
- موضوع
- مسائل
- IT
- خود
- نگاه داشتن
- دانستن
- زبان
- بزرگ
- بزرگتر
- نام
- لایه
- لایه
- میراث
- طول
- سطح
- لاین
- خطوط
- کوچک
- محل
- دیگر
- نگاه کنيد
- شبیه
- به دنبال
- مطالب
- از دست دادن
- خیلی
- ساخته
- ساخت
- بسیاری
- ماسک
- مسابقه
- مطابق
- ام دی ان
- دیدار
- قدرت
- گم
- مدرن
- بیش
- اکثر
- موزیلا
- نامگذاری
- منفی
- جدید
- تعداد
- واضح
- ارائه
- ONE
- باز کن
- باز
- افتتاح
- عمل
- فرصت ها
- بهینه سازی
- گزینه
- گزینه
- اصلی
- دیگر
- خارج از
- پارامترهای
- بخش
- ویژه
- بخش
- مسیر
- الگوهای
- کشور
- مردم
- قطعات
- پیکسل
- برنامه
- افلاطون
- هوش داده افلاطون
- PlatoData
- بازی
- بسیاری
- به علاوه
- نقطه
- تثبیت موقعیت
- پتانسیل
- تمرین
- ارائه
- جلوگیری از
- اولویت
- برنامه
- املاک
- ویژگی
- ارائه
- فراهم می کند
- نادر
- نسبت
- تازه
- توصیه
- قرمز
- پرچم های سرخ
- ماندن
- باقی مانده است
- بقایای
- به یاد داشته باشید
- برداشتن
- حذف شده
- تفسیر
- نمایندگی
- نیاز
- منابع
- مسئوليت
- نتیجه
- نتایج
- فاش کردن
- قوانین
- سیاحت اکتشافی در افریقا
- همان
- ذخیره
- مقیاس
- مقیاس ها
- مقیاس گذاری
- حوزه
- دوم
- بخش
- مشاهده
- تنظیم
- محیط
- اشکال
- نشان
- نشان می دهد
- قابل توجه
- ساده شده
- پس از
- شش
- اندازه
- کوچک
- کوچکتر
- هوشمند
- So
- راه حل
- برخی از
- چیزی
- خاص
- مشخصات
- مربع
- شروع
- راه افتادن
- شروع می شود
- هنوز
- سخت
- سبک
- موفق
- فوق العاده
- پشتیبانی
- غافلگیر شدن
- SVG
- نحو
- سیستم
- TAG
- شیر
- La
- چیز
- اشیاء
- از طریق
- سراسر
- زمان
- بار
- نکات
- به
- تن
- موضوع
- شفافیت
- درست
- برملا کردن
- درک
- واحد
- واحد
- ناخواسته
- us
- استفاده کنید
- معمولا
- اعتبار سنجی
- ارزش
- ارزشها
- مختلف
- تصویری
- چشم انداز
- قابل رویت
- W3
- تماشا کردن
- راه
- چی
- چه
- که
- در حین
- سفید
- اراده
- بدون
- مهاجرت کاری
- کارگر
- با ارزش
- خواهد بود
- XML
- شما
- شما
- خودت
- زفیرنت
- زوم
- بزرگنمایی