ফ্লেক্স-ভিত্তি এবং প্রস্থের মধ্যে পার্থক্য কী?


224

এ সম্পর্কে বিভিন্ন প্রশ্ন এবং নিবন্ধ রয়েছে, তবে যতদূর আমি বলতে পারি সিদ্ধান্তগত কিছুই নেই। আমি খুঁজে পেতে পারে সবচেয়ে ভাল সংক্ষিপ্তসার

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

... যা নিজেই ফ্লেক্স-বেস সেট সহ উপাদানগুলির আচরণ সম্পর্কে খুব বেশি কিছু বলে না । আমার ফ্লেক্সবক্স সম্পর্কে আমার বর্তমান জ্ঞানের সাথে আমি দেখতে পাচ্ছি না কেন এটি প্রস্থটিও বর্ণনা করতে পারে না ।

অনুশীলনে প্রস্থের চেয়ে ঠিক কীভাবে নমনীয়-ভিত্তি আলাদা তা জানতে চাই :

  • আমি যদি প্রস্থটিকে ফ্লেক্স-ভিত্তিতে (এবং তদ্বিপরীত) দিয়ে প্রতিস্থাপন করি , তবে দৃষ্টিভঙ্গিতে কী পরিবর্তন হবে?
  • যদি আমি উভয়কে আলাদা মানতে সেট করি তবে কী হবে? তাদের যদি একই মান হয় তবে কী হবে?
  • কিছু বিশেষ ক্ষেত্রে রয়েছে যেখানে প্রস্থ বা ফ্লেক্স-বেস ব্যবহারের ক্ষেত্রে অন্যটি ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ পার্থক্য রয়েছে?
  • কীভাবে প্রস্থ এবং আনমন-ভিত্তিতে যখন যেমন অন্যান্য flexbox শৈলী, সাথে ব্যবহার ভিন্ন আনমন-মোড়ানো , আনমন-হত্তয়া এবং আনমন-সঙ্কুচিত ?
  • অন্য কোন উল্লেখযোগ্য পার্থক্য?

সম্পাদনা / স্পষ্টকরণ : এই প্রশ্নটি অন্য কোন ফর্ম্যাটে জিজ্ঞাসা করা হয়েছে ঠিক কী ফ্লেক্স-ভিত্তিক সম্পত্তি সেটগুলিতে? তবে আমি অনুভব করেছি যে ফ্লেক্স-ভিত্তি এবং প্রস্থের (বা উচ্চতা ) পার্থক্যগুলির আরও সরাসরি তুলনা বা সংক্ষিপ্তসারটি দুর্দান্ত লাগবে।


সেরা নিবন্ধটি ফ্লেক্সের ভিত্তিতে ব্যাখ্যা করে,
ফ্লেক্সটি

উত্তর:


339

বিবেচনা flex-direction

আপনার প্রশ্নটি পড়ার সময় প্রথম যে বিষয়টি মনে আসে তা হ'ল এটি flex-basisসর্বদা প্রযোজ্য নয় width

কখন flex-directionহয় row, flex-basisপ্রস্থ নিয়ন্ত্রণ করে।

কিন্তু যখন flex-directionহয় column, flex-basisউচ্চতা নিয়ন্ত্রণ করে।


মূল পার্থক্য

এখানে flex-basisএবং width/ এর মধ্যে কয়েকটি গুরুত্বপূর্ণ পার্থক্য রয়েছে height:

  • flex-basisশুধুমাত্র ফ্লেক্স আইটেমগুলিতে প্রযোজ্য। ফ্লেক্স পাত্রে (এটি ফ্লেক্স আইটেমও নয়) উপেক্ষা করবে flex-basisতবে ব্যবহার করতে পারে widthএবং height

  • flex-basisশুধুমাত্র মূল অক্ষে কাজ করে। উদাহরণস্বরূপ, যদি আপনি আছেন flex-direction: column, widthসম্পত্তি অনুভূমিকভাবে আনমন আইটেম নির্ধারন জন্য প্রয়োজন হবে।

  • flex-basisএকেবারে অবস্থানযুক্ত ফ্লেক্স আইটেমগুলির উপর কোনও প্রভাব ফেলেনি। widthএবং heightসম্পত্তি প্রয়োজন হবে। একেবারে অবস্থানযুক্ত ফ্লেক্স আইটেমগুলি ফ্লেক্স বিন্যাসে অংশ নেয় না

  • ব্যবহারের flexসম্পত্তি, তিন বৈশিষ্ট্য - flex-grow, flex-shrinkএবং flex-basis- সুন্দরভাবে এক ঘোষণা একত্রিত করা যেতে পারে। ব্যবহার করে width, একই নিয়মে কোডের একাধিক লাইনের প্রয়োজন হবে।


