সিএসএস ফ্লেক্সবক্স লেআউটে স্বয়ংক্রিয় আকারের চিত্রটি এবং দিকের অনুপাতটি রাখছেন?


99

আমি সিএসএস ফ্লেক্স বক্স লেআউটটি ব্যবহার করেছি যা নীচে প্রদর্শিত হবে:

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

যদি স্ক্রিনটি ছোট হয় তবে এটি এতে পরিণত হয়:

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

সমস্যাটি হ'ল মূল চিত্রটি থেকে দিকটি রেশন রেখে চিত্রগুলি পুনরায় আকার দেওয়া হয় না।

পর্দা আরও ছোট হয়ে উঠলে চিত্রগুলি পুনরায় আকার দেওয়ার জন্য খাঁটি সিএসএস এবং ফ্লেক্স বক্স লেআউট ব্যবহার করা সম্ভব?

এখানে আমার এইচটিএমএল:

<div class="content">
  <div class="row"> 
    <div class="cell">
      <img src="http://i.imgur.com/OUla6mK.jpg"/>
    </div>
    <div class="cell">
      <img src="http://i.imgur.com/M16WzMd.jpg"/>
    </div>
  </div>
</div>

আমার সিএসএস:

.content {
    background-color: yellow;    
}

.row {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -webkit-box-orient: horizontal; 
    -moz-box-orient: horizontal;
    box-orient: horizontal;
    flex-direction: row;

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

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

    background-color: red;

}

.cell {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    box-flex: 1;
    -webkit-flex: 1 1 auto;
    flex: 1 1 auto; 

    padding: 10px;
    margin: 10px;

    background-color: green;
    border: 1px solid red;
    text-align: center;

}

উত্তর:


87

img {max-width:100%;}এটি করার একটি উপায়। এটি কেবল আপনার সিএসএস কোডে যুক্ত করুন।

http://jsfiddle.net/89dtxt6s/


4
স্ক্রিনটি ছোট হয়ে গেলে উচ্চতা মাত্রার জন্য এটি করা কি সম্ভব?
14:44 '

@ কনফিলে এটি আপনার কোড বিন্যাসের উপর অনেক বেশি নির্ভর করবে তবে আপনি সিএসএসে যোগ height:100%;করার চেষ্টা করতে পারেন img
ওমেগা

height: 100vhএটা করবে, না height: 100%। উচ্চতার জন্য স্টাইলিং সর্বদা কৌশলযুক্ত।
gdbj

4
কেন এটি সঠিক উত্তর হিসাবে চিহ্নিত হয়েছে? ওমেগা এটিকে ব্রাউজারের ডিফল্ট আচরণে পরিণত করেনি? jsfiddle.net/89dtxt6s/221
VeeK

74

আমি আমার বিকৃত চিত্রগুলির উত্তর খুঁজতে এখানে এসেছি। ওপেনটি উপরের দিকে কী সন্ধান করছে সে সম্পর্কে পুরোপুরি নিশ্চিত নয়, তবে আমি খুঁজে পেয়েছি যে যুক্ত করা align-items: centerআমার জন্য এটি সমাধান করবে। দস্তাবেজগুলি পড়া, এটি align-items: stretchডিফল্ট হওয়ায় আপনি যদি সরাসরি চিত্রগুলি ফ্লেক্সিং করে থাকেন তবে এটির ওভাররাইডটি বোঝা যায় । আরেকটি সমাধান হ'ল প্রথমে আপনার চিত্রগুলি একটি ডিভের সাথে মোড়ানো।

.myFlexedImage {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
}

