ফ্লেক্সবক্স: অনুভূমিকভাবে এবং উল্লম্বভাবে কেন্দ্র


670

অনুভূমিকভাবে ডিভকে কীভাবে কেন্দ্র করবেন এবং ফ্লেক্সবক্স ব্যবহার করে ধারকের মধ্যে উল্লম্বভাবে। নীচের উদাহরণে, আমি প্রতিটি সংখ্যা একে অপরের নীচে (সারিগুলিতে) চাই, যা অনুভূমিকভাবে কেন্দ্রিক।

.flex-container {
  padding: 0;
  margin: 0;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: center;
}
row {
  width: 100%;
}
.flex-item {
  background: tomato;
  padding: 5px;
  width: 200px;
  height: 150px;
  margin: 10px;
  line-height: 150px;
  color: white;
  font-weight: bold;
  font-size: 3em;
  text-align: center;
}
<div class="flex-container">
  <div class="row">
    <span class="flex-item">1</span>
  </div>
  <div class="row">
    <span class="flex-item">2</span>
  </div>
  <div class="row">
    <span class="flex-item">3</span>
  </div>
  <div class="row">
    <span class="flex-item">4</span>
  </div>
</div>

http://codepen.io/anon/pen/zLxBo



আপনার সিএসএসে আপনার row{সারিগুলির কোনও প্রভাব নেই effect আপনি যদি এটি পরিবর্তন করেন .row{তবে ফলাফলটি সম্পূর্ণ আলাদা হবে।
হামিদ মায়েলি

উত্তর:


751

আমি মনে করি আপনি নীচের মত কিছু চান।

html, body {
    height: 100%;
}
body {
    margin: 0;
}
.flex-container {
    height: 100%;
    padding: 0;
    margin: 0;
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    align-items: center;
    justify-content: center;
}
.row {
    width: auto;
    border: 1px solid blue;
}
.flex-item {
    background-color: tomato;
    padding: 5px;
    width: 20px;
    height: 20px;
    margin: 10px;
    line-height: 20px;
    color: white;
    font-weight: bold;
    font-size: 2em;
    text-align: center;
}
<div class="flex-container">
    <div class="row"> 
        <div class="flex-item">1</div>
        <div class="flex-item">2</div>
        <div class="flex-item">3</div>
        <div class="flex-item">4</div>
    </div>
</div>

ডেমোটি এখানে দেখুন: http://jsfiddle.net/audetwebdesign/tFscL/

আপনি যদি উচ্চতা এবং উপরের / নীচের প্যাডগুলি সঠিকভাবে কাজ করতে চান তবে আপনার .flex-itemউপাদানগুলি ব্লক স্তর ( divপরিবর্তে span) হওয়া উচিত ।

এছাড়াও, এর পরিবর্তে .rowপ্রস্থটি সেট করুন ।auto100%

আপনার .flex-containerসম্পত্তি ঠিক আছে।

আপনি যদি চান .rowদৃশ্য বন্দরে উল্লম্বভাবে কেন্দ্রীভূত করতে হবে, 100% উচ্চতা নির্ধারণ htmlএবং body, এবং এছাড়াও শূন্য আউটbody মার্জিন।

নোট করুন যে .flex-containerউল্লম্ব প্রান্তিককরণ প্রভাব দেখতে একটি উচ্চতা প্রয়োজন, অন্যথায়, ধারক সামগ্রীটি আবদ্ধ করার জন্য প্রয়োজনীয় ন্যূনতম উচ্চতা গণনা করে, যা এই উদাহরণে পোর্ট উচ্চতার চেয়ে কম।

পাদটীকা: , , বৈশিষ্ট্য এই নকশা সহজ বাস্তবায়ন পারতেন। আমি মনে করি যে আপনি উপাদানগুলির চারপাশে কিছু স্টাইলিং (পটভূমি চিত্র, সীমানা ইত্যাদি) যুক্ত করতে না চাইলে ধারক প্রয়োজন হয় না।
flex-flowflex-directionflex-wrap.row

একটি দরকারী সংস্থান হ'ল: http://demo.agektmr.com/flexbox/


5
ফ্লেক্স আইটেমগুলির মধ্যে থাকা লিখিত সামগ্রীর প্রয়োজন না থাকলে ব্লক স্তর হওয়া দরকার। এছাড়াও, আপনি সমস্ত প্রদর্শনের বৈশিষ্ট্যের সমস্ত উপসর্গ করেছেন, তবে অন্য কোনও ফ্লেক্সবক্স বৈশিষ্ট্য (যার অন্য খসড়ায় বিভিন্ন নাম রয়েছে) উপসর্গ করেন নি।
cimmanon

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

1
যদি এটি উপচে পড়ে তবে এটি শীর্ষে ফসল ছড়িয়ে দেয়। i.imgur.com/3dgFfQK.png এড়াতে কোনও উপায়?
ব্রায়ান গেটস

1
@ ব্রায়ানগেটস যদি উইন্ডোর উচ্চতা খুব কম হয় তবে আপনি কীভাবে চান যে 4 টি উপাদান 2x2, 1x4 প্রদর্শিত হবে?
মার্ক অডিট


252

ফ্লেক্সবক্সে কীভাবে উপাদানগুলি উল্লম্বভাবে এবং অনুভূমিকভাবে কেন্দ্র করবেন

নীচে দুটি সাধারণ কেন্দ্রিক সমাধান রয়েছে।

একটি উল্লম্ব-সারিবদ্ধ ফ্লেক্স আইটেমগুলির জন্য ( flex-direction: column) এবং অন্যটি অনুভূমিকভাবে প্রান্তিকৃত ফ্লেক্স আইটেমগুলির জন্য ( flex-direction: row)।

উভয় ক্ষেত্রে কেন্দ্রিক ডিভগুলির উচ্চতা পরিবর্তনশীল, অপরিজ্ঞাত, অজানা, যাই হোক না কেন হতে পারে। কেন্দ্রিক ডিভগুলির উচ্চতা কোনও বিষয় নয়।

উভয়ের জন্য এইচটিএমএল:

<div id="container"><!-- flex container -->

    <div class="box" id="bluebox"><!-- flex item -->
        <p>DIV #1</p>
    </div>

    <div class="box" id="redbox"><!-- flex item -->
        <p>DIV #2</p>
    </div>

</div>

সিএসএস (আলংকারিক শৈলীগুলি বাদ দিয়ে)

যখন ফ্লেক্স আইটেমগুলি উল্লম্বভাবে স্ট্যাক করা হয়:

#container {
    display: flex;           /* establish flex container */
    flex-direction: column;  /* make main axis vertical */
    justify-content: center; /* center items vertically, in this case */
    align-items: center;     /* center items horizontally, in this case */
    height: 300px;
}

.box {
    width: 300px;
    margin: 5px;
    text-align: center;     /* will center text in <p>, which is not a flex item */
}

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

ডেমো


যখন ফ্লেক্স আইটেমগুলি অনুভূমিকভাবে সজ্জিত করা হয়:

flex-directionউপরের কোড থেকে নিয়ম সামঞ্জস্য করুন ।

#container {
    display: flex;
    flex-direction: row;     /* make main axis horizontal (default setting) */
    justify-content: center; /* center items horizontally, in this case */
    align-items: center;     /* center items vertically, in this case */
    height: 300px;
}

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