ব্রাউজার আচরণ

কিভাবে তারা দেখা যায় নিরিখে সেখানে উচিত কোন পার্থক্য মধ্যে flex-basisএবং width, যদি না flex-basisহয় autoবা content

অনুমান থেকে:

7.2.3। flex-basisসম্পত্তি

autoএবং ব্যতীত সমস্ত মানগুলির জন্য content, অনুভূমিক লেখার মোডগুলির flex-basisমতোই সমাধান করা হয় width

কিন্তু এর প্রভাব autoবা contentন্যূনতম বা এ সব কিছুই হতে পারে। অনুমান থেকে আরও:

auto

কোনও ফ্লেক্স আইটেমের উপরে নির্দিষ্ট করা হলে, autoকীওয়ার্ডটি ব্যবহৃত আকারের প্রধান মানের সম্পত্তি পুনরুদ্ধার করে flex-basis। যদি সেই মানটি নিজেই হয় autoতবে ব্যবহৃত মান content

content

ফ্লেক্স আইটেমের সামগ্রীর উপর ভিত্তি করে স্বয়ংক্রিয় আকারের আকার নির্ধারণ করে।

দ্রষ্টব্য: এই মানটি নমনীয় বক্স লেআউটটির প্রাথমিক প্রকাশে উপস্থিত ছিল না এবং সুতরাং কিছু পুরানো বাস্তবায়ন এটি সমর্থন করবে না। এর autoপ্রধান আকারের ( widthবা height) একসাথে ব্যবহার করে সমতুল্য প্রভাব অর্জন করা যায় auto

সুতরাং, বৈশিষ্ট অনুযায়ী flex-basisএবং widthসমাধান অভিন্নরুপে, যদি না flex-basisহয় autoবা content। এই জাতীয় ক্ষেত্রে, flex-basisসামগ্রীর প্রস্থ ব্যবহার করতে পারে (যা সম্ভবত, widthসম্পত্তিটিও ব্যবহার করবে)।


flex-shrinkগুণক

একটি ফ্লেক্স ধারকটির প্রাথমিক সেটিংস মনে রাখা গুরুত্বপূর্ণ। এর মধ্যে কয়েকটি সেটিংস অন্তর্ভুক্ত:

  • flex-direction: row - ফ্লেক্স আইটেমগুলি অনুভূমিকভাবে প্রান্তিককরণ করবে
  • justify-content: flex-start - ফ্লেক্স আইটেমগুলি মূল অক্ষের লাইনের শুরুতে স্ট্যাক করবে
  • align-items: stretch - ফ্লেক্স আইটেমগুলি ধারকটির ক্রস-আকার কভার করতে প্রসারিত হবে
  • flex-wrap: nowrap - নমনীয় আইটেমগুলি একক লাইনে থাকতে বাধ্য হয়
  • flex-shrink: 1 - একটি ফ্লেক্স আইটেম সঙ্কুচিত করার অনুমতি দেওয়া হয়

শেষ সেটিংস নোট করুন।

যেহেতু ফ্লেক্স আইটেমগুলিকে ডিফল্টরূপে সঙ্কুচিত করার অনুমতি দেওয়া হয় (যা তাদের পাত্রে উপচে পড়া থেকে বাধা দেয়), নির্দিষ্ট flex-basis/ width/ heightওভাররাইড হতে পারে।

