বাহ্যরেখা ব্যাসার্ধ?


473

সেখানে পাবার আসলে বৃত্তাকার কোণ উপর রূপরেখা একটি এর div elementঅনুরূপ, border-radius?


2
আমি 20px সীমানা-ব্যাসার্ধের সাথে 2px গ্রে বর্ডার সহ একটি ডিভ বক্স পেয়েছি, আমি তখন ঘোরাফেরা করছিলাম যদি আমি তখন বর্ডারটির পরিবর্তে বর্ডারকে অনুসরণ করে যে বর্ডারটির চারপাশে 10px আউটাইন পেতে পারি
মার্ক গেরিন

4
এটা একটা ভালো প্রশ্ন। একটি উপাদান সঙ্গে border: 5px redএবং outline: 5px blueএবং border-radius: 5pxসীমান্তের বৃত্তাকার, কিন্তু সীমারেখা বর্গ হয়।
ম্যাথু রুডি 20'12

4
এখন পর্যন্ত আমরা কেবল এটি ফায়ারফক্সে ব্যবহার করতে পারি:-moz-outline-radius
ওয়াজসিচ বেদনারস্কি

এটি সিএসএস 3 এর অংশ হওয়া উচিত ... যদি আমি এটি সম্পর্কে চিন্তা করি - আমি W3C ঘৃণা করি: D
m93a

17
আপনার সকলের box-shadowজীবনে একটি প্রয়োজন ..
মুহাম্মদ উমর

উত্তর:


538

পুরানো প্রশ্ন এখন, তবে এটি একই ধরণের সমস্যার কারও পক্ষে প্রাসঙ্গিক হতে পারে। আমার বৃত্তাকার সহ একটি ইনপুট ক্ষেত্র ছিল borderএবং ফোকাসের রূপরেখার রঙ পরিবর্তন করতে চেয়েছিল। আমি outlineইনপুট নিয়ন্ত্রণে হররাইড স্কোয়ারকে নিয়ন্ত্রণ করতে পারি না ।

সুতরাং পরিবর্তে, আমি বাক্স-ছায়া ব্যবহার করেছি। আমি প্রকৃতপক্ষে ছায়ার মসৃণ চেহারাটিকে প্রাধান্য দিয়েছি, তবে বৃত্তাকার রূপরেখা অনুকরণে ছায়াকে শক্ত করা যেতে পারে:

 /* Smooth outline with box-shadow: */
    .text1:focus {
        box-shadow: 0 0 3pt 2pt red;
    }

    /* Hard "outline" with box-shadow: */
    .text2:focus {
        box-shadow: 0 0 0 2pt red;
    }
<input type=text class="text1"> 
<br>
<br>
<br>
<br>
<input type=text class="text2">


24
আইএমও, আপনি যে উত্তরটি খুঁজছেন এটি এটি is আমি এই পদ্ধতিটি করে ফেলেছি তবে আপনার রূপরেখা 0 এ পরিণত করার বিষয়টি উপেক্ষা করবেন না
জন মর্টন

2
এটি ঠিক আমি যা খুঁজছিলাম, এবং এটি একটি বাহ্যরেখা ব্যাসার্ধের চেয়ে আরও ভাল ফিট করে।
জেনেক্সার

2
কঠোর রূপরেখার উদাহরণটি কাজ করে না। এটি কোনও কোণার ব্যাসার্ধ ব্যতীত কেবল একটি আয়তক্ষেত্র।
এরিক অাইনার

1
outline: 0ওয়েব অ্যাক্সেসযোগ্যতা ভঙ্গ করে; পড়া outlinenone.com
ianstarz

4
@ আইয়ানস্টারজ, আপনি কোনও বিকল্প স্টাইলিং সরবরাহ না করলে এটি অ্যাক্সেসযোগ্যতা ভঙ্গ করে। box-shadowবিকল্প স্টাইলিং (যা এখানে উপস্থাপন করা হয়েছে, বাস্তবে যেমন উপস্থিত তেমন মিল রয়েছে outline)।
এসিজে

84

আমি সাধারণত: সিউডো-এলিমেন্টের সাহায্যে এটি সম্পাদন করি:

