সিএসএস ত্রিভুজ কাস্টম সীমানার রঙ


114

আমার সিএসএস ত্রিভুজ (সীমান্ত) এর জন্য একটি কাস্টম হেক্স রঙ ব্যবহার করার চেষ্টা করা হচ্ছে। তবে এটি যেহেতু সীমান্তের বৈশিষ্ট্যগুলি ব্যবহার করে আমি কীভাবে এটি করা যায় তা সম্পর্কে নিশ্চিত। আমি কেবল সামঞ্জস্যের কারণে জাভাস্ক্রিপ্ট এবং সিএসএস 3 পরিষ্কার করতে চাই। আমি চেষ্টা করছি যে # CAD5E0 রঙের সাথে ত্রিভুজটির 1px সীমানা (ত্রিভুজের কোণভূমিগুলির চারপাশে) সহ একটি সাদা ব্যাকগ্রাউন্ড রয়েছে। এটা কি সম্ভব? আমার এখন পর্যন্ত যা আছে তা এখানে:

.container {
    margin-left: 15px;
    width: 200px;
    background: #FFFFFF;
    border: 1px solid #CAD5E0;
    padding: 4px;
    position: relative;
    min-height: 200px;
}

.container:after {
    content: '';
    display: block;
    position: absolute;
    top: 10px;
    left: 100%;
    width: 0;
    height: 0;
    border-color: transparent transparent transparent #CAD5E0;
    border-style: solid;
    border-width: 10px;
}​

আমার ফিডল: http://jsfiddle.net/4ZeCz/

উত্তর:


185

আপনাকে আসলে এটি দুটি ত্রিভুজ দিয়ে নকল করতে হবে ....

.container {
    margin: 15px 30px;
    width: 200px;
    background: #fff;
    border: 1px solid #a00;
    position: relative;
    min-height: 200px;
    padding: 20px;
    text-align: center;
    color: #fff;
    font: bold 1.5em/180px Helvetica, sans-serif;
    text-shadow: 0 0 1px #000;
}

.container:after,
.container:before {
    content: '';
    display: block;
    position: absolute;
    left: 100%;
    width: 0;
    height: 0;
    border-style: solid;
}

.container:after {
    top: 10px;
    border-color: transparent transparent transparent #fdd;
    border-width: 10px;
}

.container:before {
    top: 9px;
    border-color: transparent transparent transparent #a00;
    border-width: 11px;
}

এখানে আপডেট আপডেট

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


1
এটা নিখুঁত! ঠিক আমার যা দরকার ছিল ধন্যবাদ.
এডি আর

1
আরে, আমি বুঝতে পারি না যে আমি বাক্সের অন্য দিকে উপস্থিত হওয়ার জন্য কীভাবে ত্রিভুজটি সংশোধন করব (ত্রিভুজ সিএসএস কীভাবে কাজ করে তা আমি বুঝতে পারি না)
কেভিন

1
এসএমআরটি - আপনি এত স্মার্ট!
কোড হুইস্পেরার

5
দ্রষ্টব্য, @ কেভিনের মতো একই প্রশ্নযুক্তদের জন্য। border-colorরঙিন সীমানার উপর নির্ভর করে ত্রিভুজটি বিভিন্ন দিকে নির্দেশ করবে এমন বৈশিষ্ট্যটি দেখুন । উভয় ক্ষেত্রে বাম পরিবর্তনকে নির্দেশ করতে তীরটি পরিবর্তন border-colorকরতে এবংtransparent #e3f5ff transparent transparent;.container:after.container:before
rmagnum2002

1
@ স্কট এর জন্য ধন্যবাদ! আপনার জেএস ফিডল স্পট ছিল! তবে, জেএসফিডেলের বাইরে কপিপাস্ট সম্পর্কে সতর্ক থাকুন, এটি আমার সিএসএস ফাইলে দুটি অদৃশ্য এবং অবৈধ অক্ষর যুক্ত করেছে যা সেই সিএসএস ফাইলে বৈধতা / পার্সিং ত্রুটির কারণ ঘটেছে। একবার আমি অদৃশ্য অক্ষরগুলি মুছে ফেললাম (অক্ষরগুলি শূন্য প্রস্থের, তাই কার্সার তাদের দেখায় নি, তবে আমি ব্যাকস্পেসে সক্ষম হয়েছি) এটি দুর্দান্তভাবে কাজ করেছিল। এটি আপনার কোড নয় যা সমস্যা ছিল, আমি মনে করি জেএস ফিডাল প্রদর্শিত কোডটিতে কিছু রহস্যময় চরিত্রের পরিচয় দিয়েছিল? ডান্নো, তবে আমি কেবল উত্তরসূরির জন্য এটি উল্লেখ করতে চেয়েছিলাম, যদি কেউ একই সমস্যা থেকে আসে।
হাইপারভাইসর

