একেবারে অবস্থিত পিতামাতার ডিভের ভিতরে উল্লম্বভাবে ডিভকে কেন্দ্র করে কীভাবে


146

আমি গোলাপী রঙের মাঝখানে নীল রঙের ধারক পাওয়ার চেষ্টা করছি, তবে মনে vertical-align: middle;হয় সেই ক্ষেত্রে কাজটি করবে না।

<div style="display: block; position: absolute; left: 50px; top: 50px;">
    <div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
        <div style="background-color: lightblue;">test</div>
    </div>
</div>

ফলাফল:

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

প্রত্যাশা:

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

আমি কীভাবে এটি অর্জন করতে পারি দয়া করে পরামর্শ দিন।

Jsfiddle


1
আপনি position: absoluteকোথাও ব্যবহার করছেন এমন কোনও কারণ আছে ?
— ভাকো

vertical-align: middle;সাথে কাজে display: inline-blockবা টেবিল বিন্যাস
— ctf0

এই লিঙ্কটি দেখুন: vanseodesign.com/css/vertical-centering ;)
— জর্ডি

@ ভুকো হ্যাঁ - এটি পূর্বশর্ত হিসাবে এটি খুব জটিল বিন্যাসের সহজতর সংস্করণ, তবে উভয় শীর্ষ ডিভগুলিতে পরম অবস্থান মূল বিষয়।
— ভ্লাদিমির্স

@Vladimirs আমি শুধু মনে করতে পারেন margin-top: calc((56px - 16px) / 2), যেখানে 56px - parent height, 16px - element height/font-size- JSFiddle
— Vucko

উত্তর:


332

সবার আগে এটি নোট করুন vertical-align কেবল টেবিল ঘর এবং ইনলাইন-স্তরের উপাদানগুলির জন্য প্রযোজ্য।

উল্লম্ব সারিবদ্ধতা অর্জনের বেশ কয়েকটি উপায় রয়েছে যা আপনার প্রয়োজনগুলি পূরণ করতে পারে বা নাও পারে। তবে আমি আপনাকে আমার পছন্দসই দুটি পদ্ধতি দেখাব :

1. ব্যবহার transformএবংtop

.valign {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    /* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
    <div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
        <div class="valign" style="background-color: lightblue;">test</div>
    </div>
</div>

মূল বিষয়টি হ'ল যে একটি শতাংশের মান এটি topথাকা heightব্লকের সাথে সম্পর্কিত; একটি শতাংশ মান চালু আছেtransformএস এর বাক্সের আকারের সাথে (সীমানা বাক্স) তুলনামূলক।

আপনি অনুভব করেন, তাহলে ফন্ট রেন্ডারিং সমস্যা (ঝাপসা ফন্ট), ফিক্স যোগ হয় perspective(1px)করার transformঘোষণা তাই এটি হয়ে:

transform: perspective(1px) translateY(-50%);

এটি লক্ষণীয় যে সিএসএস transform IE9 + এ সমর্থিত ।

2. ব্যবহার inline-block (সিউডো-) উপাদান

এই পদ্ধতিতে, আমাদের দুটি সহোদর inline-blockউপাদান রয়েছে যা vertical-align: middleঘোষণার মাধ্যমে মাঝখানে উল্লম্বভাবে প্রান্তিক হয় ।

heightএর 100%মধ্যে একটির এর পিতা-মাতার একটি রয়েছে এবং অন্যটি হ'ল আমাদের কাঙ্ক্ষিত উপাদান যার আমরা একে মাঝখানে প্রান্তিককরণ করতে চেয়েছিলাম।

.parent {
    text-align: left;
    position: absolute;
    height: 56px;
    background-color: pink;
    white-space: nowrap;
    font-size: 0; /* remove the gap between inline level elements */
}

.dummy-child { height: 100%; }

.valign {
    font-size: 16px; /* re-set the font-size */
}