অবশ্যই এটি ব্যবহারের উপর নির্ভর করে, এই পদ্ধতিটি শক্ত ছায়া পদ্ধতি ব্যবহার না করে পৃথক সীমান্তগুলিতে নিয়ন্ত্রণের অনুমতি দেয়।

আপনি -1px অফসেট সেট করে আবারও আলাদা প্রভাবের জন্য ব্যাকগ্রাউন্ড লিনিয়ার গ্রেডিয়েন্ট (কোনও সীমানা নয়) ব্যবহার করতে পারেন।

body {
  margin: 20px;
}

a {
  background: #999;
  padding: 10px 20px;
  border-radius: 5px;
  text-decoration: none;
  color: #fff;
  position: relative;
  border: 2px solid #000;
}

a:after {
  content: '';
  display: block;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  border-radius: 5px;
  border: 2px solid #ccc;
}
<a href="#">Button</a>


3
একটি পরিবর্তিত এবং আরও কিছু দর্শনীয় সংস্করণ: jsfiddle.net/rh6j3cdm
ডেভিড হোর্ভাথ

2
কোনও ইনপুট ক্ষেত্রের
সিউডোর

ধন্যবাদ, এটি প্রতিক্রিয়া অনুসারে বাছাইযোগ্য - গাছের অনুসন্ধানের প্রশ্নের সাথে মিলিয়ে খুব ভাল কাজ করেছে!
রাজা ওয়াদিয়া

আমি এই সমাধানটি পছন্দ করি কারণ এটি box-shadowসংস্করণটির চেয়ে অনেক বেশি নমনীয় । উদাহরণস্বরূপ, আপনি যদি "আউটলাইন" উপাদান থেকে দূরে রাখতে চান (অর্থাত্ সিমুলেটিং outline-offset) এই কৌশলটি দিয়ে এটি সম্ভব হয়।
কার্ক ওল

34

উপরের লেয়া হেইসের মতো, তবে আমি এটি কীভাবে করেছি তা এখানে:

div {
  background: #999;
  height: 100px;
  width: 200px;
  border: #999 solid 1px;
  border-radius: 10px;
  margin: 15px;
  box-shadow: 0px 0px 0px 1px #fff inset;
}
<div></div>

ডিআইভি বা জিকিউরির কোনও নেস্টিংয়ের প্রয়োজন নেই, ব্রেভিটিয়ের জন্য অ্যালথো আমি সিএসএসের কয়েকটি-মোজ এবং-ওয়েবেকিট রূপগুলি ছেড়ে দিয়েছি। আপনি উপরের ফলাফলটি দেখতে পারেন


6
তিনি সীমান্ত নয়, আউটলাইন নিয়ে কথা বলছেন ... "রূপরেখা" ব্যাসার্ধ
অ্যান্ড্রয়েড.নিক

5
সঠিক, তবে যেহেতু বাহ্যরেখা-ব্যাসার্ধ পাওয়া যায় না, তাই আমার পদ্ধতিটি একটি সীমানার উপস্থিতি এবং একটি বাহ্যরেখা দেয়। এটি একটি ভিজ্যুয়াল এফেক্ট, সুতরাং যতক্ষণ না মার্কের ডিজাইনটি ডাউন-টু-দ্য পিক্সেলকে নির্দিষ্ট না করা হয়, এটি প্রকৃতপক্ষে বাহ্যরেখা সম্পত্তিটি ব্যবহার করে না এ বিষয়টি কোনও পার্থক্য করে না। এবং যেহেতু এটি একটি বাস্তব সমাধান, তাই আমি ভোটটি ফিরে প্রশংসা করব
হেরাল্ডমোনকি

2
এটি দুর্দান্ত কাজ করেছে। আমি insetযদিও ব্যবহার করিনি , এবং যা চেয়েছিলাম তা পেয়েছি।
পল শ্রায়বার

18

আমি বুটস্ট্র্যাপ নববারে ড্রপডাউন মেনুগুলির জন্য কিছু সুন্দর ফোকাস অ্যাক্সেসযোগ্যতা চেয়েছিলাম এবং এতে খুশি হয়েছি:

     a.dropdown-toggle:focus {
         display: inline-block;
         box-shadow: 0 0 0 2px #88b8ff;
         border-radius: 2px;
     }
