بوسیله دستور @media
می توان یک دسته استایل را فقط مخصوص به یک مدیای خاص نوشت.
به عنوان مثال می توان مشخص کرد که استایل های زیر فقط زمانی استفاده شوند که مدیای مورد نظر از نوع پرینت شده باشد. یعنی زمانی که سایت ما قرار است بر روی کاغد چاپ شود این استایل ها اعمال شوند:
@media print {
/* استایل هایی که برای چاپ اعمال می شوند */
body {
font-size: 10pt;
}
a[href]:after {
content: "(" attr(href) ")";
/* ... */
}
}
همانطور که در مثال بالا نشان داده شده است نیاز است که بعد از نوشتن دستور @media
نوع مدیا را مشخص کنیم و بعد می توانیم داخل براکت استایل های مورد نظرمان را بنویسیم.
همینطور اگر نیاز داریم که استایل های منظور برای چندین نوع مختلف مدیا اعمال شوند می توانیم نام آنها را بوسیله ویرگول از هم جدا کنیم:
@media screen, speech {
/* استایل های اینجا زمانی اعمال می شوند که صفحه ما توسط یک "صفحه نمایش" یا "مبدل متن به گفتار" پیمایش شود */
}
مقادیر دستور @media
مدیاهایی که در CSS قابل شناسایی هستند به شرح زیر می باشند:
غیر از موارد all، screen، print و speech بقیه موارد منسوخ شده اند.
all
استایل مورد نظر برای تمام دستگاه ها مناسب می باشد.
braille
دستگاه های بریل لمسی.
embossed
پرینترهایی که بصورت صفحه صفحه بریل چاپ می کنند.
handheld
دستگاه های قابل حمل در دست (این دستگاهها معمولا صفحه نمایش های کوچکی و پهنای باند کمی دارند)
استایل ها مناسب زمانی است که صفحه بصورت سند پرینت می شود یا بر روی صفحه نمایش در حالت پرینت نمایش داده می شود.
projection
به عنوان مثال پروژکتورها
screen
صفحه نمایش های رنگی. این نوع مدیا رایج ترین نوع مدیا برای نمایش صفحات وب می باشد.
speech
مبدل های متن به گفتار
tty
این نوع فقط با متن سر و کار دارد به عنوان مثال ترمینال ها یا مرورگرهای متنی مثل Lynx و Links. همچنین در این نوع نمی توانیم از واحد px در سی اس اس استفاده کنیم.
در تصویر زیر صفحه وب در مرورگر فایرفاکس و Lynx نمایش داده شده است:
tv
دستگا های نوع تلوزیونی (رزولوشن پایین، رنگی، صفحات نمایشی با قابلیت اسکرول محدود، دارای صدا)
غیر از موارد all، screen، print و speech بقیه موارد منسوخ شده اند.
Media Query
یک مدیا کوئری دستوری است که یک یا چند نوع مدیا را مشخص می کند و همچنین می تواند شامل عبارات شرطی باشد که شرایط خاصی را بر اساس ویژگی های آن مدیا بیان می کند.
این ویژگی ها شامل عرض، ارتفاع، رنگ و غیره می باشند.
مثلا می توانیم مشخص کنیم که استایل های مورد نظر فقط در صفحه نمایش هایی بزرگتر تر از 60em
اعمال شود.
@media screen and (min-width: 60em) {
/* استایل ها */
}
@media handheld and (min-width: 10em), screen and (min-width: 20em) {
/* دستگها های قابل حمل دردستی که بزرگتر از 10 هستند و صفحه نمایش هایی که بزرگتر از 20 می باشند */
}
برای اطلاعات بیشتر به مطلب مربوط به Media Query مراجعه کنید.
اگر نوع مدیا را مشخص نکنیم بطور پیشفرض استایل ها برای تمام مدیاها اعمال می شوند. این بدین معنی است که موارد زیر با هم برابر هستند:
@media all and (min-width: 60em) {
/* استایل ها */
}
@media (min-width: 60em) {
/* استایل ها */
}
از دستور @media
می توانیم در هرجای فایل CSS که نیاز داشته باشیم استفاده کنیم.
همچنین در HTML می توانیم بصورت زیر مشخص کنیم که فایل استایل مورد نظر فقط برای یک مدیا خاص اعمال شود.
<link rel='stylesheet' media='screen and (min-width: 701px) and (max-width: 900px)' href='css/medium.css' />
در مثال زیر فایل استایل مربوط به پرینت جدا در نظر گرفته شده است:
<link rel='stylesheet' media='print' href='print.css' />
دموی زیر را بررسی کنید:
See the Pen @media by Mojtaba Seyedi (@seyedi) on CodePen.
باسلام وخسته نباشید.
میخواستم بدونم چجوری میشه که به دستور هایی که تو media وارد میکنیم، دستور !important نداد؟
آخه من هر وقت میخوام دستور media بزنم، باید همه ی استایل های داخل media رو !important کنم!؟ آیا راهی برای حل این مشکل هستش؟
سلام، همچین مشکلی وجود نداره، ولی برای اینکه بفهمم چکاری رو دارید اشتباه انجام میدید که موجب این مشکل میشه باید کدتون رو ببینم، یک دمو توی سایت jsbin.com یا codepen.io درست کنید و لینکش رو بزارید اینجا تا بررسی کنم. اگرهم سوالتون رو در پنل بحث و گفتگو مطرح کنید خیلی بهتره.
ممنونم
بلاخره پیدا کردم مشکل از کجاست!
ببینید وقتی به کلاس container ( مثلا ) width میدم
باید تو media screen اون width رو !important کنم تا کد اجرا بشه!!!!!
راهنمایی کنید…
ممنونم
دوست عزیز توی فایل html تو قسمت فراخوانی اول فایل اصلی css رو فراخوانی کن بعد فایل مربوط به به ریسپانسیوت
بله میدونم ..
به صورت خلاصه و کلی ، در وبسایتهای واکنشگرا که اگه هم نمیدونید واکنشگرا یا همون ریسپانسیو چی هست باید بگم که وقتی شما وبسایتی رو با هر مدل دستگاهی ( گوشی ، تبلت ، کامپیوتر و .. ) میبینی خیلی قشنگ و خوشگل بهت محتوا رو بدون هیچ کم و زیادی ( فضایهای خالی افقی که باید Scroll کنی ، زوم کردن روی محتوا ) و مشکلاتی از این قبیل رو نمیبینی یا منوهایی که میبینی و در دستگاههای مختلف به صورتهای مختلف نمایش داده میشوند ؛ اینها همه کارها توسط مدیاکوئری و viewport چه بصورت فریمورک مانند بوتاسترپ یا کدنویسی اختصاصی انجام میشه .
امیدوارم که متوجه شده باشید .
سلام با بخش @media تازه اشنا شدم و برام نامفهوم بود چیکار میکنه و باید کجاها حتما استفاده کنیم.
ممنون میشم برام توضیح بدید
ممنونم از شما آقای سیدی عزیز
سلام استاد..:)
وقتتون بخیر….
جسارتا استاد بنده مفهدم کلی @media رو فهمیدم، ولی هر کاری میکنم بازم نمی تونم از media استفاده کنم…. دیگه واقعا خسته شدم.
این دمویی هست که دارم روش کار میکنم، ممنون میشم اگه تونستید ایرادم رو بگید.. meta tag مربوط به media رو هم گذاشتم.
https://codepen.io/Monireh12/pen/eYYpXjj
سلام ای واقعا خسته، خداقوت
مشکل اینجاست که کلمه width رو اشتباه نوشتی:
سلااام استاد….. :) :)
واقعا ؟؟؟!!!
خستگی زیاد نتیجه اش همین میشه دیگه….
ممنوووووووووونم.
خودتون بالا نوشتین width الان مینویسن withd چکار میکنین با خودتون:)))
سلام و خدا قوت خدمت شما. میخواستم بدونم not و only که در کنار media نوشته میشه معنیش چیه
سلام، همچنین
only دیگه آنچنان کاربردی نداره، قبلا ازش استفاده میشد که مرورگرهایی که شروط عرض رو متوجه نمیشدند جلوشونو گرفت. از روی معنیش هم مفهومه که میگه “فقط اگر همه شروط برقرار بود” این استایل ها رو اعمال کن.
not هم که میگه هرچی شرط نوشتم اگر برعکسش برقرار بود این این استایل ها رو اعمال کن.
سلام خسته نباشید
برای اینکه بخوام وبسایت برای همه نمایشگر ها به صورت یکسان نمایش داده بشن باید چه کدی رو بزنم ؟
هر مفهومی رو که متوجه نشم اخرش با سایت شما همه چیز دستگیرم میشه. واقعا ممنون و خسته نباشید بابت این سایت خوبتون و مطالب کاربردی