জাভাস্ক্রিপ্ট দিয়ে <স্টাইল> ট্যাগ কীভাবে তৈরি করবেন?


336

আমি <style>জাভাস্ক্রিপ্ট সহ একটি HTML পৃষ্ঠায় একটি ট্যাগ .োকানোর একটি উপায় খুঁজছি ।

আমি এখনও অবধি সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি:

var divNode = document.createElement("div");
divNode.innerHTML = "<br><style>h1 { background: red; }</style>";
document.body.appendChild(divNode);

এটি ফায়ারফক্স, অপেরা এবং ইন্টারনেট এক্সপ্লোরারে কাজ করে তবে গুগল ক্রোমে নয়। এছাড়াও এটি <br>IE এর জন্য সামনের দিকে কিছুটা কুৎসিত ।

<style>ট্যাগ তৈরি করার কোনও উপায় কি কেউ জানেন

  1. ভাল

  2. ক্রোমের সাথে কাজ করে?

অথবা হতে পারে

  1. এটি একটি মানহীন জিনিস যা আমার এড়ানো উচিত

  2. তিনটি ওয়ার্কিং ব্রাউজার দুর্দান্ত এবং যে কোনওভাবে Chrome ব্যবহার করে?

উত্তর:


663

পরিবর্তে styleউপাদানটি যুক্ত করার চেষ্টা করুন ।headbody

এটি IE (7-9), ফায়ারফক্স, অপেরা এবং ক্রোমে পরীক্ষিত হয়েছিল:

var css = 'h1 { background: red; }',
    head = document.head || document.getElementsByTagName('head')[0],
    style = document.createElement('style');

head.appendChild(style);

style.type = 'text/css';
if (style.styleSheet){
  // This is required for IE8 and below.
  style.styleSheet.cssText = css;
} else {
  style.appendChild(document.createTextNode(css));
}

19
এফওয়াইআই, document.headসমস্ত বড় ব্রাউজারে সমর্থিত।
রব ডব্লু

30
@ রবডাব্লু - এটি আইই 8 এবং এর নীচে সমর্থিত নয়। এটি আধুনিক ব্রাউজারগুলিতে সমর্থিত, তবে সমস্ত প্রধান নয়।
টিম

5
কেন শুধু ব্যবহার document.querySelector("head")করবেন না ? এটি ইভেন্ট উত্স
allenhwkim

8
@ অ্যালেনহউকিম: উত্তরটি প্রবর্তনের পূর্বে রয়েছে querySelector(); আজ, আমি সম্ভবত সঙ্গে যাব document.head, IE9-এর পরে উপলব্ধ
ক্রিস্টোফ

2
অ্যাক্সেস করার আগে আমাকে শৈলীর উপাদানটি মাথায় যুক্ত করতে হয়েছিল style.styleSheet.cssText। এটি যুক্ত হওয়ার আগে style.styleSheetশূন্য ছিল।
হকার

38

এখানে এমন একটি স্ক্রিপ্ট রয়েছে যা ব্রাউজারগুলিতে আইই-স্টাইল createStyleSheet()এবং addRule()পদ্ধতি যুক্ত করে যা সেগুলি নেই:

if(typeof document.createStyleSheet === 'undefined') {
    document.createStyleSheet = (function() {
        function createStyleSheet(href) {
            if(typeof href !== 'undefined') {
                var element = document.createElement('link');
                element.type = 'text/css';
                element.rel = 'stylesheet';
                element.href = href;
            }
            else {
                var element = document.createElement('style');
                element.type = 'text/css';
            }

            document.getElementsByTagName('head')[0].appendChild(element);
            var sheet = document.styleSheets[document.styleSheets.length - 1];

            if(typeof sheet.addRule === 'undefined')
                sheet.addRule = addRule;

            if(typeof sheet.removeRule === 'undefined')
                sheet.removeRule = sheet.deleteRule;

            return sheet;
        }

        function addRule(selectorText, cssText, index) {
            if(typeof index === 'undefined')
                index = this.cssRules.length;

            this.insertRule(selectorText + ' {' + cssText + '}', index);
        }

        return createStyleSheet;
    })();
}