<a href="https://stackoverflow.com" class="dropdown-toggle">Visit Stackoverflow</a>


16

আপনি এই জাতীয় কিছু খুঁজছেন , আমি মনে করি।

div {
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
    border: 1px solid black;
    background-color: #CCC;
    height: 100px;
    width: 160px;
}

সম্পাদন করা

কেবলমাত্র ফায়ারফক্স রয়েছে -moz-outline-radiusসঠিকভাবে, তবে এটি আইই / ক্রোম / সাফারি / অপেরা / ইত্যাদিতে কাজ করবে না। সুতরাং, এটি দেখতে সর্বাধিক ক্রস-ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ উপায় * একটি সীমানার চারপাশে বাঁকা লাইন পাওয়ার জন্য একটি মোড়কের ডিভি ব্যবহার করা:

div.inner {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  border: 1px solid black;
  background-color: #CCC;
  height: 100px;
  width: 160px;
}

div.outer {
  display: inline-block;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  border-radius: 10px;
  border: 1px solid red;
}
<div class="outer">
  <div class="inner"></div>
</div>


* ছবি ব্যবহার থেকে দূরে


20
না, আমি জানি কীভাবে সীমানা ব্যাসার্ধটি পেতে পারি যদি আপনি একটি আউটলাইন-রেডিয়াস পেতে পারি তবে আমি ঘুরছিলাম
মার্ক গেরিন

মানে ঠিক কী? একটি ঘন রূপরেখা, এই মত? jsfiddle.net/mattball/NXZFv/1
ম্যাট বল

10
@ ম্যাট: স্পষ্টতই, একটি সীমানার পরিবর্তে একটি বাঁকানো রূপরেখাW3.org/TR/CSS21/ui.html#dynamic- আউটলাইন দেখুন
জোয়

আমি 20px সীমানা-ব্যাসার্ধের সাথে 2px গ্রে বর্ডার সহ একটি ডিভ বক্স পেয়েছি, আমি তখন ঘুরে বেড়াচ্ছিলাম যদি আমি সেই বর্ডারের চারপাশে 10px আউটাইন পেতে পারি যা বর্গক্ষেত্রের পরিবর্তে সীমানা অনুসরণ করে।
মার্ক গেরিন

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

7

আমি এটির জন্য সবেমাত্র একটি দুর্দান্ত সমাধান খুঁজে পেয়েছি এবং এখন পর্যন্ত সমস্ত প্রতিক্রিয়াগুলি দেখার পরেও এটি এখনও পোস্ট হতে দেখিনি। সুতরাং, আমি যা করেছি তা এখানে:

আমি ক্লাসের জন্য একটি সিএসএস বিধি তৈরি করেছি এবং এর ছদ্ম-শ্রেণীর ব্যবহার করেছি: সেই নিয়মের জন্য ফোকাস করুন। আমি outline: noneসেই ডিফল্ট হালকা-নীল অ-সীমানা-ব্যাসার্ধ-সক্ষম 'আউটলাইন' থেকে মুক্তি পেতে প্রস্তুত করেছি যা ক্রোম ডিফল্টরূপে ব্যবহার করে। তারপরে, একই :focusছদ্ম-শ্রেণিতে, যেখানে সেই রূপরেখাটি আর বিদ্যমান নেই, আমি আমার ব্যাসার্ধ এবং সীমান্তের বৈশিষ্ট্য যুক্ত করেছি। নীচের দিকে এগিয়ে

outline: none;
border-radius: 5px;
border: 2px solid maroon;

সীমানা ব্যাসার্ধের সাথে মেরুন রঙের একটি রূপরেখা রয়েছে যা ব্যবহারকারী যখন উপাদানটি ট্যাব-নির্বাচিত করবেন তখন উপস্থিত হবে।


