CSS নেস্টিংয়ের জন্য একটি সিনট্যাক্স বাছাই করতে সহায়তা করুন

দুটি প্রতিযোগী বাক্য গঠনের জন্য আপনার সাহায্যের প্রয়োজন, কোনটি স্পেসিফিকেশন প্রার্থীর কাছে পৌঁছানো উচিত তা নির্ধারণ করতে।

CSS নেস্টিং হল একটি সুবিধাজনক সিনট্যাক্স সংযোজন যা একটি রুলসেটের ভিতরে CSS যোগ করার অনুমতি দেয়। আপনি যদি SCSS , Less অথবা Stylus ব্যবহার করে থাকেন, তাহলে আপনি অবশ্যই এর কয়েকটি স্বাদ দেখেছেন:

.nesting {
  color: hotpink;

  > .is {
    color: rebeccapurple;

    > .awesome {
      color: deeppink;
    }
  }
}

যা প্রিপ্রসেসর দ্বারা নিয়মিত CSS-এ কম্পাইল করার পর, নিয়মিত CSS-এ পরিণত হয় এভাবে:

.nesting {
  color: hotpink;
}

.nesting > .is {
  color: rebeccapurple;
}

.nesting > .is > .awesome {
  color: deeppink;
}

এই সিনট্যাক্সের একটি অফিসিয়াল CSS ভার্সন নিয়ে জোর দিয়ে ভাবনাচিন্তা করা হচ্ছে এবং আমাদের পছন্দ অনুযায়ী এই সম্পর্ক ভাঙতে আমরা কমিউনিটির সাহায্য নিতে চাই। এই পোস্টের বাকি অংশে সিনট্যাক্সের বিকল্পগুলি প্রবর্তন করা হবে যাতে আপনি শেষে একটি জরিপ করার জন্য অবগত থাকতে পারেন।

উপরে দেখানো সঠিক নেস্টিং উদাহরণটি কেন CSS নেস্টিংয়ের সিনট্যাক্স হতে পারে না?

সবচেয়ে জনপ্রিয় নেস্টিং সিনট্যাক্সটি কেন ব্যবহার করা যাবে না তার কয়েকটি কারণ রয়েছে:

  1. অস্পষ্ট বিশ্লেষণ
    কিছু নেস্টেড সিলেক্টর দেখতে হুবহু প্রোপার্টিজের মতো হতে পারে এবং প্রিপ্রসেসরগুলি বিল্ড টাইমে সেগুলি সমাধান এবং পরিচালনা করতে সক্ষম হয়। ব্রাউজার ইঞ্জিনগুলির একই সুবিধা থাকবে না, সিলেক্টরগুলিকে কখনই আলগাভাবে ব্যাখ্যা করার প্রয়োজন নেই।

  2. প্রিপ্রসেসর পার্সিং দ্বন্দ্ব
    CSS নেস্টিং পদ্ধতিতে প্রিপ্রসেসর বা বিদ্যমান ডেভেলপার নেস্টিং ওয়ার্কফ্লো ভাঙা উচিত নয় । এটি ঐ বাস্তুতন্ত্র এবং সম্প্রদায়ের জন্য বিঘ্নিত এবং অসম্মানজনক হবে।

  3. :is() এর জন্য অপেক্ষা করছি
    বেসিক নেস্টিংয়ের জন্য :is() প্রয়োজন হয় না কিন্তু আরও জটিল নেস্টিংয়ের জন্য এটি প্রয়োজন। নির্বাচক তালিকা এবং নেস্টিংয়ের হালকা ভূমিকার জন্য উদাহরণ #3 দেখুন। কল্পনা করুন যে নির্বাচক তালিকাটি শুরুতে না হয়ে একটি নির্বাচকের মাঝখানে ছিল, সেই ক্ষেত্রে অন্য নির্বাচকের মাঝখানে নির্বাচকদের গোষ্ঠীভুক্ত করার জন্য :is() প্রয়োজন।

আমরা যা তুলনা করছি তার সারসংক্ষেপ

আমরা সঠিকভাবে CSS নেস্টিং করতে চাই, এবং সেই চেতনায় আমরা কমিউনিটিকে অন্তর্ভুক্ত করছি। নিম্নলিখিত বিভাগগুলি আমরা যে তিনটি সম্ভাব্য সংস্করণ মূল্যায়ন করছি তা বর্ণনা করতে সাহায্য করবে। তারপরে আমরা তুলনা করার জন্য ব্যবহারের কিছু উদাহরণ বিবেচনা করব, এবং শেষে একটি হালকা জরিপ হবে যেখানে আপনাকে জিজ্ঞাসা করা হবে যে আপনি সামগ্রিকভাবে কোনটি পছন্দ করেছেন।

বিকল্প ১: @nest