এর মাধ্যমে আপনি বাহ্যিক ফাইল যুক্ত করতে পারেন

document.createStyleSheet('foo.css');

এবং গতিশীলভাবে মাধ্যমে নিয়ম তৈরি

var sheet = document.createStyleSheet();
sheet.addRule('h1', 'background: red;');

একটি অদ্ভুত সিএমএস প্রসঙ্গে বাইরের সিএসএস ফাইল লোড করার চেষ্টা করার ক্ষেত্রে এটি আমার পক্ষে খুব সহায়ক হয়েছিল। আমি অ্যাডরুল / রিমুভুল রুল অংশটি নিয়ে কিছুটা সমস্যায় পড়েছি, তাই আমি কেবল সেগুলি সরিয়ে দিয়েছি এবং সবকিছু ঠিকঠাক কাজ করে।
Kirkman14

33

আমি ধরে নিচ্ছি যে আপনি একটি styleট্যাগ বনাম কোনও linkট্যাগ (একটি বাহ্যিক সিএসএসের উল্লেখ) সন্নিবেশ করতে চাইছেন , তাই নিম্নলিখিত উদাহরণটি এটাই করে:

<html>
 <head>
  <title>Example Page</title>
 </head>
 <body>
  <span>
   This is styled dynamically via JavaScript.
  </span>
 </body>
 <script type="text/javascript">
   var styleNode = document.createElement('style');
   styleNode.type = "text/css";
   // browser detection (based on prototype.js)
   if(!!(window.attachEvent && !window.opera)) {
        styleNode.styleSheet.cssText = 'span { color: rgb(255, 0, 0); }';
   } else {
        var styleText = document.createTextNode('span { color: rgb(255, 0, 0); } ');
        styleNode.appendChild(styleText);
   }
   document.getElementsByTagName('head')[0].appendChild(styleNode);
 </script>
</html>

এছাড়াও, আমি আপনার প্রশ্নে লক্ষ্য করেছি যে আপনি ব্যবহার করছেন innerHTML। এটি আসলে কোনও পৃষ্ঠায় ডেটা ofোকানোর একটি অ-মানক উপায়। সবচেয়ে ভাল অনুশীলন হ'ল একটি পাঠ্য নোড তৈরি করা এবং এটি অন্য উপাদান নোডে যুক্ত করা।

আপনার চূড়ান্ত প্রশ্নে শ্রদ্ধার সাথে আপনি কিছু লোককে শুনতে পাচ্ছেন যে আপনার ব্রাউজারগুলির সমস্তটিতে কাজ করা উচিত। এটি সব আপনার শ্রোতার উপর নির্ভর করে। যদি আপনার শ্রোতার মধ্যে কেউ ক্রোম ব্যবহার না করে তবে ঘামবেন না; তবে, আপনি যদি সর্বাধিক শ্রোতাদের কাছে পৌঁছানোর সন্ধান করছেন তবে সমস্ত বড় এ গ্রেড ব্রাউজারগুলিকে সমর্থন করা ভাল


1
এটি মূলত আমার সমাধান হিসাবে একই; তাদের কোনটিই আইই তে কাজ করে না!
ক্রিস্টোফ

টেক্সট নোড যুক্ত করা IE তে কাজ করে না। তবে শৈলীর উপাদানটি মাথায় রেখে আমার সমাধানটি ক্রোমে কাজ করে! :-)

1
আই আই এর জন্য, ব্যবহার করুনstyleNode.styleSheet.cssText = ...
ক্রিস্টোফ

7
(খুব দেরিতে মন্তব্য) "এটি সব আপনার দর্শকের উপর নির্ভর করে। যদি আপনার শ্রোতার মধ্যে কেউ ক্রোম ব্যবহার না করে তবে তার ঘাম ঝরাবেন না" এই মনোভাবটিই আই আই 7 এর পরও বহু বছর ধরে লোকদের আই 6 এ লক করে রাখে এবং এমনকি আই 8 পাওয়া যায় available । "তবে আমাকে যে ওয়েব অ্যাপ্লিকেশনটি ব্যবহার করতে হবে তা কেবল আই 6-তে কাজ করে"
স্টিফেন পি