"আউটলাইন: 0", বা "আউটলাইন: কিছুই নয়" ব্যবহার করা খারাপ অভ্যাস হিসাবে বিবেচিত হয় এবং ব্যবহারকারীর অ্যাক্সেসযোগ্যতায় গোলযোগ। এই মুহুর্তে, আমার কোনও সমাধান নেই, তবে কেন সম্ভব হলে আপনার রূপরেখাটি সরিয়ে নেওয়া উচিত নয় এবং আপনাকে অবশ্যই করা উচিত তবে কী করবেন সে সম্পর্কে এখানে একটি নিবন্ধ রয়েছে। সিএসএসের রূপরেখা কখনই সরিয়ে
ফেলবেন না


5

আপনি যদি একটি এমবসড চেহারা পেতে চান তবে নীচের মতো কিছু করতে পারেন:

.embossed {
  background: #e5e5e5;
  height: 100px;
  width: 200px;
  border: #FFFFFF solid 1px;
  outline: #d0d0d0 solid 1px;
  margin: 15px;
}

.border-radius {
  border-radius: 20px 20px 20px 20px;
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  -khtml-border-radius: 20px;
}

.outline-radius {
  -moz-outline-radius: 21px;
}
<div class="embossed"></div>
<div class="embossed border-radius"></div>
<div class="embossed border-radius outline-radius">-MOZ ONLY</div>

অন্যান্য ব্রাউজারগুলিতে এই কাজটি করার জন্য আমি কোনও কাজ খুঁজে পাইনি।

সম্পাদনা করুন: আপনি কেবলমাত্র অন্য উপায়টিই করতে পারেন বাক্স-ছায়া ব্যবহার করা, তবে তারপরে যদি আপনার ইতিমধ্যে সেই উপাদানটিতে একটি বাক্স ছায়া থাকে তবে এটি কাজ করবে না।


1
আপনি একই উপাদানগুলিতে কমা দ্বারা আলাদা করে একাধিক ছায়া ব্যবহার করতে পারেন।
বঙ্গশ

2

সীমা ছাড়াই আপনার যদি কেবল রূপরেখা প্রয়োজন হয় তবে সমাধান রয়েছে the এটা আমার না. আমি বুটস্ট্র্যাপ সিএসএস ফাইল থেকে পেয়েছি যদি। যদি আপনি নির্দিষ্ট করেন তবে outline: 1px auto certain_colorনির্দিষ্ট রঙের ডিভের চারপাশে আপনি পাতলা বাইরের লাইন পাবেন। এই ক্ষেত্রে নির্দিষ্ট প্রস্থের কোনও ব্যাপার নেই, আপনি যদি 10 পিক্স প্রস্থ নির্দিষ্ট করে থাকেন তবে তা পাতলা রেখা হবে। উল্লিখিত নিয়মে মূল শব্দটি হ'ল "অটো"।
আপনার যদি গোলাকার কোণ এবং নির্দিষ্ট প্রস্থের সাথে রূপরেখা প্রয়োজন হয় তবে আপনি প্রয়োজনীয় প্রস্থ এবং একই রঙের সীমানায় সিএসএস বিধি যুক্ত করতে পারেন। এটি রূপরেখা আরও ঘন করে তোলে।


2

আমি যতদূর জানি, Outline radiusকেবলমাত্র অ্যান্ড্রয়েডের জন্য ফায়ারফক্স এবং ফায়ারফক্স সমর্থন করে।

-moz-outline-radius: 1em;

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


1

নং সীমানা উপাদানটির বাইরের দিকে এবং বাক্স-মডেল মার্জিন অঞ্চলের অভ্যন্তরে বসে। রূপরেখাগুলি উপাদানটির অভ্যন্তরে বসে এবং বাক্স-মডেল প্যাডিং অঞ্চল এটিকে উপেক্ষা করে। এটি নান্দনিকতার জন্য নয় for এটি কেবল ডিজাইনারের উপাদানগুলির রূপরেখা দেখানোর জন্য। উদাহরণস্বরূপ, এইচটিএমএল ডকুমেন্ট তৈরির প্রাথমিক পর্যায়ে, কোনও বিকাশকারীকে যদি কঙ্কালের সমস্ত ডিভগুলি সঠিক জায়গায় রেখে দেয় তবে দ্রুত তা সনাক্ত করা দরকার। পরে তাদের বিভিন্ন বোতাম এবং ফর্মগুলি একে অপরের থেকে পৃথক পিক্সেলের সঠিক সংখ্যা কিনা তা খতিয়ে দেখার প্রয়োজন হতে পারে।

