প্যারেন্টস পূরণের জন্য সিএসএস প্রস্থ কীভাবে করবেন?


88

আমি নিশ্চিত যে এই সমস্যাটি আগে জিজ্ঞাসা করা হয়েছিল তবে আমি উত্তরটি খুঁজে পাচ্ছি না।

আমার নিম্নলিখিত মার্কআপ রয়েছে:

<div id="foo">
    <div id="bar">
        here be dragons
    </div>
</div>

আমার ইচ্ছেটি 600px( width: 600px;) এর প্রস্থের জন্য ফুও করা এবং নিম্নলিখিত আচরণগুলি বার করা উচিত:

padding-left: 2px;
padding-right: 2px;
margin-left: 2px;
margin-right: 2px;
outerWidth: 100%;

অন্য কথায় বারের প্রস্থ নির্ধারণের পরিবর্তে বারের 592pxবাইরের প্রস্থটি 100%যাতে সেট করা যায় তা সেট করতে চাই 592px। এখানে গুরুত্বটি হ'ল আমি foo এর প্রস্থকে পরিবর্তন করতে পারি 800pxএবং বারটি গণনা করা হয় যখন আমাকে পরিবর্তে রেন্ডার করা হয় তবে আমাকে নিজেই এই সমস্ত দৃষ্টান্তের জন্য গণিত করতে হবে।

খাঁটি সিএসএসে এটি কি সম্ভব?

এটির সাথে আরও কিছু মজা:

  • যদি #barএকটি টেবিল হয়?
  • #barটেক্সেরিয়া হলে কী হবে ?
  • যদি #barএকটি ইনপুট হয়?

  • #fooটেবিল সেল ( td) হলে কী হবে ? (এটি কি সমস্যা পরিবর্তন করে বা সমস্যাটি অভিন্ন?)


এখন পর্যন্ত table#bar, input#barআলোচনা করা হয়েছে। আমি টেক্সেরিয়া # বারের জন্য ভাল সমাধান দেখিনি। আমি সঙ্গে কোনো সীমান্ত / মার্জিন / প্যাডিং সঙ্গে একটি পাঠ্য এলাকা মনে divসঙ্গে মোড়ানো যথাসাধ্য কাজ divকাজ স্টাইল জন্য সীমানা হিসাবে textarea

উত্তর:


39

সম্পাদনা :

এই তিনটি পৃথক উপাদানগুলির আলাদা আলাদা রেন্ডারিং বিধি রয়েছে।

অনেক দূরে:

table#barআপনাকে প্রস্থটি 100% এ সেট করতে হবে অন্যথায় এটি কেবল যতটা প্রস্থ হবে তা নির্ধারণ করা হবে es তবে, টেবিলের সারিগুলি যদি মোট প্রস্থের প্রস্থের চেয়ে বেশি হয় তবে barএটি তার প্রস্থের প্রস্থে প্রসারিত হবে। যদি আমি মনে করি আপনি সেট করে এটি প্রতিহত করতে পারেন display: block !important;যদিও আইভিকে এটি ঠিক করতে হয়েছিল since (আমি নিশ্চিত যে আমি ভুল হলে কেউ আমাকে সংশোধন করবে)।

textarea#barআমি বিলিভ একটি ব্লক স্তর উপাদান তাই এটি বিধি হিসাবে একই নিয়ম অনুসরণ করবে। এখানে কেবলমাত্র সতর্কতা হ'ল textareaএকটি বৈশিষ্ট্য নিন colsএবং rowsযা চরিত্র কলামগুলিতে পরিমাপ করা হয়। যদি এটি উপাদানটিতে নির্দিষ্ট করা থাকে তবে এটি CSS দ্বারা নির্দিষ্ট করা প্রস্থকে ওভাররাইড করবে।

input#barএকটি ইনলাইন উপাদান, সুতরাং ডিফল্টরূপে আপনি এটির প্রস্থ নির্ধারণ করতে পারবেন না। তবে textareaএর colsবৈশিষ্ট্যের অনুরূপ , এটির sizeউপাদানটিতে এমন একটি বৈশিষ্ট্য রয়েছে যা প্রস্থ নির্ধারণ করতে পারে। এটি বলেছিল, আপনি সর্বদা এর display: block;জন্য আপনার সিএসএস ব্যবহার করে প্রস্থ নির্দিষ্ট করতে পারবেন । তারপরে এটি ডিভের মতো একই রেন্ডারিং বিধি অনুসরণ করবে।

