İki renkli kenarlık


99

Müşteri, kabartmalı bir görünüm için iki renkli kenarlık istiyor. Bunu tek bir unsurda yapabilir miyim? İki DOM öğesini ayrı sınırlarla istiflemekten kaçınmayı umuyordum.


Etkiyi elde etmek için Javascript kullanmak istiyor musunuz? jquery.malsup.com/corner
nopuck4you

Yanıtlar:


142

Evet: outlineMülkü kullanın ; sınırınızın dışında ikinci bir sınır görevi görür. Dikkatli olun, tho ', kenar boşlukları, dolgular ve alt gölgelerle riskli bir şekilde etkileşime girebilir. Bazı tarayıcılarda, tarayıcıya özgü bir önek de kullanmanız gerekebilir; onu yakaladığından emin olmak için: -webkit-outlineve benzeri (özellikle WebKit bunu gerektirmese de).

Bu, belirli tarayıcılar için ana hatları atlamak istediğinizde de yararlı olabilir (örneğin, ana hatları bir alt gölgeyle birleştirmek istiyorsanız; WebKit'te anahat gölgenin içindedir; FireFox'ta dışarıda, bu nedenle -moz-outline: 0güzel CSS alt gölgenizin etrafında düzensiz bir çizgi oluşmadığından emin olmak için kullanışlıdır).

.someclass {
  border: 1px solid blue;
  outline: 1px solid darkblue;
}

Düzenleme: Bazı insanlar outlineIE <8 ile pek uyuşmadığını belirtmişlerdir . Bu doğru olsa da; IE <8'i desteklemek gerçekten yapmanız gereken bir şey değil.


27
"IE <8'i desteklemek gerçekten yapmanız gereken bir şey değil" için -1. IE6'yı desteklememek iyi olabilir. Ancak IE7'yi desteklememek saçma, teknik olmayan bir izleyici kitlesi olan hiçbir site bunu karşılayamaz
Pekka

6
outlineCSS2'den beri var.
BoltClock

157
IE 7'yi desteklemediği için +1, sitenizin IE 7'de her zaman çalışması ve makul derecede iyi görünmesi gerekirken, tam destek gerekli değildir. özellikle sadece iki renkli bir kenarlıksa. kişisel olarak kutu gölgesi ve diğer 'gelişmiş' özellikleri kullanıyorum. IE7 bir kutu gölgesi göremiyor, ... önemli. IE7'nin tuhaflıklarından kaçınmak için daha az uygun, aşırı karmaşık ve hatta modası geçmiş bir çözümü kullanmak için hiçbir neden yoktur.
Marian Theisen

2
: Ayrıca, tasarım amaçları için anahat özelliğini kesmek için değil iyi erişilebilirlik nedenlerle bu başvurusuna bakın outlinenone.com
Joel Glovier

11
Bir uyarı kelimesi outline, daha az çok yönlüdür border. W3C özellikle şunu söylüyor : "Not. Dış hat her tarafta aynıdır. Kenarlıkların tersine, " üst anahat "veya" sol anahat "özelliği yoktur ." (Vurgu benim.)
Bob Stein

70

Bu çok mümkün. Sadece biraz CSS hilesi gerekiyor!

div.border {
  border: 1px solid #000;
  position: relative;
}

div.border:before {
  position: absolute;
  display: block;
  content: '';
  border: 1px solid red;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
<div class="border">Hi I have two border colors<br />I am also Fluid</div>

Aradığınız şey bu mu?


Gerçekten de aldatıcı, ancak zarif bir şekilde düşüyor ve hatta HTC'nin hisse senedi tarayıcısında (Android) çalışıyor! Eğer kullanırsanız border-radius, iki yuvarlak sınırları arasındaki boşluk neredeyse unnoticable yapacak, bir piksel iç Kenarlığın yarıçapını azaltmayı deneyin.
grip

Bu güzel. Sadece bir alt sınır için benim için çalışmak bottom:1pxyerine kullanmak daha height:100%iyi :)
Nick

için bir dolgunuz varsa div.border, için aynı boyutlara sahip bir negatif kenar boşluğu eklemenin div.border:before, her şeyi satır içinde tutmaya yardımcı olduğunu gördüm . Belki bunu yapmanın daha iyi bir yolu vardır? jsFiddle
NW Tech

34

Başka bir yol kullanmaktır box-shadow:

#mybox {
box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-moz-box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-webkit-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
}

<div id="mybox">ABC</div>

Buradaki örneğe bakın .


