Klient chce mieć dwa kolorowe obramowania, aby uzyskać efekt wytłaczania. Czy mogę to zrobić na jednym elemencie? Miałem nadzieję, że uniknę łączenia dwóch elementów DOM z osobnymi ramkami.
Odpowiedzi:
Tak: skorzystaj z outline
nieruchomości; działa jak druga granica poza twoją granicą. Uważaj jednak, może wchodzić w interakcje w dziwny sposób z marginesami, wyściółkami i cieniami. W niektórych przeglądarkach może być również konieczne użycie prefiksu specyficznego dla przeglądarki; aby upewnić się, że odbierze go: -webkit-outline
i tym podobne (chociaż WebKit w szczególności tego nie wymaga).
Może to być również przydatne w przypadku, gdy chcesz wyrzucić kontur dla niektórych przeglądarek (na przykład, jeśli chcesz połączyć kontur z cieniem; w WebKit kontur znajduje się wewnątrz cienia; w FireFox jest to na zewnątrz, więc -moz-outline: 0
przydaje się, aby upewnić się, że nie otrzymasz wyraźnej linii wokół pięknego cienia CSS).
.someclass {
border: 1px solid blue;
outline: 1px solid darkblue;
}
Edycja: Niektórzy ludzie zauważyli, że outline
nie współgra dobrze z IE <8. Chociaż to prawda; obsługa IE <8 naprawdę nie jest czymś, co powinieneś robić.
outline
istnieje od CSS2.
To jest bardzo możliwe. Wystarczy trochę sztuczek CSS!
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>
Czy tego szukasz?
border-radius
, spróbuj zmniejszyć promień wewnętrznej granicy o jeden piksel, co sprawi, że przerwa między dwoma zaokrąglonymi krawędziami będzie prawie niezauważalna.
bottom:1px
raczej niż height:100%
działało lepiej dla mnie tylko dla dolnej granicy :)
Innym sposobem jest użycie 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>
Zobacz przykład tutaj.
Czy wypróbowałeś różne style obramowania dostępne w specyfikacji CSS? Istnieją już dwa style obramowania, które mogą zaspokoić Twoje potrzeby:
border-style: ridge;
Lub
border-style: groove;
Kontur jest dobry, ale tylko wtedy, gdy chcesz, aby granica była dookoła.
Powiedzmy, że jeśli chcesz zrobić to tylko na dole lub na górze, możesz użyć
<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>
A na dole:
<style>
#border-bottom {
border-top: 1px solid #ccc;
box-shadow: 0 1px 0 #fff;
}
</style>
<p id="border-bottom">This is my content</p>
Mam nadzieję, że to pomoże.
Zamiast używać nieobsługiwanego i problematycznego konspektu, po prostu użyj
Przykład:
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) :
Jeśli przez „wytłaczanie” masz na myśli dwie obramowania wokół siebie w dwóch różnych kolorach, istnieje outline
właściwość ( outline-left
, outline-right
....), ale jest ona słabo obsługiwana w rodzinie IE (a mianowicie, IE6 i 7 w ogóle jej nie obsługują ). Jeśli potrzebujesz dwóch obramowań, rzeczywiście najlepszy byłby drugi element opakowania.
Jeśli masz na myśli użycie dwóch kolorów w tej samej ramce. Użyj np
border-right: 1px white solid;
border-left: 1px black solid;
border-top: 1px black solid;
border-bottom: 1px white solid;
istnieją specjalne border-styles
do tego jak dobrze ( ridge
, outset
i inset
), ale mają tendencję do zmieniania różnych przeglądarkach w moim doświadczeniu.
border : black white;
co oznacza zdefiniowanie dwóch różnych kolorów dla jednej ramki, która wygląda sekwencyjnie w tym samym czasie.
outline
ale nie będzie działać dobrze w IE <8
Nie jest możliwe, ale należy sprawdzić, czy border-style
wartości podoba inset
, outset
czy jakiś inny, realizowane żądany efekt .. ( Wątpię jednak .. )
CSS3 ma właściwości border-image , ale nie wiem jeszcze o obsłudze przeglądarek (więcej informacji na http://www.css3.info/preview/border-image/ ).
Po prostu napisz
style="border:medium double;"
dla tagu html
Możesz użyć
<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>