td#footable-cellএতে কিছুটা উন্মত্ততা রয়েছে এমন হিসাবে রেন্ডার করা হবে। নীচে লাইনটি হ'ল আপনার উদ্দেশ্যে এটি div#fooএর সামগ্রীর প্রস্থকে সীমাবদ্ধ করার মতোই কাজ করবে to এখানে কেবলমাত্র ইস্যুটি কোথাও কোথাও সম্ভাব্য অগ্রহণযোগ্য পাঠ্য হতে চলেছে যা এটি আপনার প্রস্থের সেটিংটিকে উপেক্ষা করবে। এছাড়াও কলামের সমস্ত ঘর বিস্তৃত ঘরের প্রশস্ততা পেতে চলেছে।


ব্লক স্তরের উপাদানটির ডিফল্ট আচরণ - যেমন। প্রস্থটি যদি auto(ডিফল্ট) হয় তবে তা অন্তর্ভুক্ত উপাদানটির অভ্যন্তরের প্রস্থের 100% হবে। সংক্ষেপে তাই:

#foo {width: 800px;}
#bar {padding-left: 2px; padding-right: 2px; margin-left: 2px; margin-right: 2px;}

আপনি যা চান ঠিক তাই দেবে।


হেই ধন্যবাদ. যাইহোক যাইহোক, যদিও রক্তপাতের সিদ্ধান্ত নিয়ে টেবিলগুলি নিয়ে মজা করা। আমি ধরে নিই যে টেবিলের ডিভসের সমান আচরণ রয়েছে?
দিমিত্রি লিখটেন

@ ডিমিট্রি: না তাদের কোনও বিশেষ বিধি নেই যা এগুলিকে উপাদানগুলির inline-blockচেয়ে বেশি পছন্দ blockকরে। নোট যে যদিও আমি বললাম আরো ভালো না একই হিসাবে :-) কি করছি সম্ভবত সম্মুখীন যদি না অন্যথায় সংজ্ঞায়িত তারা সাধারণত সব কলাম যা সত্যিই বিরক্তিকর হেডার কিছু যদি / কোষ তাদের মধ্যে দীর্ঘ unwrappable টেক্সট আছে হতে পারে স্থান দেওয়ার জন্য প্রসারিত করবে।
প্রোডিজিটালসন

সহায়তার জন্য ধন্যবাদ :) সমস্যার আরও অনেক সম্পূর্ণ ওভারভিউ দেওয়ার জন্য আমাকে প্রশ্নটি কিছুটা আপডেট করতে দিন এবং আশা করি সমস্ত কাজের ক্ষেত্রগুলি একটি বিভাগে তালিকাভুক্ত করা যেতে পারে।
দিমিত্রি লিখটেন

আমি ডিভ # foo টেবিল # বার এবং প্রস্থ নির্ধারণের সাথে পরীক্ষা করে যাচ্ছি: টেবিলের # বারে 100% প্রকৃতপক্ষে টেবিলটি প্রসারিত করবে, তবে টেবিলের সীমানা / মার্জিনগুলি ডিভ # ফু এর মাধ্যমে রক্তপাত করবে। প্রদর্শনের জন্য টেবিলটি সেট করা: ব্লকটি ভাল নয় কারণ এটি সারণীর প্রস্থের হ্যান্ডলিংয়ের মতো সারণীর রেন্ডারিংয়ের অন্যান্য দিকগুলিকে স্ক্রু আপ করে। প্রস্থকে স্বয়ংক্রিয়ভাবে সেট করা বা সেট না করা হলে পাঠ্যক্রম # বার প্রসারিত হবে না।
দিমিত্রি লিখটেন

4
জন্য textarea#barআপনাকে যা সেট করতে সক্ষম হওয়া উচিত display: blockসামান্য বিরূপ প্রভাব সঙ্গে। টেবিলের যতদূর, আমি জানি ive অতীতে এর জন্য সমাধান / প্রশমন কিছু ধরণের ব্যবহার করেছিল তবে আমি এই মুহূর্তে কী ছিল তা মনে করতে পারি না। তবে আমি বলব যে আমি সাধারণত কোনও টেবিলে "মার্জিন" সেট করি না বরং এটি প্যাডিং / মার্জিন দিয়ে একটি ডিভের মধ্যে আবদ্ধ করি ... এটি এই ধরণের ব্যবধান প্রয়োগ করতে নিজেই #foo বা অন্য কোনও ডিভ ব্যবহৃত জসুত হতে পারে। এছাড়াও আপনি একটি সারিতে কেবল প্রথম / শেষ কক্ষ / প্রথম / শেষ সারিতে থাকা সেলগুলিতে সীমানা প্রয়োগ করতে সীমানা সংক্রান্ত সমস্যার প্রতিরোধ করতে পারেন
প্রোডিজিটালসন

