আমি কীভাবে CSS উত্তরাধিকার রোধ করব?


94

আমার আমার সাইডবারে একটি শ্রেণিবদ্ধ নেভিগেশন মেনু রয়েছে যা নেস্টেড তালিকাগুলি (<ul> এবং <li> ট্যাগ) ব্যবহার করে। আমি একটি প্রাক-তৈরি থিম ব্যবহার করছি যা ইতিমধ্যে তালিকার আইটেমগুলির জন্য স্টাইল রয়েছে তবে আমি শীর্ষ স্তরের আইটেমগুলির জন্য স্টাইলটি পরিবর্তন করতে চাই তবে তা উপ-আইটেমগুলিতে প্রযোজ্য নয়। শীর্ষ স্তরের তালিকার আইটেম ট্যাগটিতে শৈলগুলি বাচ্চাদের তালিকা আইটেমগুলিতে ক্যাসকেড না করেই কি স্টাইলগুলি প্রয়োগ করার সহজ উপায় আছে? আমি বুঝতে পারি যে আমি সাব-আইটেমগুলিতে স্পষ্টভাবে ওভাররাইডিং শৈলীগুলি যুক্ত করতে পারি তবে আমি "এই শ্রেণীর সাথে এই শৈলীগুলি প্রয়োগ করুন এবং ক্যাসকেড করবেন না" বলার কোনও সহজ উপায় যদি আছে তবে আমি সত্যিই সেই স্টাইলের কোডটির সদৃশ হওয়া এড়াতে চাই like এগুলি যে কোনও শিশুদের উপাদানগুলিতে নেমে যায় "। এইচটিএমএলটি আমি ব্যবহার করছি:

<ul id="sidebar">
  <li class="top-level-nav">
    <span>HEADING 1</span>
    <ul>
      <li>sub-heading A</li>
      <li>sub-heading B</li>
    </ul>
  </li>
  <li class="top-level-nav">
    <span>HEADING 2</span>
    <ul>
      <li>sub-heading A</li>
      <li>sub-heading B</li>
    </ul>
  </li>
</ul>

সুতরাং সিএসএসের স্টাইল রয়েছে #sidebar ulএবং #sidebar ul liইতিমধ্যে, তবে আমি #sidebar .top-level-navএটির অতিরিক্ত শৈলীগুলি যুক্ত করতে চাই যা এটির উপ-শিশুদের কাছে ক্যাসকেড না করে। এটি করার কোনও উপায় আছে বা আমার কী সমস্ত শৈলীর পুনরায় সাজানো দরকার তাই যে শৈলীগুলি ছিল #sidebar ulসেগুলি এখন নির্দিষ্ট ক্লাসের সাথে নির্দিষ্ট?


4
আমি অনুরূপ প্রশ্নের জন্য সাইটটি অনুসন্ধান করেছিলাম এবং কিছুই পাইনি (এটি বলে না যে একটি নেই, তবে আমি দেখেছি)। আপনি যদি এটি জানেন তবে আপনি দয়া করে আমাকে এটির দিকে পরিচালিত করতে পারেন? ধন্যবাদ!

4
stackoverflow.com/questions/747308/breaking-css-inheritance | ম্যাথু কী উত্তর দিয়েছিল তা অনেকটাই বলে।
জেসনভি

4
সুতরাং আমি এটি গ্রহণ করি উত্তরটি "না, এটি করার সহজ উপায় নেই - আপনাকে উপ-আইটেমে প্রতিটি স্টাইলের সেটিং ম্যানুয়ালি করতে হবে" - আমি কি এটি সঠিকভাবে ব্যাখ্যা করছি? আবার ধন্যবাদ.

উত্তর:


38

এখনও কোনও প্যারেন্ট সিলেক্টর নেই (বা শন ইনমান তাদেরকে যোগ্য যোগ্য নির্বাচক হিসাবে ডেকেছেন ), সুতরাং পিতামাতাদের তালিকা আইটেমগুলিতে শৈলীগুলি ওভাররাইড করতে আপনাকে শিশু তালিকা আইটেমগুলিতে স্টাইল প্রয়োগ করতে হবে।