1
হ্যাঁ, আপনি ঠিক বলেছেন এবং আমি অবশ্যই এটি করার পক্ষে পরামর্শ দিচ্ছি না (সুতরাং পুরোটি: "যদি আপনি সর্বাধিক শ্রোতাদের কাছে পৌঁছানোর চেষ্টা করছেন তবে সমস্ত বড় এ-গ্রেড ব্রাউজারগুলিকে সমর্থন করা ভাল") তবে জেনে আপনার প্ল্যাটফর্মের জন্য শ্রোতা গুরুত্বপূর্ণ।
টম

31

<style>ট্যাগগুলি <head>উপাদানগুলির মধ্যে স্থান হওয়া উচিত এবং প্রতিটি যুক্ত ট্যাগ ট্যাগের নীচে যুক্ত করা উচিত <head>

নথির শিরোনাম ট্যাগটিতে একটি শৈলী ট্যাগ ইনজেক্ট করতে insertAdjacentH HTML ব্যবহার করে :

নেটিভ ডোম:

document.head.insertAdjacentHTML("beforeend", `<style>body{background:red}</style>`)


jQuery :

$('<style>').text("body{background:red}").appendTo(document.head)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


2
এটি সেরা এবং সহজ সমাধান, আপনাকে ধন্যবাদ!
রিজাল ইউসোফ

সম্মত হন, এটি সর্বোত্তম এবং সাধারণ তবে আপনি যদি এটির নিয়ন্ত্রণ না রাখেন তবে খারাপভাবে ইনজেকশন দেওয়া CSS এর জন্য নজর রাখুন!
অন্তহীন

24

একটি উদাহরণ যা কাজ করে এবং সমস্ত ব্রাউজারের সাথে সম্মতিযুক্ত:

var ss = document.createElement("link");
ss.type = "text/css";
ss.rel = "stylesheet";
ss.href = "style.css";
document.getElementsByTagName("head")[0].appendChild(ss);

7
ভুল উপাদান: styleএর কোন গুণ relবা hrefবৈশিষ্ট নেই - এর অর্থ কি link?
ক্রিস্টোফ

4
linkপ্রশ্নটির সাথে উপাদানটির কী সম্পর্ক আছে? ওপি styleউপাদান চেয়েছিল । এই উত্তরের প্রশ্নের সাথে কোনও সম্পর্ক নেই
vsync

2
@vsync styleইনলাইন শৈলী যুক্ত করার linkজন্য, স্টাইলশিট উত্সগুলির জন্য সঠিক এবং এটি ক্রস-ব্রাউজার সংক্রান্ত সমস্যাগুলি এড়িয়ে যাওয়ার সুবিধা রয়েছে।
majick

7

প্রায়শই বিদ্যমান নিয়মগুলিকে ওভাররাইড করার প্রয়োজন হয়, তাই হেডে নতুন স্টাইল যুক্ত করা প্রতিটি ক্ষেত্রে কার্যকর হয় না।

আমি এই সহজ ফাংশন যা সব সংক্ষিপ্ত বিবরণ নিয়ে এসেছেন বৈধ নয় পন্থা "শরীরের সংযোজন" এবং ব্যবহার করা ঠিক আরও বেশি সুবিধাজনক এবং ডিবাগ আছে (IE8 + +)।

window.injectCSS = (function(doc){
    // wrapper for all injected styles and temp el to create them
    var wrap = doc.createElement('div');
    var temp = doc.createElement('div');
    // rules like "a {color: red}" etc.
    return function (cssRules) {
        // append wrapper to the body on the first call
        if (!wrap.id) {
            wrap.id = 'injected-css';
            wrap.style.display = 'none';
            doc.body.appendChild(wrap);
        }
        // <br> for IE: http://goo.gl/vLY4x7
        temp.innerHTML = '<br><style>'+ cssRules +'</style>';
        wrap.appendChild( temp.children[1] );
    };
})(document);

