আমি একটি স্ক্রিপ্ট কোড করেছি (এখানে একটি ব্যবহারকারীর সহায়তায়) যা আমাকে একটি নির্বাচিত ডিভটি প্রসারিত করতে এবং অন্য ডিভগুলি বাকী জায়গার সাথে সমানভাবে প্রসারিত করে সেই অনুযায়ী আচরণ করতে দেয় (প্রথমটি যা প্রস্থটি স্থির করা আছে তা বাদে)।
এবং এখানে আমি কী অর্জন করতে চাই তার একটি চিত্র:
তার জন্য আমি ফ্লেক্স এবং ট্রানজিশনগুলি ব্যবহার করি।
এটি ভাল কাজ করে, তবে jQuery স্ক্রিপ্ট একটি "400%" প্রসারিত মান নির্দিষ্ট করে (যা পরীক্ষার জন্য দুর্দান্ত)।
এখন আমি নির্বাচিত ডিভাইসটি "400%" স্থির মানের পরিবর্তে সামগ্রীতে ফিট করার জন্য প্রসারিত / সঙ্কুচিত করতে চাই।
আমি কীভাবে এটি করতে পারি তা আমার কোনও ধারণা নেই।
এটা কি সম্ভব ?
আমি ডিভটি ক্লোন করার চেষ্টা করেছি, সামগ্রীতে এটি ফিট করেছি, এর মান পেতে এবং তারপরে এই মানটি ট্রানজিশনে ব্যবহার করতে পারি তবে এর অর্থ আমার শতাংশের প্রাথমিক প্রস্থ কিন্তু পিক্সেলের একটি লক্ষ্য মান রয়েছে। যে কাজ করে না।
এবং যদি আমি শতাংশে পিক্সেল মান রূপান্তর করি, তবে ফলাফল যাই হোক না কেন কারণ হিসাবে সামগ্রীতে ফিট করে না।
সব ক্ষেত্রে, যাই হোক না কেন আমি যা চাই তা অর্জন করার জন্য এটি কিছু জটিল উপায় বলে মনে হচ্ছে।
নির্বাচিত ডিভের সামগ্রীতে ফিট করার জন্য এমন কোনও ফ্লেক্স সম্পত্তিটি স্থানান্তরিত হতে পারে না?
এখানে কোডটি রয়েছে ( আরও ভালভাবে পড়ার জন্য সম্পাদিত / সরলীকৃত ):
var expanded = '';
$(document).on("click", ".div:not(:first-child)", function(e) {
var thisInd =$(this).index();
if(expanded != thisInd) {
//fit clicked fluid div to its content and reset the other fluid divs
$(this).css("width", "400%");
$('.div').not(':first').not(this).css("width", "100%");
expanded = thisInd;
} else {
//reset all fluid divs
$('.div').not(':first').css("width", "100%");
expanded = '';
}
});
.wrapper {
overflow: hidden;
width: 100%;
margin-top: 20px;
border: 1px solid black;
display: flex;
justify-content: flex-start;
}
.div {
overflow: hidden;
white-space: nowrap;
border-right: 1px solid black;
text-align:center;
}
.div:first-child {
min-width: 36px;
background: #999;
}
.div:not(:first-child) {
width: 100%;
transition: width 1s;
}
.div:not(:first-child) span {
background: #ddd;
}
.div:last-child {
border-right: 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Click on the div you want to fit/reset (except the first div)
<div class="wrapper">
<div class="div"><span>Fixed</span></div>
<div class="div"><span>Fluid (long long long long long text)</span></div>
<div class="div"><span>Fluid</span></div>
<div class="div"><span>Fluid</span></div>
</div>
এখানে jsfiddle:
https://jsfiddle.net/zajsLrxp/1/
সম্পাদনা: আপনার সকলের সহায়তায় আমার কার্যনির্বাহী সমাধানটি এখানে রয়েছে (উইন্ডোর পুনরায় আকারে আপডেট হওয়া মাপগুলি + ডিভের সংখ্যা এবং প্রথম কলামের প্রস্থটি গতিশীলভাবে গণনা করা হয়):
var tableWidth;
var expanded = '';
var fixedDivWidth = 0;
var flexPercentage = 100/($('.column').length-1);
$(document).ready(function() {
// Set width of first fixed column
$('.column:first-child .cell .fit').each(function() {
var tempFixedDivWidth = $(this)[0].getBoundingClientRect().width;
if( tempFixedDivWidth > fixedDivWidth ){fixedDivWidth = tempFixedDivWidth;}
});
$('.column:first-child' ).css('min-width',fixedDivWidth+'px')
//Reset all fluid columns
$('.column').not(':first').css('flex','1 1 '+flexPercentage+'%')
})
$(window).resize( function() {
//Reset all fluid columns
$('.column').not(':first').css('flex','1 1 '+flexPercentage+'%')
expanded = '';
})
$(document).on("click", ".column:not(:first-child)", function(e) {
var thisInd =$(this).index();
// if first click on a fluid column
if(expanded != thisInd)
{
var fitDivWidth=0;
// Set width of selected fluid column
$(this).find('.fit').each(function() {
var c = $(this)[0].getBoundingClientRect().width;
if( c > fitDivWidth ){fitDivWidth = c;}
});
tableWidth = $('.mainTable')[0].getBoundingClientRect().width;
$(this).css('flex','0 0 '+ 100/(tableWidth/fitDivWidth) +'%')
// Use remaining space equally for all other fluid column
$('.column').not(':first').not(this).css('flex','1 1 '+flexPercentage+'%')
expanded = thisInd;
}
// if second click on a fluid column
else
{
//Reset all fluid columns
$('.column').not(':first').css('flex','1 1 '+flexPercentage+'%')
expanded = '';
}
});
body{
font-family: 'Arial';
font-size: 12px;
padding: 20px;
}
.mainTable {
overflow: hidden;
width: 100%;
border: 1px solid black;
display: flex;
margin-top : 20px;
}
.cell{
height: 32px;
border-top: 1px solid black;
white-space: nowrap;
}
.cell:first-child{
background: #ccc;
border-top: none;
}
.column {
border-right: 1px solid black;
transition: flex 0.4s;
overflow: hidden;
line-height: 32px;
text-align: center;
}
.column:first-child {
background: #ccc;
}
.column:last-child {
border-right: 0px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="text">Click on the header div you want to fit/reset (except the first one which is fixed)</span>
<div class="mainTable">
<div class="column">
<div class="cell"><span class="fit">Propriété</span></div>
<div class="cell"><span class="fit">Artisan 45</span></div>
<div class="cell"><span class="fit">Waterloo 528</span></div>
</div>
<div class="column">
<div class="cell"><span class="fit">Adresse</span></div>
<div class="cell"><span class="fit">Rue du puit n° 45 (E2)</span></div>
<div class="cell"><span class="fit">Chaussée de Waterloo n° 528 (E1)</span></div>
</div>
<div class="column">
<div class="cell"><span class="fit">Commune</span></div>
<div class="cell"><span class="fit">Ixelles</span></div>
<div class="cell"><span class="fit">Watermael-Boitsfort</span></div>
</div>
<div class="column">
<div class="cell"><span class="fit">Ville</span></div>
<div class="cell"><span class="fit">Marche-en-Famenne</span></div>
<div class="cell"><span class="fit">Bruxelles</span></div>
</div>
<div class="column">
<div class="cell"><span class="fit">Surface</span></div>
<div class="cell"><span class="fit">120 m<sup>2</sup></span></div>
<div class="cell"><span class="fit">350 m<sup>2</sup></span></div>
</div>
</div>
এবং এখানে কর্মক্ষেত্রে একটি পূর্ণাঙ্গ উদাহরণ (স্টাইলস + প্যাডিং + আরও ডেটা):
https://jsfiddle.net/zrqLowx0/2/
সবাইকে ধন্যবাদ !