সীমানা প্রকৃতির নান্দনিক হয়। রূপরেখাগুলির বিপরীতে এগুলি আসলে বাক্স-মডেল থেকে পৃথক, যার অর্থ তারা প্রান্তকে প্রান্তরে সেট করে ওভারল্যাপ করে না: 0; এবং সীমানার প্রতিটি পাশ পৃথকভাবে স্টাইল করা যেতে পারে।

আপনি যদি রূপরেখার জন্য কোন কোণার ব্যাসার্ধ প্রয়োগ করার চেষ্টা করছেন তবে আমি ধরে নিই যে আপনি বেশিরভাগ লোকেরা যেভাবে সীমান্ত ব্যবহার করেন সেভাবে আপনি এটি ব্যবহার করছেন। সুতরাং আপনি যদি আমাকে জিজ্ঞাসা করতে আপত্তি করেন না, সীমার বাইরে কোন রূপরেখার সম্পত্তি এটি আকাঙ্ক্ষিত করে?



ওয়েল ব্রাউজারগুলি ডিফল্টরূপে এগুলির জন্য সেগুলি ব্যবহার করে। তবে আমি আমার ডিভগুলি কোথায় রয়েছে তা দেখতে সর্বদা তাদের ব্যবহার করেছি এবং দুর্দান্ত প্রভাব ফেলছি।
Musixauce3000

+1 উল্লেখ করার জন্য যে "সীমানা উপাদানটির বাইরের অংশে এবং বাক্স-মডেল মার্জিন অঞ্চলের অভ্যন্তরে বসে।
জ্যাকস

1

বক্স ছায়া এবং আউটলাইন একত্রিত করা।

লেয়া হেইসের উত্তরে আমি একটি সামান্য মোচড় পেয়েছি

input[type=text]:focus {
    box-shadow: 0 0 0 1pt red;
    outline-width: 1px;
    outline-color: red;
}

একটি সত্যিই সুন্দর পরিষ্কার সমাপ্তি পায়। সীমানা-ব্যাসার্ধ ব্যবহার করার সময় আপনি যে আকারে লাফাই পাবেন না


1

অন্যরা যেমন বলেছে, কেবল ফায়ারফক্স এটি সমর্থন করে। এখানে একই কাজ যা একই কাজ করে এবং ড্যাশযুক্ত রূপরেখার সাথেও কাজ করে।

উদাহরণ

.has-outline {
    display: inline-block;
    background: #51ab9f;
    border-radius: 10px;
    padding: 5px;
    position: relative;
}
.has-outline:after {
  border-radius: 10px;
  padding: 5px;
  border: 2px dashed #9dd5cf;
  position: absolute;
  content: '';
  top: -2px;
  left: -2px;
  bottom: -2px;
  right: -2px;
}
<div class="has-outline">
  I can haz outline
</div>


0

সীমান্তের জন্য প্যাডিং এবং একটি পটভূমি রঙ ব্যবহার করার চেষ্টা করুন, তারপরে বাহ্যরেখার জন্য একটি সীমানা:

.round_outline {
  padding: 8px;
  background-color: white;
  border-radius: 50%;
  border: 1px solid black;
}

আমার ক্ষেত্রে কাজ করেছে।


0

আমি স্রেফ রূপরেখা নির্ধারণ করেছি।

input[type=text] {
  outline: rgba(0, 0, 0, 0);
  border-radius: 10px;
}

input[type=text]:focus {    
  border-color: #0079ff;
}

0

আমি এইভাবে পছন্দ করি।

.circle:before {
   content: "";
   width: 14px;
   height: 14px;
   border: 3px solid #fff;
   background-color: #ced4da;
   border-radius: 7px;
   display: inline-block;
   margin-bottom: -2px;
   margin-right: 7px;
   box-shadow: 0px 0px 0px 1px #ced4da;
}