.dummy-child, .valign {
    display: inline-block;
    vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
    <div class="parent">
        <div class="dummy-child"></div>
        <div class="valign" style="background-color: lightblue;">test</div>
    </div>
</div>

অবশেষে, ইনলাইন-স্তরের উপাদানগুলির মধ্যে ব্যবধান দূর করতে আমাদের একটি উপলভ্য পদ্ধতি ব্যবহার করা উচিত ।


এই দরকারী টিপস জন্য ধন্যবাদ। এটি আমার প্রকল্পের জন্য কাজ করছিল। ভালো কাজ.
— সেদাত কুমকু

প্রথম পদ্ধতির জন্য valignউপাদানটি হওয়া উচিতdisplay: block
— ওলেগ

transform: translateY(-50%);এটি আগে কখনও দেখেনি, তবে এটি নির্দ্বিধায় কাজ করে। রিয়েল লাইফ সেভার
— বেনি বোত্তেমা

55

এটা ব্যবহার কর :

.Absolute-Center {
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
}

এই লিঙ্কটি দেখুন: https://www.smashingmagazine.com/2013/08/absolve-horizontal-versical-centering-css/


এটি কীভাবে মূল সমাধান নয়? এত সহজ এবং এটি কাজ করে!
— ম্যাসন

21
মনে রাখবেন যে কাজ করার জন্য heightসম্পত্তি অবশ্যই সংজ্ঞায়িত করা উচিত (px, em ইত্যাদি)।
— বৈদাস

যদি আমার পিতামাতার ভিতরে একাধিক ডিভ থাকে? সব কি একে অপরের উপরে স্থাপন করা হবে না?
— সাইকিড

"পরম কেন্দ্র" সহ একই স্তরে আরও একটি শিশু থাকলে এটি কাজ করে না
— পাসকুট

18

এর বিষয়বস্তুকে কেন্দ্র করে আপনার স্পষ্টত অবস্থানযুক্ত ডিভিউতে ফ্লেক্স ব্ল্যাক্স ব্যবহার করুন।

উদাহরণ দেখুন https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p= পূর্বরূপ

.some-absolute-div {    
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -moz-flex;
  display: -ms-flexbox;
  display: flex;

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

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

11

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

.parent{
  height: 100%;
  position: absolute;
  width: 100%;
  top: 0;
  left: 0;
}
.c{
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
}

3

আপনি display:table/ ব্যবহার করতে পারেনtable-cell;

.a{
   position: absolute; 
  left: 50px; 
  top: 50px;
  display:table;
}
.b{
  text-align: left; 
  display:table-cell;
  height: 56px;
  vertical-align: middle;
  background-color: pink;
}
.c {
  background-color: lightblue;
}
<div class="a">
  <div  class="b">
    <div class="c" >test</div>
  </div>
</div>


ধন্যবাদ, আপনার উদাহরণটি নিখুঁতভাবে কাজ করে, তবে .bমিস করা position: absolute;কোডটি পরিষ্কার রাখার জন্য আমি অন্তর্ভুক্ত করি নি এমন অন্যান্য জিনিস প্রদর্শিত হওয়া গুরুত্বপূর্ণ missing আমি জানি যে টেবিল-সেলটি একেবারে অবস্থিত থাকা কোনও অর্থই রাখে না তবে সম্ভবত আরও একটি পদ্ধতি রয়েছে যা position: absolute;উভয় .aএবং .bশ্রেণী উভয়ই ধরে রাখতে পারে ?
— ভ্লাদিমির

যদি কোনও নিখুঁত অবস্থান হয় এবং খ (সন্তানের) এটির আকার দেয় তবে খ নিজেই বাকি সামগ্রীর দিকে নিখুঁত অবস্থানে থাকে। যদি না অনুমান করা যায় যে আমি নিরবচ্ছিন্ন থাকতে পারি তবে আমি পরম অভ্যন্তরের পরম উদ্দেশ্য বুঝতে পারি না?
— জি-সিরিলাস

1

টপ অবজেক্টটি ব্যবহারের জন্য এখানে সহজ উপায়।

উদাহরণস্বরূপ: যদি নিখুঁত উপাদানটির আকার 60px হয়।

.absolute-element { 
    position:absolute; 
    height:60px; 
    top: calc(50% - 60px);
}

2
ব্যবহার calcকরা সহায়ক, যদিও top: calc(50% - 30px)এটি কেন্দ্রীভূত হওয়ার জন্য এটি হওয়া উচিত ।
— ব্রেনব্যাগ

1

একটি অতিরিক্ত সহজ সমাধান

এইচটিএমএল:

<div id="d1">
    <div id="d2">
        Text
    </div>
</div>

সিএসএস:

#d1{
    position:absolute;
    top:100px;left:100px;
}

#d2{
    border:1px solid black;
    height:50px; width:50px;
    display:table-cell;
    vertical-align:middle;
    text-align:center;  
}

0

অনুরূপ সমস্যার এই উত্তরটি পরীক্ষা করে দেখুন check

এটি এখন পর্যন্ত আমার সবচেয়ে সহজতম উপায়।

https://stackoverflow.com/a/26079837/4593442

বিঃদ্রঃ. আমি প্রদর্শন ব্যবহার করেছি : -উইবকিট-ফ্লেক্স; প্রদর্শন পরিবর্তে : ফ্লেক্স; সাফারি ভিতরে পরীক্ষা করার জন্য।

পাদটীকা। আমি কেবল একজন শিক্ষানবিস, স্পষ্টত অভিজ্ঞ যে কারও কাছ থেকে সহায়তা ভাগ করে নিচ্ছি।


0

আপনি display:table;পিতামহক ডিভ এবং display: table-cell; vertical-align: middle;শিশু বিভাগে ব্যবহার করে এটি করতে পারেন

<div style="display:table;">
      <div style="text-align: left;  height: 56px;  background-color: pink; display: table-cell; vertical-align: middle;">
          <div style="background-color: lightblue; ">test</div>
      </div>
  </div>


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