সিএসএস মিডিয়া ক্যোয়ারী ওভারল্যাপের জন্য নিয়ম কী?


90

ওভারল্যাপ এড়ানোর জন্য আমরা কীভাবে মিডিয়া প্রশ্নগুলিকে নির্ভুলভাবে আউট করব?

উদাহরণস্বরূপ, যদি আমরা কোডটি বিবেচনা করি:

@media (max-width: 20em) {
    /* for narrow viewport */
}

@media (min-width: 20em) and (max-width: 45em) {
    /* slightly wider viewport */
}

@media (min-width: 45em) {
    /* everything else */
}

সমস্ত সমর্থনকারী ব্রাউজারগুলিতে, ঠিক 20 মিনিটে এবং 45 মিনিটে কী হবে?

আমি লোকদের ব্যবহার করতে দেখেছি: 799px এবং তারপরে 800px এর মতো জিনিস, তবে 7৯৯.৫ পিক্সারের পর্দার প্রস্থের কী হবে? (স্পষ্টতই কোনও নিয়মিত প্রদর্শনীতে নয়, তবে একটি রেটিনা রয়েছে?)


আমি অনুমিতি বিবেচনা করে এখানে উত্তর সম্পর্কে সবচেয়ে কৌতূহলী।


4
আপনার বর্তমান প্রশ্নের শিরোনামটি আপনি যা জিজ্ঞাসা করছেন তার সাথে মিলছে বলে মনে হচ্ছে না। দেখে মনে হচ্ছে আপনার প্রশ্নের সামগ্রীর প্রথম লাইন শিরোনাম হিসাবে আরও ভাল ফিট করবে :)
বোল্টক্লক

@ বোল্টক্লক, বরাবরের মতো ধন্যবাদ - আমি এগুলি ঘুরিয়েছি; তবে আপনি কীভাবে "মিডিয়া ক্যোয়ারী ফাঁক করে" ব্যাখ্যা করেন?
বাউমর

4
@ বাউমার: ভাল প্রশ্ন - আপনি আসলে এর অর্থ কী তা আমি পুরোপুরি বুঝতে পারি না। বাকি প্রশ্নটি আমি বুঝতে পারি এবং আমি একটি উত্তর লিখছি।
বোল্টক্লক

4
আমি ধরে নেব যে আপনার যদি প্রস্থের যথাযথ 20 মি প্রস্থ থাকে তবে এটি প্রথমে max-width: 20emসংজ্ঞাগুলি প্রয়োগ করে তারপরে min-width: 20emসংজ্ঞাগুলিও প্রয়োগ করে ।
ব্যবহারকারী

4
@ বাউমর, আমি বিশ্বাস করি এটি সাধারণ সিএসএস ঘোষণার মতোই ক্যাসকেড করছে। যেহেতু 20 ম প্রস্থের উভয় প্রশ্নের সন্তুষ্টি, কোয়েরি সংজ্ঞা উভয়ই প্রয়োগ করা হবে।
ব্যবহারকারী

উত্তর:


111

সিএসএস মিডিয়া ক্যোয়ারী ওভারল্যাপের জন্য নিয়ম কী?

ক্যাসকেড।

@mediaবিধিগুলি ক্যাসকেডের জন্য স্বচ্ছ, সুতরাং যখন @mediaএকই সময়ে দুটি বা ততোধিক নিয়ম মেলে, ব্রাউজারের সাথে মেলে সমস্ত নিয়মে শৈলী প্রয়োগ করা উচিত এবং সেই অনুসারে ক্যাসকেডটি সমাধান করা উচিত।

সমস্ত সমর্থনকারী ব্রাউজারগুলিতে, ঠিক 20 মিনিটে এবং 45 মিনিটে কী হবে?

ঠিক 20 মিমি প্রশস্তভাবে, আপনার প্রথম এবং দ্বিতীয় মিডিয়া ক্যোয়ারী উভয়ই মিলবে। ব্রাউজারগুলি @mediaতদনুসারে উভয় নিয়ম এবং ক্যাসকেডগুলিতে স্টাইল প্রয়োগ করবে , সুতরাং যদি কোনও বিবাদী নিয়ম যদি ওভাররাইড করা প্রয়োজন হয় তবে সর্বশেষ ঘোষিত একটি জয় (নির্দিষ্ট নির্বাচকদের জন্য অ্যাকাউন্টিং !important, ইত্যাদি)। একইভাবে দ্বিতীয় এবং তৃতীয় মিডিয়া ক্যোয়ারির জন্য যখন ভিউপোর্টটি প্রায় 45 মি প্রশস্ত হয়।

কিছু প্রকৃত শৈলীর বিধি যুক্ত করে আপনার উদাহরণ কোড বিবেচনা করে:

@media (max-width: 20em) {
    .sidebar { display: none; }
}

@media (min-width: 20em) and (max-width: 45em) {
    .sidebar { display: block; float: left; }
}

যখন ব্রাউজারের ভিউপোর্টটি প্রায় 20 ম প্রশস্ত হয়, তখন উভয় মিডিয়া অনুসন্ধানই সত্য হয়ে উঠবে। ক্যাসকেড দ্বারা, display: blockওভাররাইড display: noneএবং float: leftশ্রেণীর সাথে যে কোনও উপাদানগুলিতে প্রয়োগ হবে .sidebar

আপনি এটিকে নিয়ম প্রয়োগ হিসাবে ভাবতে পারেন যেন মিডিয়া কোয়েরিগুলি শুরু করার জন্য নেই:

.sidebar { display: none; }
.sidebar { display: block; float: left; }