ডেমো


ফ্লেক্স আইটেমগুলির বিষয়বস্তু কেন্দ্র করে

একটি ফ্লেক্স ফর্ম্যাটিং প্রসঙ্গের সুযোগটি পিতা-মাতার সম্পর্কের মধ্যে সীমাবদ্ধ। বাচ্চাদের বাইরে একটি ফ্লেক্স ধারকের বংশধররা ফ্লেক্স বিন্যাসে অংশ নেন না এবং ফ্লেক্স বৈশিষ্ট্যগুলি উপেক্ষা করবেন। মূলত, নমনীয় বৈশিষ্ট্যগুলি শিশুদের বাইরে উত্তরাধিকারসূত্রে হয় না।

অতএব, সন্তানের ফ্লেক্স বৈশিষ্ট্য প্রয়োগ করার জন্য আপনাকে সর্বদা আবেদন করতে হবে display: flexবা display: inline-flexকোনও পিতামাতার উপাদান প্রয়োগ করতে হবে ।

উল্লম্বভাবে এবং / অথবা অনুভূমিকভাবে পাঠ্য বা কোনও ফ্লেক্স আইটেমে থাকা অন্যান্য সামগ্রীকে কেন্দ্র করে, আইটেমটিকে একটি (নেস্টেড) নমনীয় ধারক করুন এবং কেন্দ্রীকরণের নিয়মগুলি পুনরাবৃত্তি করুন।