ক্যাসকেডিং হ'ল ক্যাসকেডিং স্টাইল শীটের পুরো পয়েন্টটি সাজানো, তাই নাম।


13
এই তথ্যটি IE8 সাল থেকে পুরানো। সিলভিউ পোস্টাওয়ারু উত্তরটি দেখুন। আরও উপযুক্ত উত্তর চেক পরিবর্তন বিবেচনা করুন।
tmuecksch

হ্যাঁ, আমি সম্মতি দিচ্ছি ক্যাসকেডিং মর্মার্থ। তবে কোনও নির্দিষ্ট পিতামাতার কাছ থেকে অন্যরকম হতে পারে বলে প্রচার বন্ধ করার উপায় থাকতে হবে।
ওবায় আবদ-আলগাদের

72

আপনি হয় শিশু নির্বাচনকারী ব্যবহার করুন

তাই ব্যবহার

#parent > child

স্টাইলগুলি প্রয়োগ করতে কেবল প্রথম স্তরের শিশুদেরই তৈরি করবে। দুর্ভাগ্যক্রমে আই 6 শিশু নির্বাচনকারীকে সমর্থন করে না।

অন্যথায় আপনি ব্যবহার করতে পারেন

#parent child child

নীচে একাধিক স্তরের শিশুদের জন্য আরও একটি নির্দিষ্ট স্টাইল সেট করতে।


4
আপনি কি আমাকে জেএসফিডেলে ক্রিয়াতে এটি প্রদর্শন করতে পারেন? আমি একটি ইনলাইন-ব্লক প্রদর্শিত ডিভকে কেন্দ্র করার চেষ্টা করেছি, তবে এটি এখনও ডিভের ভিতরে থাকা পাঠ্যকে কেন্দ্র করে।
কলমারিয়াস

41

CSS3 উত্তরাধিকার মডিউলে একটি সম্পত্তি বলা allহয়েছে । এটি এর মতো কাজ করে:

#sidebar ul li {
  all: initial;
}

২০১-12-১২ হিসাবে, সমস্ত ব্রাউজারগুলি আইই / এজ এবং অপেরা মিনি ছাড়া এই সম্পত্তিটিকে সমর্থন করে।


4
@ এন্ড্রিয়াসড্রোব্যাটিনাস শেষ পর্যন্ত সমর্থিত হবে? আমি আপনার মন্তব্য সম্পূর্ণরূপে উপলব্ধি করা হয় না বলে মনে হচ্ছে। একটি পোস্টসিএসএস প্লাগইন রয়েছে যা এই বৈশিষ্ট্যটি সরবরাহ করে, আপনি যদি পোস্টসিএসএস ব্যবহার করেন: github.com/maximkoretskiy/postcss-initial
বোল্ডউইন

4
@ এন্ড্রিয়াসড্রোব্যাটিনাস, আপনার মন্তব্যটি অত্যন্ত অ-গঠনমূলক। উত্তরটি সম্প্রদায়ের পক্ষে পোস্ট করা হয়েছিল; এর সুবিধাটি দেখতে আপনার যথাসাধ্য চেষ্টা করুন।
কোডি

4
এখনও হিসাবে, কেবল আইই এবং অপেরা মিনিই এটি সমর্থন করে না, অন্যান্য সমস্ত বড় ব্রাউজারগুলি করেন
কিংবদন্তি

@ বোল্ডউইনের কোনও 'ডিফল্ট' মান নেই, যতক্ষণ না কেউ লিঙ্কযুক্ত
ডাব্লু 3