28

প্রায় সেখানে, কেবল পরিবর্তন outerWidth: 100%;করুন width: auto;(আউটআরউইথ কোনও সিএসএসের সম্পত্তি নয়)

বিকল্পভাবে, বারে নিম্নলিখিত স্টাইল প্রয়োগ করুন:

width: auto;
display: block;

4
যদি সে কোনও মার্জিন প্যাডিং সেট করে থাকে তবে তা কাজ barকরবে না কারণ barপিতামাতার চেয়ে কার্যকরভাবে আরও প্রশস্ত করে 100% যুক্ত করা হবে foo
প্রোডিজিটালসন

হ্যাঁ, আমি উত্তর দিয়েছি যে এটি খুব দ্রুত; পি
রোয়ান

এক সেকেন্ড অপেক্ষা কর. সুতরাং আমি যদি প্রস্থের সম্পত্তিটিকে কিছু স্থির করে রাখি তবে তা দিয়ে রক্তপাত হবে? প্রস্থ: অটো সমাধান নয়, প্রস্থটি আদৌ সেট করে না?
দিমিত্রি লিখটেন

4
হ্যাঁ, ওটা ঠিক আছে. যে কোনও উপাদান যা display:block;(ব্লক স্তর উপাদান হিসাবে পরিচিত )ও এই আচরণটি গ্রহণ করবে। একটি ডিআইভি উপাদান থাকে width:auto;এবং এটি display:block;ডিফল্টরূপে সেট হয়।
রোয়ান

পুরাতন পোস্ট, তবে তিনি কেবল বক্স-সাইজিংটি ব্যবহার করতে পারেন নি: প্যাডিংটিকে উপাদানটির প্রস্থের মধ্যে থাকতে দেয় border
CHBresser

16

শৈলী ব্যবহার করুন

left: 0px;

অথবা এবং

right: 0px;

অথবা এবং

top: 0px;

অথবা এবং

bottom: 0px;

আমি মনে করি বেশিরভাগ ক্ষেত্রেই কাজটি হবে


4

সুতরাং গবেষণার পরে নিম্নলিখিতটি আবিষ্কার করা হয়েছে:

একটি div#barসেটিংস display:block; width: auto;জন্য সমতুল্য কারণouterWidth:100%;

একটির জন্য table#barআপনাকে নীচে বর্ণিত বিধিগুলি একটি ডিভের মধ্যে এটি মোড়ানো প্রয়োজন। সুতরাং আপনার কাঠামো হয়ে যায়:

<div id="foo">
 <div id="barWrap" style="border....">
  <table id="bar" style="width: 100%; border: 0; padding: 0; margin: 0;">

এইভাবে সারণীটি 100% প্যারেন্ট ডিভ নেয়, এবং সারণীতে #barWrapসীমানা / মার্জিন / প্যাডিং যুক্ত করতে ব্যবহৃত হয় #bar। নোট করুন যে আপনাকে পুরো জিনিসটির পটভূমি সেট করতে হবে #barWrapএবং #barএর পটভূমিটি স্বচ্ছ বা এর মতো হবে #barWrap

জন্য textarea#barএবং input#barআপনি একই জিনিস করতে হবে যেমন table#bar, নিচে দিকে যে সীমানা সরানোর দ্বারা আপনাকে ইনপুট / পাঠ্য এলাকা নেটিভ উইজেট রেন্ডারিং বন্ধ এবং হল #barWrapএর সীমানা অন্য সব কিছুর চেয়ে একটু আলাদা চেহারা হবে, তাই আপনি সম্ভবত করতে হবে আপনার সমস্ত ইনপুটগুলি এভাবে স্টাইল করুন।


1
box-sizing: border-box;
width: 100%;
padding: 5px;

বক্স-সাইজিং: বর্ডার বক্স; এটিকে এমন করে তোলে যাতে প্যাডিং, মার্জিন এবং সীমানা প্রস্থের গণনায় অন্তর্ভুক্ত থাকে।

এমডিএন

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