এটি CSS Nesting 1 -এর বর্তমান নির্দিষ্ট সিনট্যাক্স। এটি & দিয়ে নতুন নেস্টেড সিলেক্টর শুরু করে নেস্ট অ্যাপেন্ডিং স্টাইল তৈরি করার একটি সুবিধাজনক উপায় প্রদান করে। এটি @nest একটি নতুন সিলেক্টরের ভিতরে যেকোনো জায়গায় & কনটেক্সট স্থাপন করার একটি উপায় হিসেবেও প্রদান করে, যেমন যখন আপনি কেবল বিষয় যোগ করছেন না। এটি নমনীয় এবং ন্যূনতম কিন্তু আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে @nest বা & মনে রাখার প্রয়োজনের বিনিময়ে।

বিকল্প ২: @nest সীমাবদ্ধ

এটি একটি কঠোর বিকল্প, দুটি নেস্টিং পদ্ধতি মনে রাখার খরচ কমানোর প্রয়াসে। এই সীমাবদ্ধ বাক্য গঠনটি শুধুমাত্র @nest অনুসরণ করে নেস্টিং করার অনুমতি দেয়, তাই কোনও append-only convenience প্যাটার্ন নেই। পছন্দের অস্পষ্টতা দূর করে, নেস্ট তৈরির একটি সহজে মনে রাখার উপায় তৈরি করে, কিন্তু প্রচলিত পদ্ধতির পক্ষে সূক্ষ্মতা ত্যাগ করে।

বিকল্প ৩: বন্ধনী

@nest প্রস্তাবনার সাথে দ্বি-বাক্যবিন্যাস বা অতিরিক্ত বিশৃঙ্খলা এড়াতে, Miriam Suzanne এবং Elika Etemad একটি বিকল্প বাক্য গঠন প্রস্তাব করেছেন যা অতিরিক্ত কোঁকড়া-বন্ধনীর উপর নির্ভর করে। এটি বাক্য গঠনের স্বচ্ছতা প্রদান করে, শুধুমাত্র দুটি অতিরিক্ত অক্ষর সহ, এবং কোনও নতুন at-rules নেই। এটি নেস্টেড নিয়মগুলিকে প্রয়োজনীয় নেস্টিংয়ের ধরণ অনুসারে গোষ্ঠীভুক্ত করার অনুমতি দেয়, যা একাধিক অনুরূপ নেস্টেড নির্বাচককে সরল করার একটি উপায়।

উদাহরণ ১ - সরাসরি বাসা বাঁধা

@নীড়

.foo {
  color: #111;

  & .bar {
    color: #eee;
  }
}

@nest সবসময়

.foo {
  color: #111;

  @nest & .bar {
    color: #eee;
  }
}

বন্ধনী

.foo {
  color: #111;

  {
    & .bar {
      color: #eee;
    }
  }
}

সমতুল্য CSS

.foo {
  color: #111;
}

.foo .bar {
  color: #eee;
}

উদাহরণ ২ - যৌগিক বাসা বাঁধা

@নীড়

.foo {
  color: blue;

  &.bar {
    color: red;
  }
}

@nest সবসময়

.foo {
  color: blue;

  @nest &.bar {
    color: red;
  }
}

বন্ধনী

.foo {
  color: blue;

  {
    &.bar {
      color: red;
    }
  }
}

সমতুল্য CSS

.foo {
  color: blue;
}

.foo.bar {
  color: red;
}

উদাহরণ ৩ - নির্বাচক তালিকা এবং নেস্টিং

@নীড়

.foo, .bar {
  color: blue;

  & + .baz,
  &.qux {
    color: red;
  }
}

@nest সবসময়

.foo, .bar {
  color: blue;

  @nest & + .baz,
  &.qux {
    color: red;
  }
}

বন্ধনী

.foo, .bar {
  color: blue;

  {
    & + .baz,
    &.qux {
      color: red;
    }
  }
}

সমতুল্য CSS

.foo, .bar {
  color: blue;
}

:is(.foo, .bar) + .baz,
:is(.foo, .bar).qux {
  color: red;
}

উদাহরণ ৪ - একাধিক স্তর

@নীড়

figure {
  margin: 0;

  & > figcaption {
    background: lightgray;

    & > p {
      font-size: .9rem;
    }
  }
}

@nest সবসময়

figure {
  margin: 0;

  @nest & > figcaption {
    background: lightgray;

    @nest & > p {
      font-size: .9rem;
    }
  }
}

বন্ধনী

figure {
  margin: 0;

  {
    & > figcaption {
      background: lightgray;

      {
        & > p {
          font-size: .9rem;
        }
      }
    }
  }
}

সমতুল্য CSS

figure {
  margin: 0;
}

figure > figcaption {
  background: hsl(0 0% 0% / 50%);
}

figure > figcaption > p {
  font-size: .9rem;
}

উদাহরণ ৫ - অভিভাবকদের নেস্টিং বা বিষয় পরিবর্তন

@নীড়

.foo {
  color: red;

  @nest .parent & {
    color: blue;
  }
}

@nest সবসময়

.foo {
  color: red;

  @nest .parent & {
    color: blue;
  }
}

বন্ধনী

.foo {
  color: red;

  {
    .parent & {
      color: blue;
    }
  }
}

সমতুল্য CSS

.foo {
  color: red;
}

.parent .foo {
  color: blue;
}

উদাহরণ ৬ - সরাসরি এবং প্যারেন্ট নেস্টিং মিশ্রিত করা

