একটি ডিভের মধ্যে ভাসমান উপাদানগুলি ডিভের বাইরে ভাসমান। কেন?


274

বলুন আপনার একটি আছে div, এটি একটি নির্দিষ্ট দিন widthএবং এতে উপাদান দিন, আমার ক্ষেত্রে imgএবং অন্যটি div

ধারনাটি হ'ল কনটেইনার সামগ্রীটি divকনটেইনারটিকে divপ্রসারিত করতে এবং সামগ্রীর পটভূমি হতে পারে। তবে আমি যখন এটি করি, divসমাহারটি অ-ভাসমান অবজেক্টগুলিকে ফিট করার জন্য সঙ্কুচিত হয় এবং ভাসমান অবজেক্টগুলি পুরো পথ, বা অর্ধ আউট, অর্ধেক হয়ে থাকবে এবং বড় আকারের কোনও ফলসই থাকবে না div

কেন? ই অনেক কিছু আমার অনুপস্থিত করছি, এবং আমি কিভাবে ভেসে বাড়িয়ে আইটেম পেতে পারেন heightএকটি ধারণকারী div?

উত্তর:


397

সবচেয়ে সহজ হ'ল overflow:hiddenপিতামাতার ডিভ লাগানো এবং কোনও উচ্চতা নির্দিষ্ট করে না:

#parent { overflow: hidden }

আরেকটি উপায় হ'ল পিতামাতার দ্বি ভাসাও:

#parent { float: left; width: 100% }

অন্য একটি উপায় একটি পরিষ্কার উপাদান ব্যবহার করে:

<div class="parent">
   <img class="floated_child" src="..." />
   <span class="clear"></span>
</div>

সিএসএস

span.clear { clear: left; display: block; }

17
এটি কাজ করে, তবে এখন আমি দ্বিগুণ বিভ্রান্ত হয়ে পড়েছি: এর জন্য এখানে কোনও ব্যাখ্যা আছে বা ঠিক কীভাবে এটি হয়?
ডেভিডআর