ডেমো: কোডেপেন , জেসফিডাল


সর্বশেষতম ফায়ারফক্স, ক্রোম এবং আই 8 এ (বা কমপক্ষে যেভাবে আমি এটি টাইপ করেছি) এ পুরোপুরি কাজ করে । আমি কেন জানি না এর আরও পয়েন্ট নেই।
হ্যারি পেহকোনেন

এটির আর কোনও পয়েন্ট নেই, কারণ এটি বৈধ নয়, তেমনি <style>ট্যাগের বাইরে <head>ট্যাগ ইনজেক্ট করা ভাল জিনিসও নয় । স্টাইল ট্যাগ অন্য কোথাও প্রদর্শিত হবে না তবে <head>ট্যাগের মধ্যে । এটি ব্যাপকভাবে html স্ট্যান্ডার্ড গৃহীত। সেখানে ইনলাইন স্টাইলিং এবং শৈলী বৈশিষ্ট্য জন্য শৈলী বৈশিষ্ট্য মধ্যে যে কোনো ট্যাগ প্রয়োগ করা যেতে পারে <body>ট্যাগ, সহ <body>ট্যাগটি এটা স্ব।
ভুতুড়ে

এই কোডটি আমার পক্ষে কার্যকর হয়নি। আমি কয়েকটি আরও সংক্ষিপ্ত কোড তৈরি করেছি যা তিনটি ব্রাউজারে কাজ করে এবং আমার উত্তরটি এখানে পোস্ট করবে।
ডেভিড স্পেক্টর

আমি যখন বুঝতে পারি না যে যখন আমি গতিশীলভাবে মাথায় একটি স্টাইল ব্লক যুক্ত করি তখন ক্রোম কেন আমার শৈলীগুলি আপডেট করে না। আমি এটি চেষ্টা করেছি এবং যাদুতে এটি আপডেট হয়। এই কোডটিতে এখানে আসলে পার্থক্য কী তা আমাকে তদন্ত করতে হবে যা ব্রাউজারকে সিএসএস পুনরায় রেন্ডার করতে ট্রিগার করে। তবে, বড় ধন্যবাদ!
প্রোগ্রাহামার

5

এই অবজেক্ট ভেরিয়েবলটি টাইপ অ্যাট্রিবিউট এবং প্রতিটি একক আইডি / শ্রেণি / উপাদানটির সাথে মেলে এমন একটি সাধারণ ট্রানজিশন নিয়ম সহ প্রধান ট্যাগটিতে স্টাইল ট্যাগ যুক্ত করবে। কন্টেন্টের সম্পত্তিটি সংশোধন করতে এবং আপনার প্রয়োজন মতো অনেকগুলি নিয়ম ইনজেকশন মুক্ত মনে করুন । কেবলমাত্র নিশ্চিত হয়ে নিন যে সামগ্রীর অভ্যন্তরের CSS বিধিগুলি একটি লাইনে থাকবে (বা আপনি যদি পছন্দ করেন তবে প্রতিটি নতুন লাইন 'পলায়ন')।

var script = {

  type: 'text/css', style: document.createElement('style'), 
  content: "* { transition: all 220ms cubic-bezier(0.390, 0.575, 0.565, 1.000); }",
  append: function() {

    this.style.type = this.type;
    this.style.appendChild(document.createTextNode(this.content));
    document.head.appendChild(this.style);

}}; script.append();

1
আমি এই সমাধানটি পছন্দ করেছি, তাই মোবাইল ডিভাইসে বোতামের আকার পরিবর্তন করতে আমি নিজেই এটি ব্যবহার করেছি, তবে এটি ভুল যে বিষয়বস্তুর সম্পত্তিটি এক লাইনে থাকা দরকার: কেবলমাত্র + অপারেটরের সাথে একাধিক স্ট্রিং (একাধিক লাইনের উপরে) সংযুক্ত করা উচিত।
RufusVS

সত্য। আমি জানি এবং আমি এটি জানতাম। তবে, কখনও কখনও, আমি যেমন লিখতে চেয়েছি তেমন লিখতে খুব অলস zy : ডি চিয়ার্স
ভুতুড়ে