Bunu, anahat yönteminin aksine sınır yarıçapı ile çalıştığı için tercih ediyorum
Johan

18

CSS spesifikasyonunda bulunan farklı kenarlık stillerini denediniz mi? İhtiyaçlarınızı karşılayabilecek halihazırda iki kenar stili vardır:

border-style: ridge;

Veya

border-style: groove;

1
Bu tam olarak ihtiyacım olan şeydi. (IE8'de <fieldset>
düzeltildi

15

Anahat iyidir, ancak yalnızca her yerde sınırı istediğinizde.

Diyelim ki sadece alttan mı yoksa üstten mi yapmak istiyorsanız kullanabilirsiniz

<style>

  #border-top {
  border-top: 1px solid  #ccc;
  box-shadow: inset 0 1px 0 #fff;
}
</style>

<p id="border-top">This is my content</p>

Ve en altta:

<style>

      #border-bottom {
      border-top: 1px solid  #ccc;
      box-shadow: 0 1px 0 #fff;
    }
</style>

    <p id="border-bottom">This is my content</p>

Umarım bu yardımcı olur.


6

Desteklenmeyen ve sorunlu taslağı kullanmak yerine sadece

  • iç kenarlık için arka plan rengi + dolgusu
  • dış kısım için normal sınır.

Misal:

HTML:

<img src="http://cdn3.thumbs.common.smcloud.net/common/8/6/s/863444wpPN.jpg/r-0,500-n-863444wpPN.jpg" alt="malkovich" />

CSS:

img {
    padding: 1px;
    background: yellow;
    border:1px solid black;
}

TEST (JSFiddle) :


İyi çalışır, ancak yalnızca arka planı olan içeriğiniz varsa.
Culme

4

"Kabartma" derken , iki farklı renge sahip birbirinin etrafındaki iki sınırı kastediyorsanız, outlineözellik ( outline-left, outline-right....) vardır, ancak IE ailesinde yeterince desteklenmemektedir (yani, IE6 ve 7 bunu hiç desteklemiyor ). İki kenarlığa ihtiyacınız varsa, ikinci bir sarmalayıcı öğesi gerçekten en iyisidir.

Aynı sınırda iki renk kullanmayı kastediyorsanız. Örneğin kullanın

border-right: 1px white solid;
border-left: 1px black solid;
border-top: 1px black solid;
border-bottom: 1px white solid;

Orada özeldir border-stylesyanı bunun için ( ridge, outsetve inset) ama onlar benim deneyim tarayıcılar arasında farklılık eğilimindedir.


3
Sanırım sorduğu şey border : black white; , aynı anda sıralı görünen bir kenarlık için iki farklı renk tanımlamak gibi bir şey .
Tarık

1
@Braveyard ah, görüyorum. Bunu kullanmak teorik olarak mümkün olabilir, outlineancak IE <8
Pekka

3
Sadece anahat olduğunu unutmayın ... Ne yazık ki anahat-sol, dış-sağ, dış-üst veya alt-alt diye bir şey yoktur.
David Sherret

-1

Değil mümkünse, ancak görmek için kontrol etmelidir border-styledeğerler mi inset, outsetya da başka, istediğiniz etkiyi başarılı .. ( ben gerçi şüpheliyim .. )

CSS3, border-image özelliklerine sahiptir, ancak henüz tarayıcıların desteğini bilmiyorum (daha fazla bilgi http://www.css3.info/preview/border-image/ adresinde ) ..


Hiçbir şey programlama dünyada imkansızdır: P iyi ben bu deyimi her zaman yapmak gibi :)
Tarik

-1

Basitçe yaz

style="border:medium double;"

html etiketi için


1
Bu, aralarında tek renk olan iki sınır verir.
Williham Totland

-1

Kullanabilirsin

<html>
<head>
<title>Two Colors</title>
<style type="text/css">

.two-colors {
background: none repeat scroll 0% 0% rgb(245, 245, 245); border-color: rgba(111,111,111,0.2) transparent;
 padding: 4px; outline: 1px solid green;
}

</style>

<style type="text/css">
      body {
        padding-top: 20px;
        padding-bottom: 40px;
        background-color:yellow;        
      }
    </style>

</head>
<body>
<a target="_blank" href="people.htm">
  <img class="two-colors" src="people.jpg" alt="Klematis" width="213" height="120" />
  </a>

</body>
</html>

-2

Bu hoş bir etki yaratır.

<div style="border: 1px solid gray; padding: 1px">
<div style="border: 1px solid gray">
   internal stuff
</div>
</div>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.