ধরে নিই যে আপনি 90 ডিগ্রিটি ঘোরতে চান, এটি এমনকি টেক্সট নন উপাদানগুলির জন্যও সম্ভব - তবে সিএসএসের অনেক আকর্ষণীয় জিনিসের মতো এটির জন্য একটু চালাকি দরকার। আমার সমাধানটি প্রযুক্তিগতভাবে সিএসএস 2 টি অনুসারে অপরিবর্তিত আচরণকেও আহ্বান করে - তাই আমি যখন পরীক্ষিত হয়েছি এবং নিশ্চিত হয়েছি যে এটি ক্রোম, ফায়ারফক্স, সাফারি এবং এজতে কাজ করে, আমি আপনাকে প্রতিশ্রুতি দিতে পারি না যে এটি ভবিষ্যতে ভাঙ্গবে না ব্রাউজার রিলিজ।
সংক্ষিপ্ত উত্তর
এইচটিএমএল দেওয়া হয়েছে, যেখানে আপনি ঘোরাতে চান .element-to-rotate
...
<div id="container">
<something class="element-to-rotate">bla bla bla</something>
</div>
... আপনি ঘুরতে চান এমন উপাদানটির চারপাশে দুটি মোড়কের উপাদান প্রবর্তন করুন :
<div id="container">
<div class="rotation-wrapper-outer">
<div class="rotation-wrapper-inner">
<something class="element-to-rotate">bla bla bla</something>
</div>
</div>
</div>
... এবং তারপরে বিরোধী-ঘড়ির কাঁটার দিকে ঘোরানোর জন্য নিম্নলিখিত সিএসএস ব্যবহার করুন (বা transform
এটিকে ঘড়ির কাঁটার দিকে ঘোরানোর উপায়টির জন্য মন্তব্য দেখুন ):
.rotation-wrapper-outer {
display: table;
}
.rotation-wrapper-inner {
padding: 50% 0;
height: 0;
}
.element-to-rotate {
display: block;
transform-origin: top left;
/* Note: for a CLOCKWISE rotation, use the commented-out
transform instead of this one. */
transform: rotate(-90deg) translate(-100%);
/* transform: rotate(90deg) translate(0, -100%); */
margin-top: -50%;
/* Not vital, but possibly a good idea if the element you're rotating contains
text and you want a single long vertical line of text and the pre-rotation
width of your element is small enough that the text wraps: */
white-space: nowrap;
}
স্নিপেট ডেমো স্ট্যাক করুন
p {
/* Tweak the visuals of the paragraphs for easier visualiation: */
background: pink;
margin: 1px 0;
border: 1px solid black;
}
.rotation-wrapper-outer {
display: table;
}
.rotation-wrapper-inner {
padding: 50% 0;
height: 0;
}
.element-to-rotate {
display: block;
transform-origin: top left;
/* Note: for a CLOCKWISE rotation, use the commented-out
transform instead of this one. */
transform: rotate(-90deg) translate(-100%);
/* transform: rotate(90deg) translate(0, -100%); */
margin-top: -50%;
/* Not vital, but possibly a good idea if the element you're rotating contains
text and you want a single long vertical line of text and the pre-rotation
width of your element is small enough that the text wraps: */
white-space: nowrap;
}
<div id="container">
<p>Some text</p>
<p>More text</p>
<div class="rotation-wrapper-outer">
<div class="rotation-wrapper-inner">
<p class="element-to-rotate">Some rotated text</p>
</div>
</div>
<p>Even more text</p>
<img src="https://i.stack.imgur.com/ih8Fj.png">
<div class="rotation-wrapper-outer">
<div class="rotation-wrapper-inner">
<img class="element-to-rotate" src="https://i.stack.imgur.com/ih8Fj.png">
</div>
</div>
<img src="https://i.stack.imgur.com/ih8Fj.png">
</div>
কিভাবে কাজ করে?
আমি উপরে যে জ্বলন্ত পদগুলি ব্যবহার করেছি তার মুখে বিভ্রান্তি যুক্তিযুক্ত; অনেক কিছু চলছে, এবং সামগ্রিক কৌশলটি সোজা নয় এবং এটি বুঝতে সিএসএস ট্রিভিয়া সম্পর্কে কিছু জ্ঞানের প্রয়োজন। এর ধাপে ধাপে এগিয়ে চলুন।
আমরা যে সমস্যার মুখোমুখি হচ্ছি তার মূল বিষয়টি হ'ল transform
লেআউটটি সংঘটিত হওয়ার পরে ঘটে যাওয়া সমস্ত উপাদান CSS এর সম্পত্তি ব্যবহার করে কোনও উপাদানকে রূপান্তরিত করা হয় । অন্য কথায়, transform
কোনও উপাদান ব্যবহার করা তার পিতামাতার আকার বা অবস্থান বা অন্য কোনও উপাদানের কোনও ক্ষতি করে না। কীভাবে transform
কাজ হয় এই সত্যটি পরিবর্তন করার কোনও উপায় নেই । সুতরাং, কোনও উপাদানকে ঘোরানোর এবং তার পিতামাতার উচ্চতার ঘূর্ণনের প্রতি শ্রদ্ধার প্রভাব তৈরি করতে আমাদের নিম্নলিখিত জিনিসগুলি করতে হবে:
- একরকম কিছু গঠন করা অন্যান্য উপাদান যার উচ্চতা প্রস্থ সমান
.element-to-rotate
- আমাদের রূপান্তরটি লিখুন
.element-to-rotate
যেমন ধাপ 1 থেকে উপাদানটিতে একেবারে ওভারলে করতে।
পদক্ষেপ 1 থেকে উপাদানটি হবে .rotation-wrapper-outer
। তবে কীভাবে আমরা এর উচ্চতা.element-to-rotate
এর প্রস্থের সমান হতে পারি?
আমাদের কৌশল কী উপাদান এখানে padding: 50% 0
উপর .rotation-wrapper-inner
। এই এর কাজে লাগান জন্য বৈশিষ্ট একজন অদ্ভুতস্বভাব বিস্তারিতpadding
: যে শতাংশ paddings, এমনকি জন্য padding-top
এবং padding-bottom
সবসময় এর শতকরা হিসাবে সংজ্ঞায়িত করা হয় উপাদান এর ধারক প্রস্থ । এটি আমাদের নিম্নলিখিত দুটি পদক্ষেপের কৌশল সম্পাদন করতে সক্ষম করে:
- আমরা সেট
display: table
উপর .rotation-wrapper-outer
। এর ফলে এটি সঙ্কুচিত-থেকে-ফিট প্রস্থের কারণ হয়ে দাঁড়ায় যার অর্থ এর প্রস্থটি এর বিষয়বস্তুর অভ্যন্তরীণ প্রস্থের উপর ভিত্তি করে সেট করা হবে - যা এর অভ্যন্তরীণ প্রস্থের উপর ভিত্তি করে .element-to-rotate
। (ব্রাউজার সমর্থন, আমরা সঙ্গে আরো পরিচ্ছন্নভাবে এই অর্জন পারে width: max-content
, কিন্তু ডিসেম্বর 2017 থেকে, max-content
হয় এখনো এজ সমর্থিত নয় ।)
- আমরা সেট
height
এর .rotation-wrapper-inner
0, তারপর তার প্যাডিং সেট 50% 0
(যে, 50% উপরে এবং 50% নীচে)। এর ফলে এটি তার পিতামাতার প্রস্থের 100% প্রস্থের সমান উল্লম্ব স্থান গ্রহণ করতে পারে - যা, পদক্ষেপ 1 এর কৌশল দ্বারা, প্রস্থের সমান .element-to-rotate
।
এরপরে, অবশিষ্টাংশগুলি হ'ল সন্তানের আসল আবর্তন এবং অবস্থান সম্পাদন করা। স্বাভাবিকভাবেই, transform: rotate(-90deg)
ঘূর্ণনটি করে; আমরা transform-origin: top left;
ঘোরানো উপাদানটির উপরের বাম কোণার চারদিকে ঘূর্ণন ঘটানোর কারণ হিসাবে ব্যবহার করি যা পরবর্তী অনুবাদটিকে তর্ক করতে সহজ করে তোলে, কারণ এটি ঘোরানো উপাদানটিকে সরাসরি উপরে ফেলে দেয় যেখানে অন্যথায় আঁকানো হত। এরপরে আমরা translate(-100%)
উপাদানটিকে তার পূর্ব-ঘূর্ণন প্রস্থের সমান দূরত্বে টেনে আনতে ব্যবহার করতে পারি ।
এটি এখনও ঠিক অবস্থানটি ঠিকমতো পায় না, কারণ আমাদের এখনও 50% শীর্ষ প্যাডিংয়ের জন্য অফসেট করা দরকার .rotation-wrapper-outer
। আমরা নিশ্চিত করছি যেন যে অর্জন .element-to-rotate
হয়েছে display: block
(যাতে মার্জিন এটা সঠিকভাবে কাজ করবে) এবং তারপর একটি -50% আবেদন margin-top
দয়া করে মনে রাখবেন শতাংশ মার্জিন হয় - এছাড়াও মূল উপাদানের প্রস্থ আপেক্ষিক সংজ্ঞায়িত।
এবং এটাই!
কেন এটি সম্পূর্ণরূপে অনুমানযোগ্য নয়?
অনুমানের শতাংশ প্যাডিংস এবং মার্জিনের সংজ্ঞা থেকে নিম্নলিখিত নোটটির কারণে (বোল্ডিং মাইন):
শতাংশ থেকে সম্মান সঙ্গে গণনা করা হয় প্রস্থ উত্পন্ন বক্স এর ধারণকারী ব্লক এমনকি, 'প্যাডিং টপ' এবং 'প্যাডিং-নীচে' । যদি ধারণকৃত ব্লকের প্রস্থটি এই উপাদানটির উপর নির্ভর করে তবে ফলাফল লেআউটটি সিএসএস ২.১ এ সংজ্ঞায়িত করা আছে।
যেহেতু পুরো কৌশলটি আভ্যন্তর মোড়কের উপাদানগুলির প্যাডিংটিকে তার ধারকটির প্রস্থের সাথে সম্পর্কিত করে ঘুরিয়ে দেয় যা ঘুরে ঘুরে তার সন্তানের প্রস্থের উপর নির্ভর করে, তাই আমরা এই শর্তটিকে আঘাত করছি এবং অপরিজ্ঞাত আচরণটি শুরু করছি। এটি বর্তমানে সমস্ত চারটি প্রধান ব্রাউজারে কাজ করে, যদিও - আমি চেষ্টা করেছি এমন কিছু আপাতদৃষ্টিতে বর্ণনামূলক-সামঞ্জস্যপূর্ণ টুইটগুলির বিপরীতে যেমন পিতামাতার পরিবর্তে .rotation-wrapper-inner
ভাইবোন হিসাবে .element-to-rotate
পরিবর্তিত হওয়া।