যখন ব্রাউজার দুটি বা তার বেশি মিডিয়া প্রশ্নের সাথে মেলে তখন ক্যাসকেডটি কীভাবে ঘটে তার আরেকটি উদাহরণ এই অন্য উত্তরে পাওয়া যাবে ।

সতর্ক, যদিও, যে আপনি যদি ঘোষণা আছে না উভয় ওভারল্যাপ @mediaবিধি, তারপর সমস্ত নিয়ম প্রযোজ্য হবে। এখানে যা ঘটে তা হ'ল উভয় নিয়মে ঘোষণার একটি ইউনিয়ন@media , কেবল পরেরটি পুরোপুরি পুরোপুরি ছাপিয়ে যায় না ... যা আমাদের আপনার আগের প্রশ্নটিতে নিয়ে আসে:

ওভারল্যাপ এড়ানোর জন্য আমরা কীভাবে মিডিয়া প্রশ্নগুলিকে নির্ভুলভাবে আউট করব?

আপনি যদি ওভারল্যাপ এড়াতে চান, তবে আপনাকে কেবল মিডিয়া প্রশ্নগুলি লিখতে হবে যা পারস্পরিক একচেটিয়া।

মনে রাখবেন যে min-এবং max-উপসর্গটির অর্থ "সর্বনিম্ন অন্তর্ভুক্ত" এবং "সর্বাধিক অন্তর্ভুক্ত"; এর অর্থ (min-width: 20em)এবং (max-width: 20em)উভয়ই এমন ভিউপোর্টের সাথে মিলবে যা প্রায় 20 ম প্রশস্ত।

দেখে মনে হচ্ছে আপনার ইতিমধ্যে একটি উদাহরণ রয়েছে, যা আমাদের আপনার শেষ প্রশ্নে নিয়ে আসে:

আমি লোকদের ব্যবহার করতে দেখেছি: 799px এবং তারপরে 800px এর মতো জিনিস, তবে 7৯৯.৫ পিক্সারের পর্দার প্রস্থের কী হবে? (স্পষ্টতই কোনও নিয়মিত প্রদর্শনীতে নয়, তবে একটি রেটিনা রয়েছে?)

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

আমার পরীক্ষায় থেকে সাফারি মনে হবে উপর আইওএস সব ভগ্ন পিক্সেল মান চক্রের তা নিশ্চিত করার জন্য এর হয় এক max-width: 799pxএবং min-width: 800pxম্যাচ হবে, এমনকি যদি ভিউপোর্ট সত্যিই 799.5px (যা দৃশ্যত সাবেক মেলে)।


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


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

বোল্টক্লক, সম্ভবত এটিই প্রথম আমি "আরডাব্লুডি" ব্যবহার করেছি - আপনার শীতল অভ্যর্থনাটি লক্ষ করা গেছে, হাহা! শুভ রাত্রি, তবে আপনি ফিরে আসার পরে আমি আসল প্রশ্নের সাথে করা আপডেটটি দেখুন। এখন আপনার আপডেটটি দেখার জন্য ...
বাউমর

বোল্টক্লক, আমি কি সেই আপডেটটি বের করে এটিকে নিজের প্রশ্নে পরিণত করব? আমি মনে করি আমি এই
সংশ্লেষিত

@ বাউমার: হ্যাঁ, এটি সেভাবে অনেক ভাল।
BoltClock

বোল্টক্লক: আমি এটিকে বের করে এটিকে একটি আশাকরি, আরও সংক্ষিপ্ত প্রশ্নে রেখেছি: মিডিয়া কোয়েরি ওভারল্যাপ এড়াতে কীভাবে? - অন্যান্য ব্যক্তির কাছে এটি আরও প্রযোজ্য করার জন্য যদি আপনার কোনও সম্পাদনা পরামর্শ থাকে তবে দয়া করে ভাগ করুন। পিএস মন্তব্যগুলিতে আমাকে আপনাকে @ দিচ্ছে না।
বাউমর

8

আমি এখানে প্রস্তাবিত হিসাবে চেষ্টা করেছি:

@media screen and (max-width: calc(48em - 1px)) {
    /*mobile styles*/
}
@media screen and (min-width: 48em) {
    /*desktop styles*/
}

তবে পাওয়া গেছে যে এটি একটি ভাল ধারণা নয় কারণ এটি এখন আমার উবুন্টু ডেস্কটপে বা আমার অ্যান্ড্রয়েড ফোনে Chrome এ কাজ করে না। (যেমনটি এখানে ব্যাখ্যা করা হয়েছে: গণনা () মিডিয়া প্রশ্নের মধ্যে কাজ করছে না ) তবে, আমি আরও একটি ভাল উপায় খুঁজে পেয়েছি ...

@media screen and (max-width: 47.9999em) {
    /*mobile styles*/
}
@media screen and (min-width: 48em) {
    /*desktop styles*/
}

ও বাম!


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। পেটেন্টিক উত্তর সরবরাহ করে বোল্টক্লক, তবে এই উত্তরটি সবচেয়ে কার্যকর!
জন হেন্কেল

2

calc()(min-width: 50em and max-width: calc(50em - 1px)এটির চারপাশে কাজ করার জন্য সঠিকভাবে স্ট্যাক করা হবে) তবে ব্রাউজারের দুর্বল সমর্থন এবং আমি এটির প্রস্তাব দিচ্ছি না।

@media (min-width: 20em) and (max-width: calc(45em - 1px)) {
    /* slightly wider viewport */
}

ইনফোস:

আরও কয়েকজন উল্লেখ করেছেন, emইউনিটটি ব্যবহার না করা আপনার প্রশ্নের সন্ধানে সহায়তা করবে।


7
calc()মিডিয়া ক্যোয়ারী স্পেকের অংশ নয় এবং কাজ করবে না।
জেসন টি ফেদারিংহাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.