.box {
    display: flex;
    justify-content: center;
    align-items: center;        /* for single line flex container */
    align-content: center;      /* for multi-line flex container */
}

আরও বিশদ এখানে: কীভাবে একটি ফ্লেক্সবক্সের ভিতরে উল্লম্বভাবে পাঠ্য সারিবদ্ধ করবেন?

বিকল্পভাবে, আপনি margin: autoফ্লেক্স আইটেমের উপাদান উপাদান প্রয়োগ করতে পারেন ।

p { margin: auto; }

autoএখানে ফ্লেক্স মার্জিন সম্পর্কে জানুন : ফ্লেক্স আইটেমগুলি সারিবদ্ধ করার পদ্ধতি (বক্স # 56 দেখুন)।


ফ্লেক্স আইটেমগুলির একাধিক লাইন কেন্দ্র করে

যখন কোনও ফ্লেক্স ধারকটির একাধিক লাইন থাকে (মোড়ানোর কারণে) align-contentক্রস-অক্ষ সারিবদ্ধ করার জন্য সম্পত্তিটি প্রয়োজনীয় হবে।

অনুমান থেকে:

8.4। প্যাকিং ফ্লেক্স লাইন: align-content সম্পত্তি

align-contentসম্পত্তি আনমন ধারক মধ্যে একটি আনমন ধারক এর লাইন প্রান্তিক যখন ক্রস অক্ষ অতিরিক্ত স্থান, কিভাবে অনুরূপ আছে justify-contentপ্রধান অক্ষ মধ্যে প্রান্তিক পৃথক আইটেম। দ্রষ্টব্য, এই বৈশিষ্ট্যের কোনও একক-লাইন ফ্লেক্স ধারকটিতে কোনও প্রভাব নেই।

আরও বিশদ এখানে: কীভাবে প্রান্তিককরণ-স্ব, সারিবদ্ধ-আইটেমগুলি এবং সারিবদ্ধকরণের সাথে ফ্লেক্স-মোড়ক কাজ করে?


ব্রাউজার সমর্থন

ফ্লেক্সবক্স IE <10 বাদে সমস্ত বড় ব্রাউজার দ্বারা সমর্থিত । সাফারি 8 এবং আই 10 এর মতো সাম্প্রতিক কিছু ব্রাউজার সংস্করণগুলির জন্য বিক্রেতার উপসর্গের প্রয়োজন । উপসর্গ যুক্ত করার জন্য দ্রুত উপায়ের জন্য অটোপ্রিফিক্সার ব্যবহার করুনএই উত্তরে আরও বিশদ ।


পুরানো ব্রাউজারগুলির জন্য সমাধানকে কেন্দ্র করে

সিএসএস টেবিল এবং অবস্থান সম্পর্কিত বৈশিষ্ট্য ব্যবহার করে বিকল্প কেন্দ্রিক সমাধানের জন্য এই উত্তরটি দেখুন: https://stackoverflow.com/a/31977476/3597276


আমরা কি এটি অনুভূমিকভাবে ডান, বাম এবং উল্লম্বভাবে কেন্দ্রে করতে পারি?
ক্যাপিল

2
@kapil সেগুলিকে সমন্বয়, ন্যায্যতা-সামগ্রী থেকে সম্পত্তি স্থান মধ্যবর্তী বা স্থান-অ্যারাউন্ড ... jsfiddle.net/8o29y7pd/105
মাইকেল বেঞ্জামিন

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

অর্থাত্ 11 সঠিকভাবে অনুভূমিক এবং উল্লম্ব কেন্দ্রের কাজ করছে না
জব

1
নিখুঁত উত্তর, গুগলে সম্ভবত সেরা!
জেএএন

43

যোগ

.container {
    display: flex;
    justify-content: center;
    align-items: center;
}

আপনি যেটি কেন্দ্র করতে চান তার ধারক উপাদানটিতে। ডকুমেন্টেশন: ন্যায্য-সামগ্রী এবং সারিবদ্ধ আইটেম


3
সংক্ষিপ্ত উত্তরের জন্য ধন্যবাদ। উপরের সমস্ত অক্ষরটি ঠিকঠাক থাকলেও এই 3 টি লাইন আমি এখানে যাচ্ছিলাম ঠিক সেটাই খুঁজে পেয়েছি (ভাল, display: inline-flexআমার ক্ষেত্রে এটি ছিল তবে এটি একটি সহজ সম্পাদনা ছিল))
জেফ ওয়ার্ড