@নীড়

.foo {
  color: blue;

  @nest .bar & {
    color: red;

    &.baz {
      color: green;
    }
  }
}

@nest সবসময়

.foo {
  color: blue;

  @nest .bar & {
    color: red;

    @nest &.baz {
      color: green;
    }
  }
}

বন্ধনী

.foo {
  color: blue;

  {
    .bar & {
      color: red;

      {
        &.baz {
          color: green;
        }
      }
    }
  }
}

সমতুল্য CSS

.foo {
  color: blue;
}

.bar .foo {
  color: red;
}

.bar .foo.baz {
  color: green;
}

উদাহরণ ৭ - মিডিয়া কোয়েরি নেস্টিং

@নীড়

.foo {
  display: grid;

  @media (width => 30em) {
    grid-auto-flow: column;
  }
}

অথবা স্পষ্টভাবে / বর্ধিত

.foo {
  display: grid;

  @media (width => 30em) {
    & {
      grid-auto-flow: column;
    }
  }
}

@nest সর্বদা (সর্বদা স্পষ্ট)

.foo {
  display: grid;

  @media (width => 30em) {
    @nest & {
      grid-auto-flow: column;
    }
  }
}

বন্ধনী

.foo {
  display: grid;

  @media (width => 30em) {
    grid-auto-flow: column;
  }
}

অথবা স্পষ্টভাবে / বর্ধিত

.foo {
  display: grid;

  @media (width => 30em) {
    & {
      grid-auto-flow: column;
    }
  }
}

সমতুল্য CSS

.foo {
  display: grid;
}

@media (width => 30em) {
  .foo {
    grid-auto-flow: column;
  }
}

উদাহরণ ৮ - নেস্টিং গ্রুপ

@নীড়

fieldset {
  border-radius: 10px;

  &:focus-within {
    border-color: hotpink;
  }

  & > legend {
    font-size: .9em;
  }

  & > div {
    & + div {
      margin-block-start: 2ch;
    }

    & > label {
      line-height: 1.5;
    }
  }
}

@nest সবসময়

fieldset {
  border-radius: 10px;

  @nest &:focus-within {
    border-color: hotpink;
  }

  @nest & > legend {
    font-size: .9em;
  }

  @nest & > div {
    @nest & + div {
      margin-block-start: 2ch;
    }

    @nest & > label {
      line-height: 1.5;
    }
  }
}

বন্ধনী

fieldset {
  border-radius: 10px;

  {
    &:focus-within {
      border-color: hotpink;
    }
  }

  > {
    legend {
      font-size: .9em;
    }

    div {
      + div {
        margin-block-start: 2ch;
      }

      > label {
        line-height: 1.5;
      }
    }}
  }
}

সমতুল্য CSS

fieldset {
  border-radius: 10px;
}

fieldset:focus-within {
  border-color: hotpink;
}

fieldset > legend {
  font-size: .9em;
}

fieldset > div + div {
  margin-block-start: 2ch;
}

fieldset > div > label {
  line-height: 1.5;
}

উদাহরণ ৯ - জটিল বাসা বাঁধার দল "রান্নাঘরের সিঙ্ক"

@নীড়

dialog {
  border: none;

  &::backdrop {
    backdrop-filter: blur(25px);
  }

  & > form {
    display: grid;

    & > :is(header, footer) {
      align-items: flex-start;
    }
  }

  @nest html:has(&[open]) {
    overflow: hidden;
  }
}

@nest সবসময়

dialog {
  border: none;

  @nest &::backdrop {
    backdrop-filter: blur(25px);
  }

  @nest & > form {
    display: grid;

    @nest & > :is(header, footer) {
      align-items: flex-start;
    }
  }

  @nest html:has(&[open]) {
    overflow: hidden;
  }
}

বন্ধনী

dialog {
  border: none;

  {
    &::backdrop {
      backdrop-filter: blur(25px);
    }

    & > form {
      display: grid;

      {
        & > :is(header, footer) {
          align-items: flex-start;
        }
      }
    }
  }

  {
    html:has(&[open]) {
      overflow: hidden;
    }
  }
}

সমতুল্য CSS

dialog {
  border: none;
}

dialog::backdrop {
  backdrop-filter: blur(25px);
}

dialog > form {
  display: grid;
}

dialog > form > :is(header, footer) {
  align-items: flex-start;
}

html:has(dialog[open]) {
  overflow: hidden;
}

ভোট দেওয়ার সময়

আশা করি আপনার কাছে মনে হয়েছে যে আমরা যে সিনট্যাক্স বিকল্পগুলি মূল্যায়ন করছি তার তুলনা এবং নমুনা ছিল এটি। দয়া করে সেগুলি সাবধানে পর্যালোচনা করুন এবং নীচে আপনার কোনটি পছন্দ তা আমাদের জানান। CSS নেস্টিংকে এমন একটি সিনট্যাক্সে উন্নীত করতে আমাদের সাহায্য করার জন্য আমরা কৃতজ্ঞ যা আমরা সকলেই জানব এবং ভালোবাসব!

জরিপে অংশগ্রহণ করুন!