মনে করুন যে আমার কাছে <div>
ব্রাউজারের ডিসপ্লেতে (ভিউপোর্ট) কেন্দ্র করতে চান। এটি করতে, আমাকে <div>
উপাদানটির প্রস্থ এবং উচ্চতা গণনা করতে হবে ।
আমার কী ব্যবহার করা উচিত? দয়া করে ব্রাউজারের সামঞ্জস্যের তথ্য অন্তর্ভুক্ত করুন।
মনে করুন যে আমার কাছে <div>
ব্রাউজারের ডিসপ্লেতে (ভিউপোর্ট) কেন্দ্র করতে চান। এটি করতে, আমাকে <div>
উপাদানটির প্রস্থ এবং উচ্চতা গণনা করতে হবে ।
আমার কী ব্যবহার করা উচিত? দয়া করে ব্রাউজারের সামঞ্জস্যের তথ্য অন্তর্ভুক্ত করুন।
উত্তর:
আপনি .offsetWidth
এবং .offsetHeight
বৈশিষ্ট্য ব্যবহার করা উচিত । নোট করুন যে তারা উপাদানটির অন্তর্গত, নয় .style
।
var width = document.getElementById('foo').offsetWidth;
ফাংশন.getBoundingClientRect()
সিএসএস রূপান্তর সম্পাদনের পরে ভাসমান-পয়েন্ট সংখ্যা হিসাবে মাত্রার এবং উপাদানটির অবস্থান ফেরত দেয়।
> console.log(document.getElementById('id').getBoundingClientRect())
DOMRect {
bottom: 177,
height: 54.7,
left: 278.5,
right: 909.5,
top: 122.3,
width: 631,
x: 278.5,
y: 122.3,
}
.offsetWidth
এবং .offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elements
offsetWidth
যদি উপাদানটি থাকে তবে 0 হবে display:none
, যদিও গণনাগুলির width
এখনও এই উদাহরণে একটি ইতিবাচক মান থাকতে পারে। visibility:hidden
প্রভাবিত করে না offsetWidth
।
offsetWidth
সামগ্রী, প্যাডিং এবং সীমানা সহ "পুরো" বাক্সটি প্রদান করে; যখন clientWidth
একা কন্টেন্ট বক্সের আকার ফেরত দেয় (সুতরাং যখনই উপাদানটির কোনও শূন্য-প্যাডিং এবং / বা সীমানা থাকে তখন এটির একটি ছোট মান হবে)। (মোড স্পষ্টতার জন্য সম্পাদিত)
একবার দেখুন Element.getBoundingClientRect()
।
এই পদ্ধতি একটি বস্তু ধারণকারী ফিরে আসবে width
, height
এবং কিছু অন্যান্য দরকারী মান:
{
width: 960,
height: 71,
top: 603,
bottom: 674,
left: 360,
right: 1320
}
উদাহরণ স্বরূপ:
var element = document.getElementById('foo');
var positionInfo = element.getBoundingClientRect();
var height = positionInfo.height;
var width = positionInfo.width;
আমার বিশ্বাস এই বিষয় নেই .offsetWidth
এবং .offsetHeight
যেখানে তারা কখনো কখনো ফিরে আসতে না 0
(যেমন আলোচনা মন্তব্য এখানে )
আর একটি পার্থক্য হ'ল getBoundingClientRect()
ভগ্নাংশের পিক্সেলগুলি ফিরে আসতে পারে .offsetWidth
এবং যেখানে .offsetHeight
নিকটতম পূর্ণসংখ্যার সাথে গোল হবে।
আইই 8 দ্রষ্টব্য : আইই 8 এবং এর নীচে getBoundingClientRect
উচ্চতা এবং প্রস্থ ফিরে আসে না *
আপনার যদি অবশ্যই IE8 সমর্থন করে তবে ব্যবহার করুন .offsetWidth
এবং .offsetHeight
:
var height = element.offsetHeight;
var width = element.offsetWidth;
এটি লক্ষণীয় যে এই পদ্ধতিতে প্রত্যাবর্তিত অবজেক্টটি আসলে কোনও সাধারণ বস্তু নয়। এর বৈশিষ্ট্যগুলি গণনাযোগ্য নয় (সুতরাং উদাহরণস্বরূপ, Object.keys
বাক্সের বাইরে কাজ করে না))
এখানে আরও তথ্য: একটি ক্লায়েন্টরেক্ট / ডমরেক্টকে কীভাবে একটি সরল অবজেক্টে রূপান্তর করা যায় তা সেরা best
রেফারেন্স:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectoffsetHeight
এবং offsetWidth
করবে না।
দ্রষ্টব্য : এই উত্তরটি ২০০৮ সালে লেখা হয়েছিল the সেই সময়ে বেশিরভাগ লোকের জন্য সেরা ক্রস ব্রাউজার সমাধানটি ছিল সত্যিই jQuery ব্যবহার করা। আমি উত্তর এখানে উত্তরোত্তর জন্য রেখে দিচ্ছি এবং আপনি যদি jQuery ব্যবহার করেন তবে এটি করার এটি একটি ভাল উপায়। আপনি যদি অন্য কোনও কাঠামো ব্যবহার করছেন বা খাঁটি জাভাস্ক্রিপ্ট গ্রহণযোগ্য উত্তর সম্ভবত যাওয়ার উপায়।
JQuery এর 1.2.6 এর হিসাবে আপনি কোর ব্যবহার করতে পারেন সিএসএস ফাংশন , height
এবং width
(অথবা outerHeight
এবং outerWidth
উপযুক্ত হিসাবে)।
var height = $("#myDiv").height();
var width = $("#myDiv").width();
var docHeight = $(document).height();
var docWidth = $(document).width();
এটি যদি কারওর উপযোগী হয় তবে আমি একই সিএসএস দিয়ে একটি পাঠ্যবক্স, বোতাম এবং সমস্ত ভাগ করে নিই:
width:200px;
height:20px;
border:solid 1px #000;
padding:2px;
<input id="t" type="text" />
<input id="b" type="button" />
<div id="d"></div>
আমি এটি ক্রোম, ফায়ারফক্স এবং অর্থাত্ প্রান্তে চেষ্টা করেছিলাম, আমি jquery দিয়ে এবং ছাড়াও চেষ্টা করেছি এবং আমি এটি চেষ্টা করেছি এবং এর বাইরেও box-sizing:border-box
। সর্বদা সাথে<!DOCTYPE html>
ফলাফলগুলো:
Firefox Chrome IE-Edge
with w/o with w/o with w/o box-sizing
$("#t").width() 194 200 194 200 194 200
$("#b").width() 194 194 194 194 194 194
$("#d").width() 194 200 194 200 194 200
$("#t").outerWidth() 200 206 200 206 200 206
$("#b").outerWidth() 200 200 200 200 200 200
$("#d").outerWidth() 200 206 200 206 200 206
$("#t").innerWidth() 198 204 198 204 198 204
$("#b").innerWidth() 198 198 198 198 198 198
$("#d").innerWidth() 198 204 198 204 198 204
$("#t").css('width') 200px 200px 200px 200px 200px 200px
$("#b").css('width') 200px 200px 200px 200px 200px 200px
$("#d").css('width') 200px 200px 200px 200px 200px 200px
$("#t").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#b").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#d").css('border-left-width') 1px 1px 1px 1px 1px 1px
$("#t").css('padding-left') 2px 2px 2px 2px 2px 2px
$("#b").css('padding-left') 2px 2px 2px 2px 2px 2px
$("#d").css('padding-left') 2px 2px 2px 2px 2px 2px
document.getElementById("t").getBoundingClientRect().width 200 206 200 206 200 206
document.getElementById("b").getBoundingClientRect().width 200 200 200 200 200 200
document.getElementById("d").getBoundingClientRect().width 200 206 200 206 200 206
document.getElementById("t").offsetWidth 200 206 200 206 200 206
document.getElementById("b").offsetWidth 200 200 200 200 200 200
document.getElementById("d").offsetWidth 200 206 200 206 200 206
এমডিএন অনুসারে : উপাদানগুলির মাত্রা নির্ধারণ করা
offsetWidth
এবং offsetHeight
"দৃশ্যমান সামগ্রীর প্রস্থ, স্ক্রোলবারগুলি (যদি থাকে), প্যাডিং এবং সীমানার সহ কোনও উপাদান দখল করা মোট পরিমাণের পরিমাণ ফেরত দিন"
clientWidth
এবং clientHeight
"আসল প্রদর্শিত সামগ্রীটি প্যাডিং সহ কিন্তু সীমানা, মার্জিন, বা স্ক্রোলবারগুলি সহ না করে কতটা জায়গা নেয় তা ফিরিয়ে দিন"
scrollWidth
এবং scrollHeight
"সামগ্রীর প্রকৃত আকার, এটি বর্তমানে কতটা দৃশ্যমান তা নির্বিশেষে" ফিরিয়ে দিন
সুতরাং এটি পরিমাপ করা সামগ্রীটি বর্তমান দেখার ক্ষেত্রের বাইরে থাকবে কি না তার উপর নির্ভর করে।
আপনার কেবল এটি আই 7 এবং তার চেয়ে বেশি বয়সের জন্য গণনা করতে হবে (এবং কেবল আপনার সামগ্রীর স্থির আকার না থাকলে)) আমি সিএসএস 2 সমর্থন করে না এমন পুরানো আইইগুলিতে হ্যাক সীমাবদ্ধ করতে এইচটিএমএল শর্তযুক্ত মন্তব্যগুলি ব্যবহার করার পরামর্শ দিচ্ছি। অন্যান্য সমস্ত ব্রাউজারের জন্য এটি ব্যবহার করুন:
<style type="text/css">
html,body {display:table; height:100%;width:100%;margin:0;padding:0;}
body {display:table-cell; vertical-align:middle;}
div {display:table; margin:0 auto; background:red;}
</style>
<body><div>test<br>test</div></body>
এই নিখুঁত সমাধান। এটি <div>
যে কোনও আকারের কেন্দ্র করে , এবং এটির সামগ্রীর আকারে সঙ্কুচিত করে দেয়।
উপাদানগুলির শৈলীর সংশোধন করা সহজ তবে মানটি পড়ার জন্য কৌশলপূর্ণ y
জাভাস্ক্রিপ্ট সিএসএস (অভ্যন্তরীণ / বাহ্যিক) থেকে আগত কোনও উপাদান শৈলীর সম্পত্তি (ইলেম.স্টাইল) পড়তে পারে না যদি আপনি জাভাস্ক্রিপ্টে বিল্ট ইন মেথড কল গেটকম্পিউডস্টাইল ব্যবহার না করেন।
getComputesStyle (উপাদান [, ছদ্ম]]
উপাদান: মানটি পড়ার উপাদান।
সিউডো: প্রয়োজনে একটি সিউডো-উপাদান, উদাহরণস্বরূপ :: আগে। একটি খালি স্ট্রিং বা কোনও যুক্তি মানে উপাদান নিজেই।
ফলাফল হ'ল স্টাইলের মতো স্টাইলের বৈশিষ্ট্যযুক্ত একটি বস্তু, তবে এখন সমস্ত সিএসএস শ্রেণিতে সম্মান।
উদাহরণস্বরূপ, এখানে স্টাইলটি মার্জিনটি দেখতে পাচ্ছে না:
<head>
<style> body { color: red; margin: 5px } </style>
</head>
<body>
<script>
let computedStyle = getComputedStyle(document.body);
// now we can read the margin and the color from it
alert( computedStyle.marginTop ); // 5px
alert( computedStyle.color ); // rgb(255, 0, 0)
</script>
</body>
সুতরাং আপনার জাভাস্ক্রিপ্ট কোডটি পরিমার্জন করে আপনি যে উপাদানটির প্রস্থ / উচ্চতা বা অন্যান্য বৈশিষ্ট্য পেতে চান তার গেটকম্পটেড স্টাইল অন্তর্ভুক্ত করুন
window.onload = function() {
var test = document.getElementById("test");
test.addEventListener("click", select);
function select(e) {
var elementID = e.target.id;
var element = document.getElementById(elementID);
let computedStyle = getComputedStyle(element);
var width = computedStyle.width;
console.log(element);
console.log(width);
}
}
গণিত এবং সমাধান করা মান
সিএসএসে দুটি ধারণা রয়েছে:
সিএসএস ক্যাসকেডের ফলস্বরূপ সমস্ত সিএসএস বিধি এবং সিএসএস উত্তরাধিকার প্রয়োগের পরে একটি গণিত শৈলীর মান। এটি উচ্চতার মতো দেখতে পারে: 1 মিমি বা হরফ আকার: 125%।
একটি সমাধান করা শৈলীর মান হ'ল শেষ পর্যন্ত উপাদানটিতে প্রয়োগ করা। 1 ম বা 125% এর মতো মানগুলি আপেক্ষিক। ব্রাউজারটি গণিত মান গ্রহণ করে এবং সমস্ত ইউনিটকে স্থির ও নিখুঁত করে তোলে, উদাহরণস্বরূপ: উচ্চতা: 20px বা ফন্ট-আকার: 16px। জ্যামিতির বৈশিষ্ট্যগুলির জন্য সমাধান হওয়া মানগুলির প্রস্থ: 50.5px এর মতো একটি ভাসমান পয়েন্ট থাকতে পারে।
একটি দীর্ঘ সময় আগে getComputesStyle গণিত মান পেতে তৈরি করা হয়েছিল, কিন্তু দেখা গেল যে সমাধান করা মানগুলি আরও বেশি সুবিধাজনক এবং মান পরিবর্তিত হয়েছে।
সুতরাং আজকাল getComputesStyle প্রকৃতপক্ষে সম্পত্তিটির সমাধান করা মান প্রদান করে।
দয়া করে নোট করুন:
getComputesStyle এর সম্পূর্ণ সম্পত্তির নাম প্রয়োজন
প্যাডিং লেফট বা উচ্চতা বা প্রস্থের মতো আপনি যা চান ঠিক তার জন্য আপনার জিজ্ঞাসা করা উচিত। অন্যথায় সঠিক ফলাফল গ্যারান্টিযুক্ত হয় না।
উদাহরণস্বরূপ, যদি লেডিং / প্যাডিংপপ বৈশিষ্ট্যগুলি থাকে, তবে আমাদের getComputesStyle (এলেম) .প্যাডিংয়ের জন্য কী পাওয়া উচিত? কিছুই নেই, বা সম্ভবত পরিচিত প্যাডিংস থেকে একটি "উত্পন্ন" মান? এখানে কোনও মান নিয়ম নেই।
অন্যান্য অসঙ্গতি রয়েছে। উদাহরণ হিসাবে, কিছু ব্রাউজার (ক্রোম) নীচের দস্তাবেজে 10px দেখায়, এবং তাদের মধ্যে কিছু (ফায়ারফক্স) - এটি করে না:
<style>
body {
margin: 30px;
height: 900px;
}
</style>
<script>
let style = getComputedStyle(document.body);
alert(style.margin); // empty string in Firefox
</script>
আরও তথ্যের জন্য https://javascript.info/styles-and- ক্লাসগুলি
এলিমেন্ট.অফসেটউইথ এবং এলিমেন্ট.অফসেটহাইটটি আগের পোস্টে প্রস্তাবিত হিসাবে করা উচিত।
তবে, আপনি যদি কেবল বিষয়বস্তুটিকে কেন্দ্র করে রাখতে চান, তবে এটি করার আরও ভাল উপায় আছে। ধরে নিচ্ছি আপনি এক্সএইচটিএমএল কঠোরভাবে DOCTYPE ব্যবহার করেছেন। মার্জিনটি সেট করুন: 0, স্বয়ংক্রিয় সম্পত্তি এবং বডি ট্যাগে px এ প্রস্থ প্রয়োজন। সামগ্রীতে পৃষ্ঠার সাথে সারিবদ্ধ হয়।
... মনে হচ্ছে সিএসএস ডিভিডিকে কেন্দ্র করে রাখবে ...
<style>
.monitor {
position:fixed;/* ... absolute possible if on :root */
top:0;bottom:0;right:0;left:0;
visibility:hidden;
}
.wrapper {
width:200px;/* this is size range */
height:100px;
position:absolute;
left:50%;top:50%;
visibility:hidden;
}
.content {
position:absolute;
width: 100%;height:100%;
left:-50%;top:-50%;
visibility:visible;
}
</style>
<div class="monitor">
<div class="wrapper">
<div class="content">
... so you hav div 200px*100px on center ...
</div>
</div>
</div>
এছাড়াও আপনি এই কোড ব্যবহার করতে পারেন:
var divID = document.getElementById("divid");
var h = divID.style.pixelHeight;
নির্দিষ্ট ডম উপাদানটির উচ্চতা নির্ধারণ করে (পুরো পৃষ্ঠার জন্য সঠিকভাবে কাজ করে না) ডব্লিউকেউইউভিউয়ের কোড এখানে is
let html = "<body><span id=\"spanEl\" style=\"font-family: '\(taskFont.fontName)'; font-size: \(taskFont.pointSize - 4.0)pt; color: rgb(\(red), \(blue), \(green))\">\(textValue)</span></body>"
webView.navigationDelegate = self
webView.loadHTMLString(taskHTML, baseURL: nil)
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementById(\"spanEl\").getBoundingClientRect().height;") { [weak self] (response, error) in
if let nValue = response as? NSNumber {
}
}
}
swift
কোড, তাই না? জাভাস্ক্রিপ্ট নয়। আমি একটি ডাউনভোটটি সহিংস করছি (খ / সি এটি আসলে বেশ কার্যকর হতে পারে) তবে দয়া করে মনে রাখবেন যে এটি প্রশ্নের উত্তর দেয় না এবং সম্ভবত আইওএস নির্দিষ্ট, প্রশ্নে আরও উপযুক্ত হবে। যদি ইতিমধ্যে কোনও উপস্থিত না থাকে তবে সম্ভবত একজনকে জিজ্ঞাসা করা এবং স্ব-উত্তর দেওয়া বিবেচনা করুন।