27

গুরুত্বপূর্ণ ব্রাউজারগুলি নির্দিষ্ট বৈশিষ্ট্যগুলি ব্যবহার করতে ভুলবেন না:

সারিবদ্ধ-আইটেম: কেন্দ্র; ->

-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;

ন্যায্যতা-সামগ্রী: কেন্দ্র; ->

-webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;

আপনি ভাল করে বুঝতে ফ্লেক্স এই দুই লিঙ্ক পড়তে পারে: http://css-tricks.com/almanac/properties/j/justify-content/ এবং http://ptb2.me/flexbox/

শুভকামনা


1
এটি একটি ভাল পয়েন্ট, আজকের জন্য (কেবলমাত্র নতুন ব্রাউজারগুলিকে সমর্থন করার জন্য) আপনার কেবল শেষ দুটি লাইন দরকার - ওয়েবেকিট .. সাফারি এবং অন্য সকলের জন্য শেষ একটি
পিট কোজাক

1
+1 কারণ পুরানো ২০০৯ এবং মার্চ ২০১২ ওয়ার্কিং ড্রাফ্টগুলিতে এখনও উল্লেখযোগ্য ব্যবহারকারীর অংশ রয়েছে ( ক্যানিউজ ডটকম অনুসারে প্রায় ৮% মিলিত )।
বেনবুন

ফ্লেস্ট সাফারিটিতে কাজ করে না, আপনি কীভাবে এই সমস্যাটি সমাধান করতে পারেন?
ব্যবহারকারী 3378649

আমি অনেক দিন আগে উইন্ডোজটিতে সাফারির শেষ সংস্করণটি পরীক্ষা করেছিলাম এবং এটি খুব ভাল মনে নেই তবে আমি যাচাই করে নেব এবং আপনাকে বলব। শুধু দয়া করে আমাকে বলুন সাফারিটির কোন সংস্করণটি আপনি বোঝাতে চেয়েছিলেন? এবং কোন ওএসের উপর?
কিউমাস্টার

@ ব্যবহারকারী 3378649 সর্বশেষ সাফারি সংস্করণটি ফ্লেক্স-বক্সকে সমর্থন করতে পারে, দয়া করে এই লিঙ্কটি দেখুন: caniuse.com/#search=flexbox
কিউমাস্টার

15

1 - প্যারেন্ট ডিভিতে সিএসএস সেট করুন display: flex;

2 - সিএসএস সেট করুন প্যারেন্ট ডিভিতে সেট করুন flex-direction: column;
নোট করুন যে এটি ডিভ লাইনের মধ্যে সমস্ত বিষয়বস্তু উপরে থেকে নীচে তৈরি করবে। এটি সর্বোত্তম কাজ করবে যদি পিতামাতার ডিভটিতে কেবলমাত্র শিশু থাকে এবং অন্য কিছু না থাকে।

