मैं एक विवरण पृष्ठ के UI पर काम कर रहा हूं। पृष्ठ अपनी सामग्री को डेटा बेस से प्राप्त कर रहा है जो सामग्री को गतिशील रूप से अपडेट करता है। अब तक यूआई उस छवि की तरह दिखता है जिसे मैंने लिंक किया है

विवरण पृष्ठ का वर्तमान UI

हालाँकि जब div की सामग्री बदलती है, तो इसका परिणाम छवियों को बहुत अधिक कवर किया जाता है।

एचटीएमएल इस प्रकार है।

<ion-content >
    <ion-title *ngIf="item">{{item.title}}</ion-title>
  <div class="container">
  <div class="content">
    <div *ngFor ="let image of image" >
        <ion-row>
          <ion-col size="12" offset="0">
            <img  id ="image" [src]="image" alt="this is the image"/>
          </ion-col>  
        </ion-row>
      </div>
    </div>
    <div class="overlay">
        <ion-buttons slot="start">
            <ion-back-button defaultHref="/tabs/tab4"></ion-back-button>
          </ion-buttons>
          <h2>{{item.title}}</h2>
          <p>{{item.description}}</p></div>
  </div>
</ion-content>

सीएसएस इस प्रकार है

.container {
  display: grid;
 }

 .content, .overlay {
   grid-area: 1 / 1;
 }

 .content {
   margin-top: 20px;
 }

 .overlay {
  width: 100%;
  border-radius:  0px 0px 30px 30px; 
  background-color: #ffffff;
  opacity: 1;
  position: absolute;

 }  

मैं नीचे दी गई छवि को कवर किए बिना div की सामग्री को गतिशील रूप से कैसे अपडेट कर सकता हूं? क्या कोई तरीका है कि मैं छवि को पृष्ठ के नीचे और आगे बढ़ा सकता हूं क्योंकि अधिक पाठ के कारण ओवरले बड़ा हो जाता है?

1
user12075155 23 अक्टूबर 2019, 23:06

1 उत्तर

सबसे बढ़िया उत्तर

चूंकि आप CSS ग्रिड का उपयोग कर रहे हैं, आप अपनी .overlay कक्षा में पूर्ण स्थिति को समाप्त कर सकते हैं।

अपनी .container कक्षा में यह अतिरिक्त संपत्ति बनाएं grid-template-rows: max-content minmax(0, 1fr);

फिर आप अपने .overlay को ग्रिड की पहली पंक्ति में रख सकते हैं जैसे आपके पास है, और फिर अपनी .content को दूसरी पंक्ति में रखें ताकि वे ढेर हो जाएं। .overlay पर margin-bottom: "however much you want it to overlap लगाएं। जैसे-जैसे .overlay में आपकी सामग्री बढ़ती है, वैसे-वैसे छवियों को नीचे धकेलते हुए उन्हें थोड़ा ओवरलैप करना होगा। यदि आप स्रोत क्रम में .content से पहले .overlay डालते हैं, तो आपको इसे छवियों के ऊपर प्रदर्शित करने के लिए position: relative; को .overlay में जोड़ना होगा। तो मूल रूप से आपके 3 वर्गों को कुछ इस तरह दिखना चाहिए -

.container {
  display: grid;
  grid-template-rows: max-content minmax(0, 1fr);
 }

 .content {
   grid-row: 2 / 3;
 }

 .overlay {
  width: 100%;
  grid-row: 1 / 2;
  border-radius:  0px 0px 30px 30px; 
  background-color: #ffffff;
  opacity: 1;
  margin-bottom: -10px;
 }

आप अनिवार्य रूप से दो कंटेनरों को उनकी संबंधित पंक्तियों में बिना किसी ओवरलैप के सेट कर रहे हैं और फिर छवियों को संदेश के नीचे थोड़ा ऊपर खींचने के लिए नकारात्मक मार्जिन का उपयोग कर रहे हैं। यह न भूलें कि यदि आप HTML क्रम को बदलते हैं और .overlay को .content से ऊपर रखते हैं, तो आपको इसे position: relative; देना होगा ताकि यह .content के ऊपर प्रदर्शित हो। . यह ओवरले के लिए प्रभावी रूप से हमेशा चित्रों के ऊपर रखने के लिए एक नया स्टैकिंग संदर्भ बनाता है। यदि आप स्रोत क्रम में .overlay को .content से ऊपर रखते हैं, तो आपको सीएसएस ग्रिड का उपयोग करने की कोई आवश्यकता नहीं होगी - जैसा कि आप जानते हैं।

1
Brett Parsons 23 अक्टूबर 2019, 22:33