Pseudo-class یا شبه کلاس
شبه کلاس ها برای تعریف وضعیت خاصی از یک عنصر استفاده می شوند به طور مثال:
- زمانی که موس روی دکمه ای می رود، آن دکه استایل جدیدی بگیرد
- استایل لینک های بازدید شده (قبلا توسط کاربر کلیک شده اند) و لینک های بازدید نشده تفاوت داشته باشند
- یک عنصر زمانی استایل بگیرد که در حالت focus (روی آن کلیک شده و فعال) باشد
ساختار کلی شبه کلاس ها به این صورت است:
selector:pseudo-class { property:value; }
شبه کلاس Anchor
Anchor ها همان لینک ها هستند (تگ <a>) و شبه کلاس های خاصی دارند:
a:link
: لینک هایی که هنوز وارد آن ها نشده ایدa:visited
: لینک هایی که حداقل یک بار روی آن ها کلیک کرده ایمa:hover
: زمانی که موس را روی یک لینک می بریدa:active
: لحظه ای که روی لینک کلیک می کنید (فشردن کلیک چپ)
به مثال زیر نگاه کنید:
<!DOCTYPE html> <html> <head> <style> /* لینکی که وارد آن نشده ایم */ a:link { color: red; } /* لینکی که وارد آن شده ایم */ a:visited { color: green; } /* آمدن موس روی لینک */ a:hover { color: hotpink; } /* کلیک کردن روی لینک */ a:active { color: blue; } </style> </head> <body> <p><b><a href="https://www.roxo.ir/server-response-time/" target="_blank">This is a link to Roxo.ir/plus</a></b></p> <p dir='rtl'><b>نکته:</b> a:hover باید همیشه بعد از دستورات a:link و a:visited بیاید تا کار کند. در غیر این صورت بی تاثیر خواهد بود </p> <p dir='rtl'><b>نکته:</b> a:active باید همیشه بعد از دستور a:hover بیاید تا کار کند. در غیر این صورت بی تاثیر خواهد بود </p> </body> </html>
در مثال بالا گفته ایم که:
- لینکی که وارد آن نشده ایم قرمز خواهد بود
- لینکی که وارد آن شده ایم سبز خواهد بود
- هنگام آمدن موس روی لینک، لینک صورتی می شود
- هنگام کلیک کردن روی لینک، لینک آبی خواهد شد
a:hover
باید همیشه بعد از دستورات a:link
و a:visited
بیاید تا کار کند. در غیر این صورت بی تاثیر خواهد بود. همچنین a:active
باید همیشه بعد از دستور a:hover
بیاید تا کار کند. در غیر این صورت عمل نخواهد کرد.شبه کلاس ها و CSS
همانطور که دیدید، شما می توانید شبه کلاس ها را با دستورات CSS ادغام کنید. به طور مثال:
<!DOCTYPE html> <html> <head> <style> a.highlight:hover { color: #ff0000; } </style> </head> <body> <p><a class="highlight" href="google.com">Goodle</a></p> <p><a href="roxo.ir/plus">Roxo</a></p> </body> </html>
البته این ترکیبات مخصوص لینک ها نیستند و شما می توانید شبه کلاس ها را برای عناصر دیگر نیز تعیین کنید.
به طور مثال در کد زیر از شبه کلاس hover:
روی عنصر <div> استفاده کرده ایم:
<!DOCTYPE html> <html> <head> <style> div { background-color: green; color: white; padding: 25px; text-align: center; } div:hover { background-color: blue; } </style> </head> <body> <p>Mouse over the div element below to change its background color:</p> <div>Mouse Over Me</div> </body> </html>
البته این ها مثال های ساده ای هستند. ما می توانیم تردستی های جالبی با استفاده از شبه کلاس ها انجام بدهیم! به طور مثال به صفحه ی خروجی کد زیر بروید و سعی کنید متوجه نحوه ی کار کد ها بشوید:
<!DOCTYPE html> <html> <head> <style> p { display: none; background-color: yellow; padding: 20px; } div:hover p { display: block; } </style> </head> <body dir='rtl' align='center'> <div><strong>موس خودت را روی این نوشته بیاور</Strong> <p>من یه باکس نامرئی هستم! از دیدنت خوشحالم!</p> </div> </body> </html>
شبه کلاس first-child:
شبه کلاس first-child:
عنصری را هدف میگیرد که اولین فرزند عنصری دیگر باشد. به مثال زیر توجه کنید:
<!DOCTYPE html> <html> <head> <style> p:first-child { color: blue; } </style> </head> <body> <p>This is some text.</p> <p>This is some text.</p> <p dir='rtl'><b>هشدار:</b> اگر می خواهید این ویژگی در Internet Explorer 8 و قبل تر کار کند باید DOCTYPE را مشخص کرده باشید.</p> </body> </html>
در این مثال گفته ایم اولین عنصر <p> را پیدا کن که اولین فرزند هر عنصری باشد. در واقع تعریف first-child همین است!
البته می توانیم کدها را کمی تغییر دهیم. به طور مثال در کد زیر می خواهیم تمام عناصر <i> را پیدا کنیم که اولین فرزند یک عنصر <p> باشند:
<!DOCTYPE html> <html> <head> <style> p i:first-child { color: blue; } </style> </head> <body> <p>I am a <i>strong</i> person. I am a <i>strong</i> person.</p> <p>I am a <i>strong</i> person. I am a <i>strong</i> person.</p> <p dir='rtl'><b>هشدار:</b> اگر می خواهید این ویژگی در Internet Explorer 8 و قبل تر کار کند باید DOCTYPE را مشخص کرده باشید.</p> </body> </html>
از آنجا که هر دو عنصر <i> اولین فرزند هر دو عنصر <p> بوده اند، هر دو انتخاب شده اند.
یک مثال دیگر می تواند به این شکل باشد که بگوییم تمام عناصر <i> را انتخاب کند که در یک عنصر <p> باشند و آن عنصر <p> اولین فرزند یک عنصر دیگر نیز باشد! به مثال زیر توجه کنید:
<!DOCTYPE html> <html> <head> <style> p:first-child i { color: blue; } </style> </head> <body> <p>I am a <i>strong</i> person. I am a <i>strong</i> person.</p> <p>I am a <i>strong</i> person. I am a <i>strong</i> person.</p> <p dir='rtl'><b>هشدار:</b> اگر می خواهید این ویژگی در Internet Explorer 8 و قبل تر کار کند باید DOCTYPE را مشخص کرده باشید.</p> </body> </html>
شبه عنصر lang:
شبه عنصر lang:
به شما اجازه می دهد که برای زبان های مختلف قوانین مختلفی تعیین کنید. lang:
در مثال زیر عناصر <q> را پیدا می کند و سپس اگر “lang=”no داشتند برای آن ها علامت خاصی می گذارد:
<!DOCTYPE html> <html> <head> <style> q:lang(no) { quotes: "~" "~"; } </style> </head> <body> <p>Some text <q lang="no">A quote in a paragraph</q> Some text.</p> <p>In this example, :lang defines the quotation marks for q elements with lang="no":</p> <p dir='rtl'><b>هشدار:</b> اگر می خواهید این ویژگی (یعنی :lang) در Internet Explorer 8 و قبل تر کار کند باید DOCTYPE! را مشخص کرده باشید.</p> </body> </html>
شبه کلاس های دیگر
شبه کلاس های بسیار زیادی در زبان CSS وجود دارد. به این شبه کلاس ها نگاه کنید:
:active :any-link :blank :checked :current :default :defined :dir() :disabled :drop :empty :enabled :first :first-child :first-of-type :fullscreen :future :focus :focus-visible :focus-within :has() :host :host() :host-context() :hover :indeterminate :in-range :invalid :is() :lang() :last-child :last-of-type :left :link :local-link :not() :nth-child() :nth-col() :nth-last-child() :nth-last-col() :nth-last-of-type() :nth-of-type() :only-child :only-of-type :optional :out-of-range :past :placeholder-shown :read-only :read-write :required :right :root :scope :target :target-within :user-invalid :valid :visited :where()
واضح است که شبه کلاس ها بسیار زیاد هستند و نمیتوان تمام آن ها را در این قسمت پوشش داد. اگر دوست دارید با شبه کلاس های بیشتری آشنا شوید می توانید به صفحه ی شبکه ی توسعه دهندگان Mozilla سر بزنید. در این صفحه اطلاعات کاملی به همراه مثال های متعدد برای انواع شبه کلاس ها آورده شده است.
امیدوارم از این قسمت لذت برده باشید.