5

গতিশীলভাবে একটি বর্গ যোগ করার জন্য এখানে একটি বৈকল্পিক

function setClassStyle(class_name, css) {
  var style_sheet = document.createElement('style');
  if (style_sheet) {
    style_sheet.setAttribute('type', 'text/css');
    var cstr = '.' + class_name + ' {' + css + '}';
    var rules = document.createTextNode(cstr);
    if(style_sheet.styleSheet){// IE
      style_sheet.styleSheet.cssText = rules.nodeValue;
    } else {
      style_sheet.appendChild(rules);
    }
    var head = document.getElementsByTagName('head')[0];
    if (head) {
      head.appendChild(style_sheet);
    }
  }
}

4

জাভাস্কিপ্ট দ্বারা নির্মিত নোডের সাথে আইই 6 তে কাজ করার জন্য স্টাইল নোড সিএসএসটেক্সট ভাল, তবে আপনি সিএসএসটেক্সট সেট করার আগে নথটিতে নোড যুক্ত করতে হবে;

আরও তথ্যের @ http://msdn.microsoft.com/en-us/library/ms533698%28VS.85%29.aspx


4

আপনি যখনই এই ফাংশনটিকে কল করবেন এই ফাংশনটি সিএসএস ইনজেক্ট করবে appendStyle:
appendStyle('css you want to inject')

এটি styleনথির শিরোনামে নোড ইনজেকশনের মাধ্যমে কাজ করে । এটি সাধারণত অলস-লোড জাভাস্ক্রিপ্টে ব্যবহৃত হয় তার অনুরূপ কৌশল। এটি বেশিরভাগ আধুনিক ব্রাউজারে ধারাবাহিকভাবে কাজ করে।