12
"আমি এখানে আমার বিকৃত চিত্রগুলির উত্তর খুঁজতে এসেছি" আমি একই কারণে এখানে এসেছি এবং আপনার সমাধান আমাকে সহায়তা করেছিল (আসল সমাধানটি আমাকে তেমন কোনও
উপকারে

এটি আমাকেও সাহায্য করেছিল, কেউ ব্যাখ্যা করতে পারেন কেন এটি কাজ করে?
জেরি বি। নং 1 ইন্টার্ন

এটি আমার জন্য সঠিক উত্তর ছিল। সর্বাধিক প্রস্থ: 100%; উচ্চতা সংশোধন করেনি (উচ্চতাটি এখনও খানিকটা প্রসারিত ছিল)। আমার ক্ষেত্রে আমি সারিবদ্ধ-আইটেমগুলি ব্যবহার করেছি: ফ্লেক্স-স্টার্ট; কারণ আমি চিত্রটি উল্লম্বভাবে ধারকটিতে কেন্দ্রীভূত করতে চাইনি, তবে এটি এখনও কাজ করেছে যেহেতু এটি ডিফল্ট সারিবদ্ধ আইটেমগুলিকে ওভাররাইড করে: প্রসারিত; আপনি ওভাররাইড করতে যে আইটেমগুলি ব্যবহার করতে পারেন সেগুলি সম্পর্কিত সমস্ত সম্পত্তি-মানগুলির একটি তালিকা এখানে রয়েছে: w3schools.com/cssref/css3_pr_align-items.asp
কাইল ভ্যাসেলা

প্রচুর জিনিস চেষ্টা করেছে, কিন্তু আপনার সারিবদ্ধ-আইটেমগুলি: পিতামাতার কেন্দ্রস্থলে কেবল কৌশলটিই ঘটে।
মাইক্রো

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

45

আপনি খুব নতুন এবং সাধারণ CSS3 বৈশিষ্ট্যটি চেষ্টা করতে চাইতে পারেন:

img { 
  object-fit: contain;
}

এটি চিত্রের অনুপাতটিকে সংরক্ষণ করে (যখন আপনি ব্যাকগ্রাউন্ড-চিত্রের কৌশলটি ব্যবহার করেন) এবং আমার ক্ষেত্রে একই ইস্যুতে খুব সুন্দরভাবে কাজ করেছিল।

সতর্ক থাকুন, এটি আইই সমর্থন করে না ( এখানে সমর্থন বিশদ দেখুন )।


4
দয়া করে মনে রাখবেন যে প্যারেন্ট অবজেক্টটি একটি নমনীয় হতে হবে
লোকিনউ

আমি এটি চেষ্টা করেছিলাম এবং এটি একটি ফ্লেক্স ডিভির মধ্যে নিখুঁতভাবে কাজ করে।
র‌্যামি কালৌস্টিয়ান

6

আমি background-sizeচিত্রের আকার সামঞ্জস্য করতে বিকল্পগুলি সন্ধান করার পরামর্শ দিচ্ছি ।

পৃষ্ঠায় ইমেজ থাকার পরিবর্তে যদি এটি ব্যাকগ্রাউন্ড ইমেজ হিসাবে সেট করা থাকে তবে আপনি সেট করতে পারেন:

background-size: contain

বা

background-size: cover

চিত্রটি স্কেল করার সময় এই বিকল্পগুলি উচ্চতা এবং প্রস্থ উভয়ই বিবেচনা করে। এটি আই 9 এবং অন্যান্য সাম্প্রতিক সমস্ত ব্রাউজারগুলিতে কাজ করবে।


3

দ্বিতীয় চিত্রটিতে দেখে মনে হচ্ছে আপনি ছবিটি বাক্সটি পূরণ করতে চান তবে আপনি যে উদাহরণটি তৈরি করেছেন সে দিকটি অনুপাতকে রাখে (পোষা প্রাণী স্বাভাবিক, পাতলা বা চর্বিযুক্ত নয়) দেখায়।

উদাহরণস্বরূপ আপনি যদি এই চিত্রগুলি ফটোশপ করেন তবে দ্বিতীয়টি যেমন "এটি কেমন হওয়া উচিত" হয় (তবে আপনি আইএস বলেছেন, যখন প্রথম উদাহরণটি আপনি "উচিত" বলেছেন)

যাইহোক, আমি ধরে নিতে হবে:

যদি "চিত্রগুলি দিক রেশন রেখে পুনরায় আকার না দেওয়া হয়" এবং আপনি আমাকে এমন চিত্র দেখান যা পিক্সেলের অনুপাত রাখে তবে আমি ধরে নিতেই হবে আপনি "ক্রপিং" ক্ষেত্রের অনুপাতটি পূরণ করার চেষ্টা করছেন (এর অভ্যন্তরের অভ্যন্তর) সবুজ) পিক্সেলের দিক অনুপাত রেখে WILE ILE অর্থাৎ আপনি চিত্রটি বড় করে এবং ক্রপ করে চিত্রটি দিয়ে ঘরটি পূরণ করতে চান।