3 - পিতামহী বিভাগে সিএসএস সেট করুন justify-content: center;

সিএসএস দেখতে কেমন হবে তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

.parentDivClass {
  display: flex;
  flex-direction: column;
  justify-content: center;
}



8

diplay: flex;এটি ধারক margin:auto;জন্য এবং এটি আইটেম নিখুঁত কাজ করে।

দ্রষ্টব্য: আপনাকে সেটআপ করতে হবে widthএবং heightএর প্রভাবটি দেখতে হবে।

#container{
  width: 100%; /*width needs to be setup*/
  height: 150px; /*height needs to be setup*/
  display: flex;
}

.item{
  margin: auto; /*These will make the item in center*/
  background-color: #CCC;
}
<div id="container">
   <div class="item">CENTER</div>
</div>


3

আপনার যদি কোনও লিঙ্কে একটি পাঠ্য কেন্দ্রের প্রয়োজন হয় তবে এটি কৌশলটি করবে:

div {
  display: flex;

  width: 200px;
  height: 80px;
  background-color: yellow;
}

a {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center; /* only important for multiple lines */

  padding: 0 20px;
  background-color: silver;
  border: 2px solid blue;
}
<div>
  <a href="#">text</a>
  <a href="#">text with two lines</a>
</div>


1
খুব সুন্দর! কখনও কখনও আমি অনুভব করি যে আমি ফ্লেক্সবক্সের জন্য খুব ডাম্প।) ধরুন আমার আরও অনুশীলনের প্রয়োজন, এর কিছু যুক্তি এখনও অস্পষ্ট। ধন্যবাদ, লিও!
জোল্টন

3

margin: autoফ্লেক্সবক্সের সাথে নিখুঁত কাজ করে। এটি উল্লম্ব এবং অনুভূমিকভাবে কেন্দ্রীভূত হয়।

html, body {
  height: 100%;
  max-height: 100%;
}

.flex-container {
  display: flex;
    
  height: 100%;
  background-color: green;
}

.container {
  display: flex;
  margin: auto;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS</title>
</head>
<body>
  <div class="flex-container">
    <div class="container">
      <div class="row">
        <span class="flex-item">1</span>
      </div>
      <div class="row">
        <span class="flex-item">2</span>
      </div>
      <div class="row">
        <span class="flex-item">3</span>
      </div>
     <div class="row">
        <span class="flex-item">4</span>
    </div>
  </div>  
</div>
</body>
</html>


1

ফলাফল: কোড

কোড

এইচটিএমএল:

<div class="flex-container">
  <div class="rows">

    <div class="row">
      <span class="flex-item">1</span>
    </div>
    <div class="row">
      <span class="flex-item">2</span>
    </div>
    <div class="row">
      <span class="flex-item">3</span>
    </div>
    <div class="row">
      <span class="flex-item">4</span>
    </div>

  </div>  
</div>

সিএসএস:

html, body {
  height: 100%;  
}

.flex-container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
}

.rows {
  display: flex;
  flex-direction: column;
}

যেখানে flex-containerডিভটি উল্লম্ব এবং অনুভূমিকভাবে আপনার rowsডিভকে কেন্দ্র করতে ব্যবহৃত হয় এবং rowsডিভটি আপনার "আইটেমগুলি" গ্রুপ করতে এবং একটি কলাম ভিত্তিক একটিতে ক্রম করার জন্য ব্যবহৃত হয়।


0
    .flex-container {
  padding: 0;
  margin: 0;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: center;
}
row {
  width: 100%;
}
.flex-item {
  background: tomato;
  padding: 5px;
  width: 200px;
  height: 150px;
  margin: 10px;
  line-height: 150px;
  color: white;
  font-weight: bold;
  font-size: 3em;
  text-align: center;
}

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
পিয়োটার লাবনস্কি

-7

সিএসএস + ব্যবহার করে

<div class="EXTENDER">
  <div class="PADDER-CENTER">
    <div contentEditable="true">Edit this text...</div>
  </div>
</div>

এখানে একবার দেখুন


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