سلام عصر بخیر.
ببینید شما وقتی چیزی روی داخل پرانتز میزنید معمولا attribute رو میخواهید فراخونی کنید به مثال زیر دقت کنید.
<input type="text" id="lname" name="lname">
وقتی شما داخل [ ] میزنید میخواهید صفت(attribute) که داخل تگ مورد نظر تعریف شده فرا خونی کنید
input[type="text"]{
background-color:blue;
}
ولی وقتی همچنین کدی میزنید
input:focus{
background-color:red;
}
اینجا چیز به نام صفت(attribute) تعریف نشده چون شما چیزی به نام focusتعریف نکردید و یک حالت کلی هست که برای input از پیش تعریف شده و در واقع شما میخواهید اگر این حال کلی روی تگ input اتفاق افتاده بود روش کد css اعمال بشه.
برای a هم به همین صورت هست وقتی تگ a با صفت(attribute) مثل target تعریف بشه میونید با استفاده از [ ] روی اون کد اعمال کنید و عملا چون target یک صفت هست و حالت کلی نیست پس بدون [ ] معنی نداره.
2 کاربر که از نویسنده این موضوع تشکر کرده اند.