উদাহরণস্বরূপ, flex-basis: 100pxবা width: 100px, এর সাথে মিলিতভাবে flex-shrink: 1অগত্যা 100px হবে না।

নির্দিষ্ট প্রস্থ রেন্ডার করতে - এবং এটি স্থির রাখতে - আপনাকে সঙ্কুচিত করতে অক্ষম করতে হবে:

div {
   width: 100px;
   flex-shrink: 0;
}  

অথবা

div {
  flex-basis: 100px;
  flex-shrink: 0;
}

অথবা, স্পেক দ্বারা প্রস্তাবিত হিসাবে:

flex: 0 0 100px;    /* don't grow, don't shrink, stay fixed at 100px */

7.2। নমনীয়তার উপাদান

লেখক ব্যবহার নিয়ন্ত্রণ নমনীয়তা করার পরামর্শ দেওয়া হয় flexসরাসরি তার longhand করতে properties সহযোগে বদলে সাধারণভাবে সংক্ষেপে, যেমন সাধারণভাবে সংক্ষেপে সঠিকভাবে কোনো অনির্দিষ্ট উপাদান রিসেট মিটমাট সাধারণ ব্যবহার


ব্রাউজার বাগ

কিছু ব্রাউজারের নেস্টেড ফ্লেক্স পাত্রে ফ্লেক্স আইটেম আকার দিতে সমস্যা হয়।

flex-basisনেস্টেড ফ্লেক্স পাত্রে উপেক্ষা করা। widthকাজ করে।

ব্যবহার করার সময় flex-basis, ধারকটি তার বাচ্চাদের আকার পরিবর্তন করে এবং শিশুরা পাত্রে উপচে পড়ে। তবে widthসম্পত্তি সহ, ধারকটি তার বাচ্চাদের আকারকে সম্মান করে এবং সেই অনুযায়ী প্রসারিত হয়।

তথ্যসূত্র:

উদাহরণ:


আইটেমগুলি ব্যবহার করে flex-basisএবং white-space: nowrapওভারফ্লো inline-flexধারক। widthকাজ করে।

মনে হয় যে কোনও ফ্লেক্স পাত্রে কোনও ভাইবোনকে রেন্ডার করার সময় কোনও শিশু inline-flexসনাক্ত করতে পারে না (যদিও এটি কেবল অপরিজ্ঞাত প্রস্থের আইটেম হতে পারে)। আইটেমগুলি সমন্বিত করতে ধারকটি প্রসারিত হয় না।flex-basiswhite-space: nowrap

কিন্তু যখন widthসম্পত্তিটি পরিবর্তে ব্যবহৃত হয় flex-basis, ধারকটি তার বাচ্চাদের আকারকে সম্মান করে এবং সেই অনুযায়ী প্রসারিত হয়। আইই 11 এবং এজতে এটি কোনও সমস্যা নয়।

তথ্যসূত্র:

উদাহরণ:


flex-basis(এবং flex-grow) টেবিল উপাদান কাজ করে না

তথ্যসূত্র:


flex-basisযখন পিতামহু পাত্রগুলি সঙ্কুচিত-থেকে-ফিট উপাদান হিসাবে ক্রোম এবং ফায়ারফক্সে ব্যর্থ হয়। এজ এজেটে ঠিকঠাক কাজ করে।

উপরের লিঙ্কে উপস্থাপিত উদাহরণের মতো, জড়িত position: absoluteথাকা floatএবং এর ব্যবহারও inline-blockএকই ত্রুটিযুক্ত আউটপুট ( jsfiddle ডেমো ) রেন্ডার করবে ।


IE 10 এবং 11 কে প্রভাবিত করছে:


2
কীভাবে min-width:100px;? সঙ্কুচিত অক্ষম করার জন্য এটি কী বিকল্প হতে পারে?
মরি

1
@Mori, হ্যাঁ, flex-shrinkএ স্টপ min-width। সমতুল্য নমনীয় নিয়ম হবে flex: 1 0 100px
মাইকেল বেঞ্জামিন

