Zwei Farbränder


95

Der Kunde wünscht sich zwei Farbränder für einen geprägten Look. Kann ich das an einem Element tun? Ich hatte gehofft, nicht zwei DOM-Elemente mit einzelnen Rändern zu stapeln.


Sind Sie bereit, Javascript zu verwenden, um den Effekt zu erzielen? jquery.malsup.com/corner
nopuck4you

Antworten:


140

Ja: Verwenden Sie die outlineEigenschaft; Es fungiert als zweite Grenze außerhalb Ihrer Grenze. Achtung, es kann auf wackelige Weise mit Rändern, Polstern und Schlagschatten interagieren. In einigen Browsern müssen Sie möglicherweise auch ein browserspezifisches Präfix verwenden. um sicherzustellen, dass es es aufgreift: -webkit-outlineund dergleichen (obwohl WebKit dies insbesondere nicht benötigt).

Dies kann auch nützlich sein, wenn Sie die Gliederung für bestimmte Browser verwerfen möchten (z. B. wenn Sie die Gliederung mit einem Schlagschatten kombinieren möchten; in WebKit befindet sich die Gliederung innerhalb des Schattens; in FireFox ist dies der Fall Dies -moz-outline: 0ist nützlich, um sicherzustellen, dass Sie keine knorrige Linie um Ihren schönen CSS-Schlagschatten erhalten.

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

Bearbeiten: Einige Leute haben bemerkt, dass outlinemit IE <8 nicht gut zusammenpasst. Während dies wahr ist; IE <8 zu unterstützen, ist wirklich nichts, was Sie tun sollten.


27
-1 für "IE <8 zu unterstützen ist wirklich nichts, was Sie tun sollten". IE6 wird möglicherweise nicht unterstützt. Aber IE7 nicht zu unterstützen ist lächerlich, keine Site mit einem nicht-technischen Publikum kann sich das leisten
Pekka

6
outlinegibt es seit CSS2.
BoltClock

156
+1 für die Nichtunterstützung von IE 7, während Ihre Site in IE 7 immer funktionieren und einigermaßen gut aussehen sollte, ist keine vollständige Unterstützung erforderlich. vor allem, wenn es nur ein zweifarbiger Rand ist. Ich persönlich benutze Box-Shadow und andere 'erweiterte' Funktionen. IE7 kann keinen Kastenschatten sehen, ... große Sache. Es gibt keinen Grund, eine weniger geeignete, übermäßig komplizierte oder sogar veraltete Lösung zu verwenden, um nur die Macken des IE7 zu umgehen.
Marian Theisen

2
Siehe auch diese Referenz für gute Zugänglichkeitsgründe, um die Gliederungseigenschaft NICHT für Entwurfszwecke zu hacken: Outlininenone.com
Joel Glovier

11
Ein Wort der Vorsicht, outlineist weniger vielseitig als border. Insbesondere sagt W3C : "Hinweis. Der Umriss ist auf allen Seiten gleich. Im Gegensatz zu Rändern gibt es keine Eigenschaft " Umriss oben "oder" Umriss links " ." (Hervorhebung von mir.)
Bob Stein

68

Das ist sehr gut möglich. Es dauert nur ein wenig CSS-Trick!

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>

Ist es das, wonach du suchst?


In der Tat ist es schwierig, aber es verschlechtert sich anmutig und funktioniert sogar mit dem Aktienbrowser meines HTC (Android)! Wenn Sie verwenden border-radius, versuchen Sie , den Radius des inneren Randes um ein Pixel zu verringern, damit die Lücke zwischen den beiden abgerundeten Rändern nahezu unbemerkt bleibt.
Grippe

Das ist nett. Verwenden für mich bottom:1pxeher als height:100%besser für nur einen unteren Rand gearbeitet :)
Nick

Wenn Sie eine Polsterung für die haben div.border, habe ich festgestellt, dass das Hinzufügen eines negativen Randes mit den gleichen Abmessungen für die dazu div.border:beforebeigetragen hat, dass alles inline bleibt. Vielleicht gibt es einen besseren Weg, es zu tun? jsFiddle
NW Tech

+1 für die Verwendung von Pseudoelementen. Ich denke, diese Antwort ist besser als die von Williham Totland
Matías Cánepa

Das ist toll! :)
BennKingy

33

Ein anderer Weg ist zu verwenden 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>

Siehe Beispiel hier.


Ich bevorzuge dies, da es im Gegensatz zur
Johan

18

Haben Sie die verschiedenen Rahmenstile ausprobiert, die in der CSS-Spezifikation verfügbar sind? Es gibt bereits zwei Rahmenstile, die Ihren Anforderungen entsprechen könnten:

border-style: ridge;

Oder

border-style: groove;

1
Das war genau das, was ich brauchte. (<Feldsatz> in IE8 korrigieren)
DOOManiac

14

Die Gliederung ist gut, aber nur, wenn Sie die Grenze ringsum haben möchten.

Sagen wir, wenn Sie es nur unten oder oben machen möchten, können Sie es verwenden

<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>

Und für den Boden:

<style>

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

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

Hoffe das hilft.


6

Anstatt nicht unterstützte und problematische Gliederungen zu verwenden, verwenden Sie einfach

  • Hintergrundfarbe + Polsterung für den inneren Rand
  • normaler Rand für den äußeren.

Beispiel:

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) :


Funktioniert gut, aber nur, wenn Sie Inhalte mit Hintergrund haben.
Culme

4

Wenn Sie mit "Prägen" zwei Ränder mit zwei verschiedenen Farben umeinander meinen, gibt es die outlineEigenschaft ( outline-left,outline-right ....), die jedoch in der IE-Familie schlecht unterstützt wird (dh IE6 und 7 unterstützen sie überhaupt nicht) ). Wenn Sie zwei Ränder benötigen, ist ein zweites Wrapper-Element in der Tat am besten.

Wenn Sie zwei Farben am selben Rand verwenden möchten. Verwenden Sie z

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

Auch hierfür gibt es spezielle border-styles( ridge, outsetund inset), die meiner Erfahrung nach jedoch von Browser zu Browser unterschiedlich sind.


3
Ich glaube, was er fragt, ist so etwas wie border : black white; das Definieren von zwei verschiedenen Farben für einen Rand, der gleichzeitig sequentiell aussieht.
Tarik

1
@Braveyard ah, ich verstehe. Das wäre theoretisch möglich, outlineaber es wird nicht gut funktionieren in IE <8
Pekka

3
Beachten Sie, dass es nur Umrisse gibt ... es gibt leider keine Umrisse links, Umrisse rechts, Umrisse oben oder Umrisse unten.
David Sherret

-1

Nicht möglich, aber Sie sollten überprüfen , um zu sehen , ob border-styleWerte wie inset, outsetoder eine andere, erreicht den gewünschten Effekt .. ( obwohl ich bezweifle es .. )

CSS3 hat die Grenzbildeigenschaften, aber ich weiß nicht , über die Unterstützung von Browsern noch (mehr Infos unter http://www.css3.info/preview/border-image/ ) ..


In der Programmierwelt ist nichts unmöglich: P Nun, ich mache diese Aussage gerne die ganze Zeit :)
Tarik

-1

Einfach schreiben

style="border:medium double;"

für das HTML-Tag


1
Das ergibt zwei Ränder mit nur einer Farbe dazwischen.
Williham Totland

-1

Du könntest benutzen

<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

Dies erzeugt einen schönen Effekt.

<div style="border: 1px solid gray; padding: 1px">
<div style="border: 1px solid gray">
   internal stuff
</div>
</div>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.