এটি এর চারপাশে বুদ্ধি সীমানা সহ ধূসর বৃত্ত তৈরি করবে এবং আবার সীমানার চারপাশে 1px হবে!


0
clip-path: circle(100px at center);

এটি প্রকৃতপক্ষে কেবল ক্লিকযোগ্যযোগ্য বৃত্ত তৈরি করবে, যখন সীমানা ব্যাসার্ধটি এখনও একটি বর্গাকার করে, তবে এটি বৃত্ত হিসাবে দেখায়।


0

প্রাথমিক প্রশ্নের সহজ উত্তর হ'ল না। একমাত্র ক্রস ব্রাউজার বিকল্পটি হ্যাক তৈরি করা যা আপনি যা চান তা পূরণ করে। প্রাক-বিদ্যমান সামগ্রীর স্টাইলিংয়ের ক্ষেত্রে এই পদ্ধতির সাথে এটি কয়েকটি সম্ভাব্য সমস্যা বহন করে , তবে এটি অন্যান্য অনেকগুলি সমাধানের চেয়ে বাহ্যরেখার (অফসেট, প্রস্থ, লাইন শৈলী) আরও কাস্টমাইজেশনের জন্য সরবরাহ করে।

একটি বেসিক স্তরে, নিম্নলিখিত স্থির উদাহরণ বিবেচনা করুন (ডেমো জন্য স্নিপেইণ্ট চালান):

.outline {
    border: 2px dotted transparent;
    border-radius: 5px;
    display: inline-block;
    padding: 2px;
    margin: -4px;
}

/* :focus-within does not work in Edge or IE */
.outline:focus-within, .outline.edge {
    border-color: blue;
}

br {
    margin-bottom: 0.75rem;
}
<h3>Javascript-Free Demo</h3>
<div class="outline edge"><input type="text" placeholder="I always have an outline"/></div><br><div class="outline"><input type="text" placeholder="I have an outline when focused"/></div> *<i>Doesn't work in Edge or IE</i><br><input type="text" placeholder="I have never have an outline" />
<p>Note that the outline does not increase the spacing between the outlined input and other elements around it. The margin (-4px) compensates for the space that the outlines padding (-2px) and width (2px) take up, a total of 4px.</p>

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

h3 {
  margin: 0;
}

div {
  box-sizing: border-box;
}

.flex {
  display: flex;
}

.clickable {
  cursor: pointer;
}

.box {
  background: red;
  border: 1px solid black;
  border-radius: 10px;
  height: 5rem;
  display: flex;
  align-items: center;
  text-align: center;
  color: white;
  font-weight: bold;
  padding: 0.5rem;
  margin: 1rem;
}
<h3>Javascript-Enabled Demo</h3>
<div class="flex">
  <div class="box outline-me">I'm outlined because I contain<br>the "outline-me" class</div>
  <div class="box clickable">Click me to toggle outline</div>
</div>
<hr>
<input type="text" placeholder="I'm outlined when focused" />