যদি এটি আপনার সমস্যা হয় তবে আপনি যে কোডটি দিয়েছেন তা "আপনার সমস্যা" প্রতিফলিত করে না, তবে এটি আপনার সূচনা উদাহরণ।

পূর্ববর্তী দুটি অনুমানের ভিত্তিতে, বাক্সের উচ্চতা গতিশীল থাকলে, তবে ব্যাকগ্রাউন্ডের চিত্রগুলির সাথে আপনার যা প্রয়োজন তা প্রকৃত চিত্রগুলি দিয়ে সম্পন্ন করা যাবে না। হয় "ব্যাকগ্রাউন্ড-সাইজ: কনটেন্ট" বা এই কৌশলগুলি ব্যবহার করে (পার্সেন্টগুলিতে স্মার্ট প্যাডিংগুলি যা আপনি চান যেখানেই ফসল বা সর্বোচ্চ আকারকে সীমাবদ্ধ করে): http://fofwebdesign.co.uk/template/_testing/scale-img/scale- img.htm

চিত্রগুলির মাধ্যমে এটি সম্ভব হওয়ার একমাত্র উপায় হ'ল যদি আমরা আপনার দ্বিতীয় আইমেজ সম্পর্কে ভুলে যাই এবং কোষগুলির একটি নির্দিষ্ট উচ্চতা থাকে এবং অবশ্যই আপনার নমুনা চিত্রগুলি বিচার করে উচ্চতা একই থাকে!

সুতরাং যদি আপনার ধারকের উচ্চতা পরিবর্তন না হয় এবং আপনি আপনার চিত্রগুলি বর্গক্ষেত্র রাখতে চান তবে আপনাকে কেবলমাত্র চিত্রটির সর্বাধিক উচ্চতাটি সেই মান হিসাবে (মাইনাস প্যাডিংস বা সীমানা) সেট করতে হবে যা বক্স-আকারের বৈশিষ্ট্যের উপর নির্ভর করে কোষ)

এটার মত:

<div class="content">
  <div class="row">    
      <div class="cell">    
          <img src="http://lorempixel.com/output/people-q-c-320-320-2.jpg"/>
      </div>
      <div class="cell">    
          <img src="http://lorempixel.com/output/people-q-c-320-320-7.jpg"/>
      </div>
    </div>
</div>

এবং সিএসএস:

.content {
    background-color: green;
}

.row {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -webkit-box-orient: horizontal; 
    -moz-box-orient: horizontal;
    box-orient: horizontal;
    flex-direction: row;

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

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

}

.cell {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    box-flex: 1;
    -webkit-flex: 1 1 auto;
    flex: 1 1 auto;
    padding: 10px;
    border: solid 10px red;
    text-align: center;
    height: 300px;
    display: flex;
    align-items: center;
    box-sizing: content-box;
}
img {
    margin: auto;
    width: 100%;
    max-width: 300px;
    max-height:100%
}

http://jsfiddle.net/z25heocL/

