html:5>header+main>(.feature>h1.feature__title{Feature $})*3
اگر برنامه نویس هستید (مخصوصا برنامه نویس front-end) حتما تجربه کرده اید که نوشتن کدهای HTML واقعا خسته کننده است. خسته کننده بودن کدنویسی در زبان HTML دلایل مختلفی دارد که مهم ترین آن ها عبارت اند از:
بگذارید یک مثال برایتان بزنم. تصور کنید می خواهیم یک لیست HTML بسازیم. در این حالت برای ایجاد یک لیست ساده باید کدهای زیر را نوشت:
<h2 class="title">My items</h2> <ul class="list"> <li class="item item--1">Item 1</li> <li class="item item--2">Item 2</li> <li class="item item--3">Item 3</li> <li class="item item--4">Item 4</li> </ul>
که خروجی اش چنین چیزی میشود:
چرا وقت خود را صرف تایپ کردن کنیم در حالی که این وقت با ارزش باید صرف حل مسئله و طرح کلی شود؟
خوشبختانه برنامه نویسان و محققان دیگری نیز به این مسئله پی برده بودند. به همین دلیل گروهی سعی کردند این مشکل را بر طرف کنند و راه حل شان افزونه ی Emmet شد! این افزونه شاهکاری برای برنامه نویسان HTML محسوب می شود و شما حتما باید با آن آشنایی داشته باشید. آیا میخواهید بدانید Emmet چقدر کار شما را راحت تر می کند؟ می توانید مثال بالا را در یک خط بنویسید!
h2.title{My items}+ul.list>li.item.item--${Item $}*4
پس از نوشتن این کد کلید Tab کیبورد را بزنید و این کدها تبدیل به کدهای مثال اول می شوند! شاید با خودتان بگویید این کد دیگر چه کد عجیب و غریبی است!؟ با 10 دقیقه وقت گذاشتن و خواندن این مقاله شما هم می توانید کدهایتان را به سادگی هرچه تمام تر بنویسید و این کد برایتان عادی خواهد شد.
برای نصب این افزونه روی ادیتورهای مختلف به لینک های زیر مراجعه کنید:
نکتهی مهم: افزونه ی Emmet در برخی از ادیتورها به صورت پیش فرض فعال است. این شرکت ها ممکن است دستورات Emmet را کمی تغییر دهند اما ما در این مقاله دستورات اصلی و خالص Emmet را بررسی می کنیم. برای اطمینان بیشتر در مورد نحوه ی استفاده از دستورات Emmet در ادیتور خود، جستجوی اینترنتی انجام دهید. به طور مثال برای ادیتور PHPStorm به این صفحه مراجعه کنید. یکی از محدودیت های PHPStorm این است که تنها زمانی از کدهای Emmet خروجی می گیرد که حجمشان کمتر از 15 کیلوبایت باشد.
علامت نقطه، کلاس میسازد. شاید بتوان گفت علامت نقطه پرکاربردترین علامت بین علامت های افزونه ی Emmet است. بنابراین اگر کد ul.list را بنویسیم یعنی یک عنصر <ul> با کلاس list ایجاد کن! بنابراین این:
ul.list
می شود:
<ul class="list"></ul>
از این به بعد دستور Emmet را در خط اول کدها و نتیجه ی آن را در خط دوم مینویسم تا یکجا و مرتب باشند.
البته شما به یک کلاس محدود نیستید و می توانید از چندین کلاس استفاده کنید:
h1.heading.heading--primary <h1 class="heading heading--primary"></h1>
علامت # (هشتگ - هش - number sign و ... نام های مختلف این علامت هستند) در افزونه ی Emmet برای ما id می سازد. بنابراین:
#app>.container <div id="app"><div class="container"></div></div>
زمانی از علامت براکت {} استفاده می کنیم که بخواهیم علاوه بر ساختن تگ، محتوای داخل تگ را نیز مشخص کنیم. به مثال های زیر نگاهی بیندازید:
h2{What do I like ?} <h2>What do I like ?</h2>
و همینطور:
p.text>{Emmet is really }em{Cool} <p class="text">Emmet is really <em>Cool</em></p>
توضیح این مثال اینطور است که ابتدا p.text یک عنصر <p> با کلاس سپس محتوای این تگ را به همراه {em{Cool به آن اضافه کرده ایم. خودِ {em{Cool یعنی تگ <em> که محتوای آن cool باشد. اگر دقت کنید بعد از p.text یک علامت < داریم؛ آیا می دانید این علامت چیست؟
علامت <
برای ایجاد عناصر تو در تو (nested) استفاده می شوند، یعنی عنصری داخل عنصری دیگر باشد. به مثال های زیر توجه کنید:
ul>li <ul> <li></li> </ul>
و همینطور:
.container>.card>h1.card__title <div class="container"> <div class="card"><h1 class="card__title"></h1></div> </div>
علامت + به جای اینکه عناصر را به صورت تو در تو ایجاد کند، آن ها را به عنوان خواهر و برادر (تگ های sibling) ایجاد می کند:
header+nav+main+aside+footer <header></header> <nav></nav> <main></main> <aside></aside> <footer></footer>
آیا متوجه تفاوت علامت + و < شدید؟ تگ های خواهر و برادر، در کنار هم هستند و هر دو یک سطح را گرفته اند اما تگ های تو در تو داخل هم قرار دارند و یکی دربرگیرنده ی دیگری است.
این علامت کمتر استفاده می شود. کار این علامت برگشتن به سطح قبلی در تگ های تو در تو است. به مثال زیر توجه کنید:
header>p>span^^footer <header> <p><span></span></p> </header> <footer></footer>
به دستور Emmet (خط اول) در کد بالا نگاه کنید؛ قسمت ابتدایی آن می گوید header>p>span بنابراین تا تگ <span> وارد شده ایم. حالا اگر بخواهیم برای تگ بعدی به عقب برگردیم باید از ^ استفاده کنیم. چرا دو بار؟ از آن جا که در مثال بالا تگ span داخل تگ p و تگ p داخل تگ header قرار دارد، برای اضافه کردن یک تگ که با header برادر باشد باید 2 مرحله به عقب برگردیم بنابراین 2 بار از علامت ^ استفاده کرده ایم.
شاید برای خیلی از شما خواندن کدهای Emmet در بعضی موارد سخت شود. اگر کدهای Emmet شما طولانی شد و نیاز به دستی بندی تگ هایتان داشتید می توانید از علامت پرانتز استفاده کنید. مثال:
(header>p>span)+footer <header> <p><span></span></p> </header> <footer></footer>
البته قدرت اصلی این دسته بندی زمانی است که بخواهید قسمتی از کدهایتان را تکرار کنید. برای تکرار کد باید کل کد را در عددی ضرب کنید تا به همان تعداد تکرار شود. مثال:
(.card>h1.card__title+h3.card__subtitle+button{Click here})*3 <div class="card"> <h1 class="card__title"></h1> <h3 class="card__subtitle"></h3> <button>Click here</button> </div> <div class="card"> <h1 class="card__title"></h1> <h3 class="card__subtitle"></h3> <button>Click here</button> </div> <div class="card"> <h1 class="card__title"></h1> <h3 class="card__subtitle"></h3> <button>Click here</button> </div>
این قابلیت می تواند در هر کجا که بخواهید عدد اضافه کند. به طور مثال اگر چند عنصر داشته باشیم و بخواهیم به آن ها کلاس های page-1 تا page-4 را بدهیم می گوییم:
.page-$*4 <div class="page-1"></div> <div class="page-2"></div> <div class="page-3"></div> <div class="page-4"></div>
حتی می توانید با استفاده از علامت @ مشخص کنید که عدد گذاری از چه عددی شروع شود:
ul>li.item-$@3*3 <ul> <li class="item-3"></li> <li class="item-4"></li> <li class="item-5"></li> </ul>
علامت آکولاد [] زمانی استفاده می شود که شما بخواهید از attribute خاصی استفاده کنید:
input[type=number] <input type="number" />
اگر بخواهید بیشتر از یک attribute به تگ خود اضافه کنید باید بین attribute های مختلف فاصله قرار دهید:
img[src=logo.png alt=logo] <img src="logo.png" alt="logo" />
بهتر است همیشه کدهای Emmet زیر را به خاطر داشته باشید:
// برای ایجاد یک سند اچ تی ام ال html:5 <!DOCTYPE html> <html lang="”en”"> <head> <meta charset=”UTF-8"> <meta name=”viewport” content=”width=device-width, initial scale=1.0"> <meta http-equiv=”X-UA-Compatible” content=”ie=edge”> <title>Document</title> </head> <body></body> </html> lorem Lorem, ipsum dolor sit amet consectetur adipisicing elit. Modi, odit laboriosam enim illum et vero esse blanditiis libero perspiciatis numquam, voluptatum debitis, tempora veniam ipsam maxime atque est sequi dolore! // برای متصل کردن صفحه ی استایل ها به سند اصلی link:css <link rel="stylesheet" href="style.css" /> // برای متصل کردن کد های جاوا اسکریپت به سند اصلی script:src <script src=""></script>
کدهای HTML زیر را بررسی کرده و سعی کنید کد Emmet آن ها را بدون نگاه کردن به جواب، به دست آورید.
تست اول:
<div class="container"><p>Hello world!</p></div>
تست دوم:
<ul> <li class="item item--1">Item 1</li> <li class="item item--2">Item 2</li> <li class="item item--3">Item 3</li> </ul>
تست سوم:
<header class="header"> <img src="logo.png" alt="logo" class="header__logo" /> <h1 class="heading">Title</h1> </header>
تست چهارم:
<section> <h2 class=”heading-2"></h2> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Saepe accusamus totam enim harum deserunt laborum voluptates voluptatem sint possimus blanditiis commodi aliquam fuga dolorum quae similique qui, suscipit, ad vitae. </p> </section> <aside> Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae minima, assumenda quibusdam reiciendis blanditiis praesentium molestiae omnis fuga atque impedit, perferendis quisquam. Dolores aliquam minima labore! Deserunt inventore aperiam totam. </aside>
تست پنجم:
<!DOCTYPE html> <html lang="”en”"> <head> <meta charset=”UTF-8"> <meta name=”viewport” content=”width=device-width, initial scale=1.0"> <meta http-equiv=”X-UA-Compatible” content=”ie=edge”> <title>Document</title> </head> <body> <header></header> <main> <div class="”feature”"><h1 class="”feature__title”">Feature 1</h1></div> <div class="”feature”"><h1 class="”feature__title”">Feature 2</h1></div> <div class="”feature”"><h1 class="”feature__title”">Feature 3</h1></div> </main> </body> </html>
پاسخ سوالات به این شرح هستند:
:پاسخ تست اول
.container>p{Hello World}
:پاسخ تست دوم
ul>li.item.item--${Item $}*3
پاسخ تست سوم:
header.header>img[src=logo.png alt=logo].header__logo+h1.heading{Title}
پاسخ تست چهارم:
section>h2.heading-2+p>lorem^^aside>lorem
یا می توان گفت:
(section>h2.heading-2+p>lorem)+aside>lorem
پاسخ تست پنجم:
html:5>header+main>(.feature>h1.feature__title{Feature $})*3
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.