@ ওয়েবেনো সেখানে ছিলেন, যখন আমি উত্তরটি লিখেছিলাম: w3.org/TR/2013/WD-css3- ক্যাসকেড-20130103 / # সমস্ত- শর্টহ্যান্ড মনে হয় পুরানো defaultএবং নতুন মধ্যে কিছু সূক্ষ্ম পার্থক্য রয়েছে unset, তবে এখনই আমি ' আরও তদন্ত করার জন্য সময় পাইনি। উত্তরটি আপ টু ডেট আনতে নির্দ্বিধায় দ্বিধা করুন।
বোলডউইন

26

চাইল্ড স্টাইলগুলি ডিফল্টরূপে পরিবর্তন করতে আপনি * নির্বাচক ব্যবহার করতে পারেন

উদাহরণ

#parent {
    white-space: pre-wrap;
}

#parent * {
    white-space: initial;
}

4
এটি একটি দুর্দান্ত হ'ল সমাধান - বিশেষত যদি আপনি পিতামাতার ক্লাসটি জানেন না।
বার্নিনলিও

আমি মনে করি আমি এর উত্তর জানি কিন্তু এই ইনলাইনটি সেট করার কোনও উপায় আছে কি? <div id="parent" style="white-space:pre-wrap;*white-space:initial;"/>
1.21 গিগাওয়াট

11

Iframe দিয়ে মোড়ানো পিতামাতার সিএসএসকে অচল করে দেয়।


4
কারণ টেকনিক্যালি এটা মজার যে এই খারাপ maked উত্তর শুধুমাত্র স্টপ সিএসএস উত্তরাধিকার শারীরিক উপায়। এমন নয় যে আমি তর্ক করছি যে আপনার এটি এইভাবে ব্যবহার করা উচিত।
ডেভিডেলরিজো

4
আমি সিএসএস দিয়ে শারীরিক না হওয়ার পরামর্শ দিচ্ছি, ভার্চুয়াল ওয়ার্ল্ডে এটি ছেড়ে দাও!
michaelward82

আসলে যোগ iframeকরা আমার সন্তানের উপাদানটিকে অদৃশ্য করে তুলেছে। ভাবনা?
কেভিন ঘাবুসি

5

সংক্ষিপ্ত উত্তর: না, CSS উত্তরাধিকার রোধ করা সম্ভব নয়। আপনি কেবল পিতামাতার উপর সেট করা স্টাইলগুলি ওভাররাইড করতে পারেন। অনুমান দেখুন:

এইচটিএমএল ডকুমেন্টের প্রতিটি উপাদান তার পিতামাতার কাছ থেকে মূল উপাদান ( html) ছাড়াই সমস্ত উত্তরাধিকার সূত্রে প্রাপ্ত হয় , যার কোনও পিতামাতা নেই। - ডাব্লু 3 সি

উত্তরাধিকার সূত্রে প্রাপ্ত প্রতিটি সম্পত্তিকে ছাড়িয়ে নেওয়া। আপনি initialকীওয়ার্ডও ব্যবহার করতে পারেন , যেমন color: initial;। এটি একসাথে ব্যবহার করা যেতে পারে all, যেমন all: initial;, যা একবারে সমস্ত বৈশিষ্ট্য পুনরায় সেট করবে। উদাহরণ:

.container {
  color: blue;
  font-style: italic;
}
.initial {
  all: initial;
}
<div class="container">
  The quick brown <span class="initial">fox</span> jumps over the lazy dog
</div>

আমি কি ব্যবহার করতে পারি সে অনুযায়ী ব্রাউজারের সমর্থন সারণীগুলি ...

  • all (বর্তমানে আইই এবং এজ উভয় ক্ষেত্রেই কোনও সমর্থন নেই, অন্যরা ভাল)
  • initial (বর্তমানে আইই তে কোনও সমর্থন নেই, অন্যরা ভাল)

আপনি কিছু ক্ষেত্রে সরাসরি বাচ্চাদের নির্বাচক> ব্যবহার করে এটি দরকারী মনে করতে পারেন । উদাহরণ:

.list > li {
  border: 1px solid red;
  color: blue;
}
<ul class="list">
  <li>
    <span>HEADING 1</span>
    <ul>
      <li>sub-heading A</li>
      <li>sub-heading B</li>
    </ul>
  </li>
  <li>
    <span>HEADING 2</span>
    <ul>
      <li>sub-heading A</li>
      <li>sub-heading B</li>
    </ul>
  </li>
</ul>

উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তি <li>হিসাবে সীমানা শৈলী কেবল প্রত্যক্ষ বাচ্চাদের ক্ষেত্রেই প্রয়োগ করা হয়েছে bordercolorউত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তি হিসাবে, তবে সমস্ত বাচ্চার ক্ষেত্রে পাঠ্যের রঙ প্রয়োগ করা হয়েছে ।

>উত্তরাধিকার রোধ করার ক্ষেত্রে , নির্বাচক কেবল উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তিগুলির সাথেই কার্যকর হবে।


2

আপনি এই আচরণটি "নিষ্ক্রিয়" করার জন্য jQuery এর মতো কিছু ব্যবহার করতে পারেন, যদিও আমি খুব কমই মনে করি এটি CSS এবং জাভাস্ক্রিপ্টে আপনি যুক্তি প্রদর্শন করার কারণে এটি একটি ভাল সমাধান। তবুও, আপনার প্রয়োজনীয়তার উপর নির্ভর করে আপনি জিকিউরির সিএসএস ব্যবহারগুলি হ্যাকি সিএসএস চেষ্টা করার চেয়ে আপনার জীবনকে সহজ করে তুলতে পারেন, বিশেষত যদি আপনি এটি আই 6 এর জন্য কাজ করার চেষ্টা করছেন


2

উদাহরণস্বরূপ, যদি আপনার এক্সএইচটিএমএল ডকুমেন্টে দুটি ডিভ থাকে।

<div id='div1'>
    <p>hello, how are you?</p>
    <div id='div2'>
        <p>I am fine, thank you.</p>
    </div>
</div>

তারপরে সিএসএসে এটি ব্যবহার করে দেখুন।

#div1 > #div2 > p{
    color: red;
}

কেবল 'Div2' অনুচ্ছেদে প্রভাবিত করুন।

#div1 > p {
    color: red;
} 

কেবল 'Div1' অনুচ্ছেদে প্রভাবিত করুন।


2

এর জন্য আপনার ক্লাসের রেফারেন্সের দরকার নেই li। পরিবর্তে সিএসএসের মতো

li.top-level-nav { color:black; }

তুমি লিখতে পারো

ul#sidebar > li { color:black; }

এটি কেবলমাত্র থেকে স্টাইলিং প্রযোজ্য হবে liগুলি করে অবিলম্বে সাইডবার থেকে নেমে ul


0

"#sidebar ul li" বাছাইকারীকে কেবল তাদের ডিফল্টগুলিতে ফিরিয়ে দিন


উত্তর করার জন্য ধন্যবাদ. হ্যাঁ আমি বুঝতে পারি যে আমি সেগুলি সাব-আইটেমের স্টাইলে ফিরিয়ে আনতে পারি তবে আমি তা এড়াতে চাইছি কারণ আমি যে থিমটি তৈরি করি নি তা ব্যবহার করছি এবং আমি ভাবছি যে আমি বেশ কিছুটা সময় বাঁচাতে পারি কিনা? কিছু "ডু-টু-ক্যাসকেড: সত্য" নিয়ম বা এর মতো কিছু ব্যবহার না করে উল এবং লি এর সমস্ত বিভিন্ন শৈলীর সন্ধান করার পরিবর্তে সমস্ত জায়গাতে ছড়িয়ে ছিটিয়ে রয়েছে এবং তারপরে সাইটের অন্যান্য ক্ষেত্রগুলিতে অনিচ্ছাকৃত পরিণতি সম্পর্কে উদ্বেগ প্রকাশ করা উচিত ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.