7
হ্যাঁ, একটি ব্যাখ্যা, কিন্তু আমি যেহেতু ভুলে গেছে এটা :( তার ঠিক কিভাবে এটা। overflow:hiddenবাহিনী ব্রাউজার সেরা এটা করতে পারেন পিতা বা মাতা সন্তান উপাদান ধারণ করে এজন্যই এটা সংশোধন করা
ডগ Neiner

5
আমি মনে করি এর ব্যাখ্যা overflow: hiddenএখানে রয়েছে: লিঙ্ক । এবং অনেক ধন্যবাদ, এটি আমার পক্ষে কাজ করেছে
বিকাশ অরোরা

6
@ ডেভিডআর এর সহজ ব্যাখ্যাটি হ'ল এইচটিএমএল / সিএসএস হ'ল একটি তারিখ, দুর্বল চিন্তাভাবনা, এবং প্রযুক্তির দুর্বল প্রয়োগ করা হয়নি। আসলে, এই যুক্তিটি আসলে এইচটিএমএল / সিএসএস কিরকগুলি ব্যাখ্যা করে যে আপনি এই পোস্টটি তৈরি করার পরে আপনার সন্দেহ নেই no
সামান্য

1
মনে রাখবেন যে overflow: hiddenপিতামাতার ধারক থেকে প্রবাহিত এমন কোনও উপাদানটির কোনও অংশ লুকিয়ে রাখবে। আমার জন্য, এটি পাঠ্যের কিছু বিট অপঠনযোগ্য হয়ে উঠেছে।
শীর্ষ বিড়াল

160

কারণ

সমস্যাটি হচ্ছে ভাসমান উপাদানগুলি প্রবাহের বাইরে :

কোনও উপাদান যদি ভাসমান, একেবারে অবস্থানযুক্ত বা মূল উপাদান হয় তবে তাকে প্রবাহের বাইরে বলা হয়

অতএব, তারা আশেপাশের উপাদানগুলিকে কোনও ইন-ফ্লো উপাদান হিসাবে প্রভাবিত করে না ।

এটি 9.5 ফ্লোটে ব্যাখ্যা করা হয়েছে :

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

এখানে চিত্র বর্ণনা লিখুন

এটি 10.6 গণনা উচ্চতা এবং মার্জিনেও নির্দিষ্ট করা আছে । জন্য "স্বাভাবিক" ব্লক ,

কেবলমাত্র সাধারণ প্রবাহের শিশুদেরই বিবেচনায় নেওয়া হয় (যেমন, ভাসমান বাক্স এবং একেবারে অবস্থানযুক্ত বাক্সগুলি উপেক্ষা করা হয় […])

এখানে চিত্র বর্ণনা লিখুন

হকি সমাধান: ছাড়পত্র

সমস্যা সমাধানের একটি উপায় হ'ল কিছু ফ্লো উপাদানকে সমস্ত ফ্লোটের নীচে রাখতে বাধ্য করা। তারপরে, পিতামাতার উচ্চতা সেই উপাদানটি মোড়ানোর জন্য বাড়বে (এবং এভাবে ভাসমান)।

সম্পত্তি ব্যবহার করে এটিclear অর্জন করা যেতে পারে :

এই বৈশিষ্ট্যটি সূচিত করে যে কোনও উপাদানের বাক্সের কোন দিকগুলি (এস) এর আগের ভাসমান বাক্সের সাথে সংলগ্ন নাও হতে পারে।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং একটি সমাধান clear: bothভাসমানগুলির শেষ সহোদর হিসাবে খালি উপাদান যুক্ত করছে

<div style="clear: both"></div>

তবে এটি শব্দার্থক নয়। পিতামাতার শেষে একটি ছদ্ম-উপাদানটি আরও ভাল উত্পন্ন করুন :

.clearfix::after {
  clear: both;
  display: block;
}

এই পদ্ধতির একাধিক রূপ রয়েছে, যেমন :afterপুরানো ব্রাউজারগুলিকে সমর্থন করতে অবহেলিত একক কোলন সিনট্যাক্স ব্যবহার করা বা অন্য ব্লক-স্তরের প্রদর্শনগুলি ব্যবহার করে display: table

সমাধান: বিএফসি শিকড়

শুরুতে সংজ্ঞায়িত সমস্যাযুক্ত আচরণের ব্যতিক্রম রয়েছে: যদি কোনও ব্লক উপাদান ব্লক বিন্যাস প্রবন্ধটি (একটি বিএফসি রুট) স্থাপন করে, তবে এটি তার ভাসমান সামগ্রীগুলিও আবৃত করবে।

ব্লক ফর্ম্যাটিং প্রসঙ্গে শিকড়গুলির জন্য 10.6.7 'অটো' উচ্চতা অনুসারে ,

যদি উপাদানের কোনও ভাসমান বংশধর থাকে যার নীচের প্রান্তিক প্রান্তটি নীচের অংশের নীচের অংশের নীচে থাকে, তবে সেই প্রান্তগুলি অন্তর্ভুক্ত করতে উচ্চতা বৃদ্ধি করা হয়।

এখানে চিত্র বর্ণনা লিখুন

অতিরিক্ত হিসাবে, 9.5 ফ্লোট হিসাবে ব্যাখ্যা হিসাবে , বিএফসি শিকড়গুলি নিম্নলিখিতগুলির কারণেও দরকারী:

কোনও সারণির সীমানা বাক্স, একটি ব্লক-স্তরীয় প্রতিস্থাপনকারী উপাদান বা সাধারণ প্রবাহে এমন একটি উপাদান যা একটি নতুন ব্লক ফর্ম্যাটিং প্রসঙ্গটি প্রতিষ্ঠা করে […] অবশ্যই উপাদানটির মতো একই ব্লক বিন্যাস প্রসঙ্গে কোনও ফ্লোটের মার্জিন বক্সকে ওভারল্যাপ করা উচিত নয় must ।

এখানে চিত্র বর্ণনা লিখুন

একটি ব্লক বিন্যাস প্রসঙ্গে প্রতিষ্ঠিত হয়

  • যেমন overflowব্যতীত বাক্সগুলি ব্লক করুনvisiblehidden

    .bfc-root {
      overflow: hidden;
      /* display: block; */
    }
    
  • ব্লক পাত্রে যেগুলি ব্লক বাক্স নয়: কখন displayসেট থাকে inline-block, table-cellবা table-caption

    .bfc-root {
      display: inline-block;
    }
    
  • ভাসমান উপাদান: কখন floatসেট করা হয় leftবা right

    .bfc-root {
      float: left;
    }
  • একেবারে অবস্থানযুক্ত উপাদান: কখন positionসেট করা হয় absoluteবা fixed

    .bfc-root {
      position: absolute;
    }

এগুলির অনাকাঙ্ক্ষিত সমান্তরাল প্রভাব থাকতে পারে যেমন ওভারফ্লো প্রসারণের সামগ্রীটি ক্লিপ করা, সঙ্কুচিত থেকে ফিট ফিট অ্যালগরিদম দিয়ে অটো প্রস্থ গণনা করা বা প্রবাহের বাইরে চলে যাওয়ার মতো। সুতরাং সমস্যাটি হ'ল বিসিএফসি প্রতিষ্ঠিত দৃশ্যমান ওভারফ্লো সহ একটি ইন-ফ্লো ব্লক-লেভেল উপাদান থাকা সম্ভব নয়।

L3 এই সমস্যাগুলিকে দেখায় :

তৈরী করা হয়েছে flowএবং ভেতরের প্রদর্শন ধরনের ভাল দ্রুতগামী প্রবাহ লেআউটে প্রদর্শন ধরনের এবং একটি উপাদান একটি তৈরীর জন্য একটি সুনির্দিষ্ট সুইচ তৈরি করতে BFC রুট। (এটির মতো হ্যাকগুলির প্রয়োজনীয়তা এবং […]flow-root ::after { clear: both; }overflow: hidden

দুঃখের বিষয়, এখনও ব্রাউজার সমর্থন নেই। শেষ পর্যন্ত আমরা ব্যবহার করতে সক্ষম হতে পারি

.bfc-root {
  display: flow-root;
}

1
সুতরাং ভাসমান বাক্সগুলি তাদের পিতামাতার ধারকগুলির দ্বারা স্বীকৃত নয়, সুতরাং উচ্চতা ধসের ফলে তাদের ভাইবোনদের দ্বারা স্বীকৃত, সুতরাং ক্লিয়ারফিক্স?
সিমবলিক লিঙ্ক

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

"যেসব ভাইবোন বিএফসি শিকড় নয় তারা সরাসরি ব্লক দ্বারা প্রভাবিত হয় না (তবে তাদের লাইন বাক্সগুলি হয়)" - আপনি দয়া করে এটি পরিষ্কার করতে পারেন? আপনি কি বোঝাতে চেয়েছেন যে এই jsFiddle: jsfiddle.net/aggL3Lk7/2 এ , ভাসমান ইনলাইন চিত্রটি স্প্যানকে প্রভাবিত করছে না (সুতরাং স্প্যানের সীমানা এটি আন্ডারল্যাপ করে) তবে চিত্রটি পাঠ্যকে (যা লাইন বাক্সটি) প্রভাবিত করছে সত্য যে পাঠ্যটি চিত্রটি আন্ডারল্যাপিং করে না?
সিমবলিক লিঙ্ক

1
@ সাইমিলিঙ্ক হ্যাঁ, ঠিক আছে। ঠিক আছে, আপনার ভাবাবেগ সীমানা পিতামাতার অন্তর্গত, তবে এটি মূলত ভাইবোনদের জন্য একই হবে: jsfiddle.net/aggL3Lk7/3
ওরিওল

1
আমি সম্মতি জ্ঞাপন করি. এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটা আমার কাছে আকর্ষণীয় যে ডাব্লু 3 আমাদের "হ্যাক" কোড করতে বাধ্য করার পথে কল করছে। কেউ খারাপ খারাপ।
DR01D

20

আপনার ভাসমান রাখুন div(s)একটি divএবং CSS এটা দিতে overflow:hidden;
এটা জরিমানা কাজ করবে।


আমি যে চেষ্টা কিন্তু এটা আমার সমস্যা সমাধানের নি: stackoverflow.com/questions/25329349/...
SearchForKnowledge

15

ডাব্লু 3 স্কুলগুলির সুপারিশ:

করা overflow: autoপিতা বা মাতা উপাদান এবং এটা করবে না "রঙ" গোটা সহ পটভূমি উপাদান মার্জিন। এছাড়াও ভাসমান উপাদানগুলি সীমানার অভ্যন্তরে থাকবে।

http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix


11

কিছুই নেই। আপনি যেখানে কোনও চিত্র চান (যেখানে উদাহরণস্বরূপ) পাঠ্যের বিভিন্ন অনুচ্ছেদের পাশে বসতে চান তার জন্য ফ্লোট ডিজাইন করা হয়েছিল, তাই পাঠ্যটি চিত্রের চারদিকে প্রবাহিত হয়। পাঠ্য ধারকটি "প্রসারিত" করলে তা ঘটবে না। আপনার প্রথম অনুচ্ছেদটি শেষ হবে এবং তারপরে আপনার পরবর্তী অনুচ্ছেদটি চিত্রের নীচে শুরু হবে (সম্ভবত নীচে কয়েকশত পিক্সেল)।

এবং এজন্য আপনি যে ফলাফলটি পেয়ে যাচ্ছেন।


3
পিতা-মাতার উচ্চতা প্রসারিতভাবে ভাসমান উপাদানটির সাথে এর কোনও যোগসূত্র কীভাবে রয়েছে?
সামান্য

11

কিছু ক্ষেত্রে, অর্থাত্ যখন (যদি) আপনি কেবল floatএকই "লাইনে" উপাদান প্রবাহিত করতে ব্যবহার করছেন তবে আপনি ব্যবহার করতে পারেন

display: inline-block;

পরিবর্তে

float: left;

অন্যথায়, clearশেষে একটি উপাদান ব্যবহার করে কাজ করে, এমনকি এটি সিএসএসের কাজ কী হওয়া উচিত তা করার জন্য শস্যের বিরুদ্ধে যেতে পারে an


11

এখানে আরও আধুনিক পদ্ধতি:

.parent {display: flow-root;} 

আর ক্লিয়ারফিক্স নেই।

PS ওভারফ্লো ব্যবহার করে: লুকানো; বাক্সের ছায়া গোপন করে ...


সাফারি ১১
তেও কাজ করে

7

আপনাকে ধন্যবাদ LSerni আপনি আমার জন্য এটি সমাধান করেছেন।

এটি অর্জন করতে:

+-----------------------------------------+
| +-------+                     +-------+ |
| | Text1 |                     | Text1 | |
| +-------+                     +-------+ |
|+----------------------------------------+

আপনাকে এটি করতে হবে:

<div style="overflow:auto">
    <div style="display:inline-block;float:left"> Text1 </div>
    <div style="display:inline-block;float:right"> Text2 </div>
</div>

4

লুকাস যেমন বলেছেন, আপনি যা বর্ণনা করছেন তা হ'ল ভাসমান সম্পত্তির উদ্দেশ্যে করা আচরণ। অনেক লোককে কী বিভ্রান্ত করে তা হ'ল সিএসএস লেআউট মডেলটিতে ত্রুটিগুলি পূরণ করতে ভাসাটি তার মূল উদ্দেশ্য ব্যবহারের চেয়ে ভালভাবে ঠেলে দেওয়া হয়েছে।

আপনি কীভাবে এই সম্পত্তিটি কাজ করে সে সম্পর্কে আরও ভাল ধারণা পেতে চাইলে ফ্লোটোরিয়ালটি দেখুন ।


0

আপনি সহজেই প্রথমে ডিভ ফ্লেক্স করতে পারেন এবং ডান বা বাম বিষয়বস্তু ন্যায়সঙ্গত প্রয়োগ করতে পারেন এবং আপনার সমস্যাটির সমাধান হয়েছে।

<div style="display: flex;padding-bottom: 8px;justify-content: flex-end;">
					<button style="font-weight: bold;outline: none;background-color: #2764ff;border-radius: 3px;margin-left: 12px;border: none;padding: 3px 6px;color: white;text-align: center;font-family: 'Open Sans', sans-serif;text-decoration: none;margin-right: 14px;">Sense</button>
				</div>

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