আপনার কোডটি অবৈধ (প্রারম্ভিক ট্যাগগুলি বন্ধ করার পরিবর্তে রয়েছে, সুতরাং তারা নিখরচায় সেলগুলি আউটপুট দেয়, ভাইবোন নয়, তিনি ত্রুটিযুক্ত কোডের অভ্যন্তরে আপনার চিত্রগুলির একটি স্ক্রিনশট ব্যবহার করেছেন, এবং ফ্লেক্স বাক্সটি কলামগুলিতে ধারণ করছে না তবে উভয় উদাহরণই একটি কলামে রয়েছে ( আপনি "সারি" সেটআপ করেছেন তবে অন্যের অভ্যন্তরে একটি কক্ষের বাসা বেঁধে রাখা দুর্নীতিগ্রস্ত কোডের ফলে একটি ফ্লেক্সের অভ্যন্তরে একটি ফ্লেক্স তৈরি হয়ে শেষ পর্যন্ত COLUMNS হিসাবে কাজ করে you আপনি কী অর্জন করতে চেয়েছিলেন এবং কীভাবে আপনি এই কোডটি নিয়ে এসেছিলেন তা আমার কোনও ধারণা নেই তবে আমি ' আমি অনুমান করছি আপনি কি চান এটি এই।

আমি প্রদর্শন যোগ করেছি: সেলগুলিতেও নমনীয়, তাই চিত্রটি কেন্দ্রীভূত হয় (আমার মনে হয় display: tableএই সমস্ত মার্কআপের সাথে এখানেও ব্যবহার করা যেতে পারে)


দেখে মনে হচ্ছে না যে আমার কাছে প্রশ্নের উত্তর কীভাবে দেওয়া হয়েছিল তার সামান্যতম সূত্র রয়েছে। সেই জেএসফিডেলের সমস্ত এইচটিএমএল এবং সিএসএস হ'ল প্রশ্নকর্তা (@ কনফিলে) যা সরবরাহ করেছেন। শুধু প্রশ্নটি পড়ুন এবং আপনি এটি দেখতে চাইবেন। আমার সমাধানটি সিএসএস ইমগের একটি সহজ লাইন {সর্বোচ্চ-প্রস্থ: 100%;} এবং প্রশ্নকর্তা এক বছর আগে আমার উত্তরটি গ্রহণ করেছেন কারণ এটি যে সমাধানটির জন্য জিজ্ঞাসা করা হয়েছিল তা সরবরাহ করে। আমি আপনাকে এখানে শুভ কামনা করি, দয়া করে প্রশ্নগুলি সঠিকভাবে পড়ার চেষ্টা করুন এবং তারপরে ভবিষ্যতে সেই অনুযায়ী উত্তর দিন, ধন্যবাদ।
ওমেগা

0

এইচটিএমএল:

<div class="container">
    <div class="box">
        <img src="http://lorempixel.com/1600/1200/" alt="">
    </div>
</div>

সিএসএস:

.container {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: stretch;

  width: 100%;
  height: 100%;

  border-radius: 4px;
  background-color: hsl(0, 0%, 96%);
}

.box {
  border-radius: 4px;
  display: flex;
}

.box img {
  width: 100%;
  object-fit: contain;
  border-radius: 4px;
}

0

এইভাবে আমি নমনীয় গ্রিডে বিভিন্ন চিত্র (আকার এবং অনুপাত) পরিচালনা করব।

.images {
  display: flex;
  flex-wrap: wrap;
  margin: -20px;
}

.imagewrapper {
  display: flex;
  justify-content: center;
  align-items: center;
  width: calc(50% - 20px);
  height: 300px;
  margin: 10px;
}

.image {
  display: block;
  object-fit: cover;
  width: 100%;
  height: 100%; /* set to 'auto' in IE11 to avoid distortions */
}
<div class="images">
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/800x600" />
  </div>
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/1024x768" />
  </div>
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/1000x800" />
  </div>
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/500x800" />
  </div>
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/800x600" />
  </div>
  <div class="imagewrapper">
    <img class="image" src="https://via.placeholder.com/1024x768" />
  </div>
</div>


-6

আমি অনুপাত রাখতে jquery বা vw ব্যবহার করছি

jquery

function setSize() {
    var $h = $('.cell').width();
    $('.your-img-class').height($h);
}
$(setSize);
$( window ).resize(setSize); 

vw

 .cell{
    width:30vw;
    height:30vw;
}
.cell img{
    width:100%;
    height:100%;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.