<script>
// Called on an element to wrap with an outline and passed a styleObject
// the styleObject can contain the following outline properties:
// 		style, width, color, offset, radius, bottomLeftRadius,
//		bottomRightRadius, topLeftRadius, topRightRadius
// It then creates a new div with the properties specified and 
// moves the calling element into the div
// The newly created wrapper div receives the class "simulated-outline"
Element.prototype.addOutline = function (styleObject, hideOutline = true) {
    var element = this;

    // create a div for simulating an outline
    var outline = document.createElement('div');

    // initialize css formatting
    var css = 'display:inline-block;';

    // transfer any element margin to the outline div
    var margins = ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'];
    var marginPropertyNames = { 
        marginTop: 'margin-top',
        marginBottom: 'margin-bottom',
        marginLeft: 'margin-left',
        marginRight: 'margin-right'
    }
    var outlineWidth = Number.parseInt(styleObject.width);
    var outlineOffset = Number.parseInt(styleObject.offset);
    for (var i = 0; i < margins.length; ++i) {
        var computedMargin = Number.parseInt(getComputedStyle(element)[margins[i]]);
        var margin = computedMargin - outlineWidth - outlineOffset;
        css += marginPropertyNames[margins[i]] + ":" + margin + "px;";
    }
    element.style.cssText += 'margin:0px !important;';
    
    // compute css border style for the outline div
    var keys = Object.keys(styleObject);
    for (var i = 0; i < keys.length; ++i) {
        var key = keys[i];
        var value = styleObject[key];
        switch (key) {
            case 'style':
                var property = 'border-style';
                break;
            case 'width':
                var property = 'border-width';
                break;
            case 'color':
                var property = 'border-color';
                break;
            case 'offset':
                var property = 'padding';
                break;
            case 'radius':
                var property = 'border-radius';
                break;
            case 'bottomLeftRadius':
                var property = 'border-bottom-left-radius';
                break;
            case 'bottomRightRadius':
                var property = 'border-bottom-right-radius';
                break;
            case 'topLeftRadius':
                var property = 'border-top-left-radius-style';
                break;
            case 'topRightRadius':
                var property = 'border-top-right-radius';
                break;
        }
        css += property + ":" + value + ';';
    }
    
    // apply the computed css to the outline div
    outline.style.cssText = css;
    
    // add a class in case we want to do something with elements
    // receiving a simulated outline
    outline.classList.add('simulated-outline');
    
    // place the element inside the outline div
    var parent = element.parentElement;
    parent.insertBefore(outline, element);
    outline.appendChild(element);

    // determine whether outline should be hidden by default or not
    if (hideOutline) element.hideOutline();
}

Element.prototype.showOutline = function () {
    var element = this;
    // get a reference to the outline element that wraps this element
    var outline = element.getOutline();
    // show the outline if one exists
    if (outline) outline.classList.remove('hide-outline');
}


Element.prototype.hideOutline = function () {
    var element = this;
    // get a reference to the outline element that wraps this element
    var outline = element.getOutline();
    // hide the outline if one exists
    if (outline) outline.classList.add('hide-outline');
}

// Determines if this element has an outline. If it does, it returns the outline
// element. If it doesn't have one, return null.
Element.prototype.getOutline = function() {
    var element = this;
    var parent = element.parentElement;
    return (parent.classList.contains('simulated-outline')) ? parent : null;
}

// Determines the visiblity status of the outline, returning true if the outline is
// visible and false if it is not. If the element has no outline, null is returned.
Element.prototype.outlineStatus = function() {
    var element = this;
    var outline = element.getOutline();
    if (outline === null) {
        return null;
    } else {
        return !outline.classList.contains('hide-outline');
    }
}

// this embeds a style element in the document head for handling outline visibility
var embeddedStyle = document.querySelector('#outline-styles');
if (!embeddedStyle) {
    var style = document.createElement('style');
    style.innerText = `
        .simulated-outline.hide-outline {
            border-color: transparent !important;
        }
    `;
    document.head.append(style);
}


/*########################## example usage ##########################*/

// add outline to all elements with "outline-me" class
var outlineMeStyle = {
    style: 'dashed',
    width: '3px',
    color: 'blue',
    offset: '2px',
    radius: '5px'
};
document.querySelectorAll('.outline-me').forEach((element)=>{
  element.addOutline(outlineMeStyle, false);
});


// make clickable divs get outlines
var outlineStyle = {
    style: 'double',
    width: '4px',
    offset: '3px',
    color: 'red',
    radius: '10px'
};
document.querySelectorAll('.clickable').forEach((element)=>{
    element.addOutline(outlineStyle);
    element.addEventListener('click', (evt)=>{
        var element = evt.target;
        (element.outlineStatus()) ? element.hideOutline() : element.showOutline();
    });
});


// configure inputs to only have outline on focus
document.querySelectorAll('input').forEach((input)=>{
    var outlineStyle = {
        width: '2px',
        offset: '2px',
        color: 'black',
        style: 'dotted',
        radius: '10px'
    }
    input.addOutline(outlineStyle);
    input.addEventListener('focus', (evt)=>{
        var input = evt.target;
        input.showOutline();
    });
    input.addEventListener('blur', (evt)=>{
        var input = evt.target;
        input.hideOutline();
    });
});
</script>

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.