appendStyle = function (content) {
  style = document.createElement('STYLE');
  style.type = 'text/css';
  style.appendChild(document.createTextNode(content));
  document.head.appendChild(style);
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
  <h1>Lorem Ipsum</h1>
  <p>dolar sit amet</p>
  <button onclick='appendStyle("body { background-color: #ff0000;}h1 { font-family: Helvetica, sans-serif; font-variant: small-caps; letter-spacing: 3px; color: #ff0000; background-color: #000000;}p { font-family: Georgia, serif; font-size: 14px; font-style: normal; font-weight: normal; color: #000000; background-color: #ffff00;}")'>Press me to inject CSS!</button>
</body>

</html>

আপনি নিম্নলিখিত স্নিপেট ব্যবহার করে অলস-বহিরাগত সিএসএস ফাইলগুলি লোড করতে পারেন:

appendExternalStyle = function (content) {
  link = document.createElement('LINK');
  link.rel = 'stylesheet';
  link.href = content;
  link.type = 'text/css';
  document.head.appendChild(link);
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    html {
      font-family: sans-serif;
      font-display: swap;
    }
  </style>
</head>

<body>

  <h1>Lorem Ipsum</h1>
  <p>dolar sit amet</p>
  <button onclick='appendExternalStyle("data:text/css;base64,OjotbW96LXNlbGVjdGlvbntjb2xvcjojZmZmIWltcG9ydGFudDtiYWNrZ3JvdW5kOiMwMDB9OjpzZWxlY3Rpb257Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7YmFja2dyb3VuZDojMDAwfWgxe2ZvbnQtc2l6ZToyZW19Ym9keSxodG1se2NvbG9yOnJnYmEoMCwwLDAsLjc1KTtmb250LXNpemU6MTZweDtmb250LWZhbWlseTpMYXRvLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuNjd9YnV0dG9uLGlucHV0e292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHstd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246LjFzO3RyYW5zaXRpb24tZHVyYXRpb246LjFzfQ==")'>press me to inject css!</button>
</body>

</html>


এটি প্রায় স্বাধীনভাবে উন্নত যে পদ্ধতির। সংক্ষিপ্ত এবং মিষ্টি এবং সর্বশেষতম ফায়ারফক্স, মাইক্রোসফ্ট এজ এবং ক্রোম ব্রাউজারগুলিতে কাজ করে। অবশ্যই, ব্রাউজারের সামঞ্জস্যের সাথে এটি অন্তর্ভুক্ত করার বিষয়ে চিন্তা করার জন্য ইন্টারনেট এক্সপ্লোরারে অনেকগুলি জাভাস্ক্রিপ্ট ত্রুটি রয়েছে।
ডেভিড স্পেক্টর

3

তুমি লিখেছিলে:

var divNode = document.createElement("div");
divNode.innerHTML = "<br><style>h1 { background: red; }</style>";
document.body.appendChild(divNode);

কেন এই না?

var styleNode = document.createElement("style");
document.head.appendChild(styleNode);

এরপরে আপনি এইচটিএমএল কোডে সহজেই সিএসএস বিধি যুক্ত করতে পারবেন:

styleNode.innerHTML = "h1 { background: red; }\n";
styleNode.innerHTML += "h2 { background: green; }\n";

... বা সরাসরি ডম এ:

styleNode.sheet.insertRule("h1 { background: red; }");
styleNode.sheet.insertRule("h2 { background: green; }");

প্রত্যাশিত ব্রাউজারগুলি বাদে এটি সর্বত্র কাজ করার আশা করি to

2019 সালে অবশ্যই ক্রোমে কাজ করে


3

document.head.innerHTML += `
  <style>
    h1 {
      color: red; 
    }
    p {
      color: blue;
    }
  </style>`
<h1>I'm red!</h1>
<p>I'm blue!</p>

এখন পর্যন্ত সবচেয়ে সহজ সমাধান। আপনাকে যা করতে হবে তা হ'ল styleব্যাকটিকের মধ্যে আপনি কীভাবে ট্যাগগুলি ঘোষণা করবেন তা ঠিক টাইপ করতে হবে


1
হাই এবং সাইটে আপনাকে স্বাগতম। যদিও এই কোডটি প্রদত্ত সমস্যাটিকে সমাধান করতে পারে, আপনার কীভাবে এবং কেন এটি কাজ করে তার একটি ব্যাখ্যাও আপনাকে অন্তর্ভুক্ত করতে হবে।
রেডিওডেফ

1

আপনি যে সমস্যার মুখোমুখি হচ্ছেন সেটি যদি কোনও পৃষ্ঠায় সিএসএসের একটি স্ট্রিং ইনজেক্ট করা হয় তবে <link>উপাদানটির চেয়ে উপাদানটির সাথে এটি করা আরও সহজ <style>

নিম্নলিখিত p { color: green; }পৃষ্ঠায় নিয়ম যুক্ত করে।

<link rel="stylesheet" type="text/css" href="data:text/css;charset=UTF-8,p%20%7B%20color%3A%20green%3B%20%7D" />

আপনি এটি আপনার সিএসএসের স্ট্রিং এনকোডিং করে এবং এটিকে HREFবৈশিষ্ট্য যুক্ত করে জাভাস্ক্রিপ্টে এটি তৈরি করতে পারেন । সমস্ত <style>মৌলিক পদার্থের চেয়ে সরাসরি বা স্টাইলশিটগুলিতে অ্যাক্সেসের চেয়ে অনেক সহজ ।

let linkElement: HTMLLinkElement = this.document.createElement('link');
linkElement.setAttribute('rel', 'stylesheet');
linkElement.setAttribute('type', 'text/css');
linkElement.setAttribute('href', 'data:text/css;charset=UTF-8,' + encodeURIComponent(myStringOfstyles));

এটি IE 5.5 উপরের দিকে কাজ করবে


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

-1
this link may helpful to you: 

http://jonraasch.com/blog/javascript-style-node


একটি সংক্ষিপ্ত অনুচ্ছেদে দয়া করে প্রিফর্মেটেড পাঠ্য / কোড ব্লক ব্যবহার করবেন না। উত্তরের সাথে এইভাবে যুক্ত করাও অকেজো। প্রথমে ওয়েবসাইটটি সংক্ষিপ্ত করুন।
ফ্রাইংজিপ্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.