91

আমি জানি আপনি এটি গ্রহণ করেছেন তবে কম সিএসএস সহ এটিও পরীক্ষা করে দেখুন:

.container {
    margin-left: 15px;
    width: 200px;
    background: #FFFFFF;
    border: 1px solid #CAD5E0;
    padding: 4px;
    position: relative;
    min-height: 200px;
}

.container:after {
    content: '';
    display: block;
    position: absolute;
    top: 10px;
    right:-7px;
    width: 10px;
    height: 10px;
    background: #FFFFFF;
    border-right:1px solid #CAD5E0;
    border-bottom:1px solid #CAD5E0;
    -moz-transform:rotate(-45deg);
    -webkit-transform:rotate(-45deg);
}

http://jsfiddle.net/4ZeCz/3/


আরে, আমি বুঝতে পারি না যে আমি বাক্সের অন্য দিকে উপস্থিত হওয়ার জন্য কীভাবে ত্রিভুজটি সংশোধন করব (ত্রিভুজ সিএসএস কীভাবে কাজ করে তা আমি বুঝতে পারি না)
কেভিন

2
@ কেভিন আমি এটি তৈরি করি দয়া করে jsfiddle.net/4ZeCz/97 দেখুন । আমার ব্যবহৃত বৈশিষ্ট্যগুলি নিয়ে খেলার চেষ্টা করুন এবং আপনার যদি কোনও প্রশ্ন থাকে তবে আপনি আমাকে জিজ্ঞাসা করতে পারেন :)
সন্দীপ

3
একটি ব্যাখ্যা: এটি দুটি সংলগ্ন পাশের সীমানাগুলির সাথে একটি সাধারণ বর্গক্ষেত্র উপাদান তৈরি করে, একটি নগ্ন ত্রিভুজ তৈরি করে। তারপরে বর্গটি 45 ডিগ্রি দিকে কাত হয়ে থাকে, সুতরাং ত্রিভুজটি পয়েন্ট করে (বা যেখানেই আপনি চান)। যাইহোক, আপনার কেবলমাত্র -webkit-এখন (এবং -ms-আই 9 এর জন্য) উপসর্গ প্রয়োজন । অন্যান্য সমস্ত ব্রাউজার এটিকে প্রাক-পূর্বনির্ধারিত সমর্থন করে।
rvighne

খুব চতুর সমাধান! ধন্যবাদ.
সোলহান

3

আমি মনে করি এটি ক্লিপ-পাথটি ব্যবহার করা সহজ :

.container {
  width: 150px;
  min-height: 150px;
  background: #ccc;
  padding: 8px;
  padding-right: 6%;
  display: inline-block;
  clip-path: polygon(0% 0%,0% 100%,90% 100%,90% 5%,100% 10%,90% 15%,90% 0%);
}
<div class="container">
test content
</div>


1

এটি সম্পাদন করার আরেকটি উপায়, বিশেষত এমন কারও পক্ষে যার মতো আমার মতো সমতুল্য বা এমনকি স্কেলেন ত্রিভুজগুলির সাথে কাজ করা প্রয়োজন, filter: drop-shadow(...)একাধিক মান এবং কোনও অস্পষ্ট ব্যাসার্ধ ব্যবহার করা। এর একাধিক উপাদান বা অ্যাক্সেস উভয়ই না করার অতিরিক্ত সুবিধা রয়েছে : আগে এবং পরে (পরে আমি এটিটি সম্পাদন করার চেষ্টা করছিলাম: যে সামগ্রীটি ইনলাইন ছিল, তারপরেও পরম অবস্থানকে এড়াতে চেয়েছিল)।

উপরের ক্ষেত্রে, নিম্নলিখিত: সিএসএস এর মতো দেখতে পাওয়া যাবে ( ফ্রিডল ):