flex: 1 0 100pxএকই ফলাফলের দিকে নিয়ে যায় তবে আপনি "সমতুল্য" বলতে কী বোঝায় তা নিশ্চিত নই।
মরি

মানে আমরা কেন এটির সমান বিবেচনা করব না flex: 0 0 100px, উদাহরণস্বরূপ?
মরি

2
@ মোরি, কারণ তখন এটি প্রস্থের সমান । দরকার 1: আনমন-হত্তয়া উপাদান ন্যূনতম প্রস্থ, দ্বারা সেট থেকে হত্তয়া করার অনুমতি উপাদান আনমন-ভিত্তিতে
মাইকেল বেঞ্জামিন

33

মাইকেল_বি এর দুর্দান্ত সংক্ষিপ্তসার ছাড়াও এটি পুনরাবৃত্তি করার মতো:

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

এখানে গুরুত্বপূর্ণ অংশটি প্রাথমিক

নিজেই, অন্য ফ্লেক্সগুলি বৃদ্ধি / সঙ্কুচিত করার বৈশিষ্ট্যগুলি না আসা পর্যন্ত এটি প্রস্থ / উচ্চতার সংকল্প করে ।

So. সঙ্গে একটি শিশু

.child {
 flex-basis:25%;
 flex-grow:1;
}

প্রাথমিকভাবে 25% প্রশস্ত হবে তবে অন্য উপাদানগুলিতে সজ্জা না হওয়া অবধি তত্ক্ষণাত্ যতটা সম্ভব প্রসারিত হবে none যদি কিছুই না থাকে তবে এটি 100% প্রশস্ত / লম্বা হবে।

একটি দ্রুত ডেমো:

নিয়ে পরীক্ষা-নিরীক্ষা flex-grow, flex-shrinkএবং flex-basis (অথবা সাধারণভাবে সংক্ষেপে flex :fg fs fb) ... কিছু মজার ফলাফল হতে পারে।


আমি যে সাধারণত পাওয়া আনমন প্রেক্ষাপটে তারা উভয় flex-basisএবং width / heightএকটি উপাদান প্রাথমিক / শুরু আকার সেট করুন। উদাহরণস্বরূপ flex-basis: 200pxমূলত একই হিসাবে কাজ করে flex-basis: auto; width: 200px;। দেখে মনে হচ্ছে কখন flex-basisসেট করা থাকে না autoতখন এটি কেবল width / heightমানটিকে ওভাররাইড করে। আমি দেখতে পাচ্ছি পার্থক্যটি যেভাবে সামগ্রীর ওভারফ্লো পরিচালনা করা হয়।
কারোলিস

5

যুক্ত করার জন্য সম্ভবত সবচেয়ে গুরুত্বপূর্ণ পয়েন্ট:

যদি ব্রাউজার সমর্থন না করে flex? এই জাতীয় ক্ষেত্রে, width/heightগ্রহণ করুন এবং তাদের মানগুলি প্রযোজ্য।

এটি একটি খুব ভাল ধারণা - প্রায় প্রয়োজনীয় - width/heightউপাদানগুলির জন্য সংজ্ঞা দেওয়া, এমনকি যদি আপনার জন্য তখন সম্পূর্ণ আলাদা মান থাকে flex-basis। অক্ষম করে display:flexএবং যা পেয়েছেন তা পরীক্ষা করে দেখুন ।


2
প্রধান ব্রাউজারগুলির মধ্যে কেবলমাত্র ফ্লেক্স বৈশিষ্ট্যগুলি সমর্থন করে না তারা হ'ল
মাইকেল বেঞ্জামিন

1
@ মিশেল_বি অবশ্যই, এবং সম্ভবত এটি আমিই কিন্তু আমার কাছে মোবাইল ব্রাউজারগুলিও সমর্থন করতে হবে, নিন্টেন্ডো 3 ডি এস ব্রাউজার পর্যন্ত এবং এটিও সমর্থন করে না, যা স্থিরভাবে সমর্থন করে না flex
নিট দ্য ডার্ক আবসোল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.