.container {
  margin-left: 15px;
  width: 200px;
  background: #FFFFFF;
  border: 1px solid #CAD5E0;
  padding: 4px;
  position: relative;
  min-height: 200px;
}
.container:after {
  content: '';
  display: block;
  position: absolute;
  top: 10px;
  left: 100%;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 20px 0 40px 15px; /* skewed to show support for non-right-angle triangles */
  border-color: transparent transparent transparent #fff;
  filter: drop-shadow(1px 0 0 #CAD5E0) drop-shadow(0 .5px 0 #CAD5E0);
}
<div class="container">
  Test Container
</div>

আমি মনে করি কিছু সীমাবদ্ধতা বা অদ্ভুততা রয়েছে, যদিও:

  • আইই ১১ এ কোনও সমর্থন নেই (যদিও এফএফ, ক্রোম এবং এজ এ ঠিক আছে)
  • আমি কেন নিশ্চিত না যে উপরের <offset-y>দ্বিতীয় ড্রপ- শ্যাডোতে মানটির জন্য .ppx 1px এর চেয়ে 1px এর মতো আরও প্রদর্শিত হবে, যদিও আমি কল্পনা করি যে এটি ত্রিকোণমিতির সাথে সম্পর্কিত (যদিও কমপক্ষে আমার মনিটরে আমি এর মধ্যে কোনও পার্থক্য দেখি না) প্রকৃত ট্রিগ-ভিত্তিক মান বা .5px বা এমনকি এটির জন্য .1px)
  • 1px এর চেয়েও বড় সীমানা (ভাল, সেইভাবে তাদের চেহারা) ভাল কাজ করছে বলে মনে হয় না। বা কমপক্ষে আমি সমাধানটি খুঁজে পেলাম না, যদিও আরও বড় হওয়ার জন্য নীচের চেয়ে কম-অনুকূলতম উপায়ের জন্য দেখুন। (আমি ভাবি যে <spread-radius>ড্রপ-শ্যাডো এর ডকুমেন্টেড-তবে-অসমর্থিত ৪ র্থ প্যারামিটার ( ) হতে পারে যা আমি সত্যিই একাধিক ফিল্টার মানগুলির পরিবর্তে সন্ধান করছি, তবে এটি সম্পূর্ণরূপে ভাঙা জিনিসগুলিতে যুক্ত করছি)) আপনি এখানে দেখতে পারেন 1px ( ফিজল ) এর বাইরে যাওয়ার সময় ঘটতে শুরু করে :

.container {
  background-color: #eee;
  padding: 1em;
}
.container:after {
  content: "";
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 20.4px 10px 0 10px;
  border-color: yellow transparent transparent transparent;
  margin-left: .25em;
  display: inline-block;
  filter: drop-shadow(-6px -4px 0 green) drop-shadow(6px -4px 0 red) drop-shadow(0 6px 0 blue);
}
<div class="container">
  Test Container
</div>

লক্ষ্য করুন যে প্রথমটি (সবুজ) একবার প্রয়োগ করা হয়েছে তবে দ্বিতীয়টি (লাল) সীমান্ত দিয়ে তৈরি হলুদ ত্রিভুজ পাশাপাশি সবুজ ড্রপ-শেডো () এবং শেষটি (নীল) উভয়ই প্রয়োগ করা হচ্ছে উপরের সমস্ত প্রয়োগ করা হয়। (সম্ভবত এটি .5px উপস্থিত জিনিসের সাথেও সম্পর্কিত)।

তবে আমি অনুমান করি যে আপনি যদি 1px এর চেয়ে আরও বিস্তৃত কিছু দেখতে চান তবে এগুলিকে নীচের মতো ( ফ্রেডল ) এর মতো পরিবর্তন করে আপনি একে অপরের উপরের ড্রপ-ছায়াগুলি বিল্ডিংয়ের সুবিধা নিতে পারবেন :

filter: drop-shadow(0 0 2.5px red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red) drop-shadow(0 0 0 red);

যেখানে প্রথমটির মধ্যে একটি অস্পষ্ট-ব্যাসার্ধ সেট রয়েছে (এই ক্ষেত্রে 2.5px, যদিও ফলাফলটি বহুগুণ প্রদর্শিত হবে), এবং বাকী সমস্তগুলিতে 0 এ অস্পষ্টতা রয়েছে তবে এটি কেবল সমস্ত পক্ষের একই রঙের জন্য কাজ করবে, এবং এর ফলাফল কিছু গোলাকৃতির চেহারার কোণগুলির পাশাপাশি বেশ রুক্ষ প্রান্তগুলিতে আপনি যত বড় যান।


0
.triangle{
    position: absolute;
    width:0px;
    height:0px;
    border-left: 45px solid transparent;
    border-right: 45px solid transparent;
    border-bottom: 72px solid #DB5248;
}

.triangle:after{
    position: relative;
    content:"!";
    top:8px;
    left:-8px;
    color:#DB5248;
    font-size:40px;
}

.triangle:before{
    content:".";
    color: #DB5248;
    position: relative;
    top:-14px;
    left:-43px;
    border-left: 41px solid transparent;
    border-right: 41px solid transparent;
    border-bottom: 67px solid white;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.