Клиент хочет двухцветные рамки для тисненого вида. Могу я сделать это с одним элементом? Я надеялся избежать объединения двух элементов DOM с отдельными границами.
Ответы:
Да: используйте outline
свойство; он действует как вторая граница за пределами вашей границы. Остерегайтесь, хотя он может нестабильно взаимодействовать с полями, отступами и тенями. В некоторых браузерах вам, возможно, также придется использовать префикс для конкретного браузера; чтобы убедиться, что он его уловит: -webkit-outline
и тому подобное (хотя WebKit, в частности, этого не требует).
Это также может быть полезно в случае, когда вы хотите отказаться от контура для определенных браузеров (например, в случае, если вы хотите объединить контур с падающей тенью; в WebKit контур находится внутри тени; в FireFox это снаружи, поэтому -moz-outline: 0
полезно убедиться, что вы не получите корявую линию вокруг красивой тени CSS).
.someclass {
border: 1px solid blue;
outline: 1px solid darkblue;
}
Изменить: некоторые люди отметили, что outline
это не очень хорошо с IE <8. Хотя это правда; поддержка IE <8 на самом деле не то, что вам следует делать.
outline
существует со времен CSS2.
outline
менее универсален, чем border
. В частности, W3C говорит : «Обратите внимание. Контур одинаков со всех сторон. В отличие от границ, здесь нет свойства « outline-top »или« outline-left » . (Акцент мой.)
Это вполне возможно. Требуется небольшая хитрость с 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>
Это то, что вы ищете?
border-radius
, попробуйте уменьшить радиус внутренней границы на один пиксель, это сделает зазор между двумя закругленными границами почти незаметным.
bottom:1px
а не height:100%
работало для меня лучше только для нижней границы :)
Другой способ - использовать 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>
См. Пример здесь.
Вы пробовали разные стили границ, доступные в спецификации CSS? Уже есть два стиля границ, которые могут удовлетворить ваши потребности:
border-style: ridge;
Или
border-style: groove;
Контур хорош, но только тогда, когда вы хотите, чтобы граница была вокруг.
Допустим, если вы хотите сделать это только снизу или сверху, вы можете использовать
<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>
А для низа:
<style>
#border-bottom {
border-top: 1px solid #ccc;
box-shadow: 0 1px 0 #fff;
}
</style>
<p id="border-bottom">This is my content</p>
Надеюсь, это поможет.
Вместо использования неподдерживаемой и проблемной схемы просто используйте
Пример:
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;
}
ТЕСТ (JSFiddle) :
Если под «тиснением» вы имеете в виду две границы вокруг друг друга двумя разными цветами, это outline
свойство есть ( outline-left
, outline-right
....), но оно плохо поддерживается в семействе IE (а именно, IE6 и 7 вообще его не поддерживают. ). Если вам нужны две границы, лучше всего подойдет второй элемент-оболочка.
Если вы имеете в виду использование двух цветов в одной рамке. Используйте, например,
border-right: 1px white solid;
border-left: 1px black solid;
border-top: 1px black solid;
border-bottom: 1px white solid;
border-styles
для этого тоже есть специальные ( ridge
, outset
и inset
), но, по моему опыту, они, как правило, различаются в зависимости от браузера.
border : black white;
что означает определение двух разных цветов для одной границы, которая выглядит последовательно одновременно.
outline
но это не будет работать в IE <8
Не возможно, но вы должны проверить , чтобы увидеть , если border-style
значения нравится inset
, outset
или какой - то другой, достигается эффект , который вы хотите .. ( я сомневаюсь , что , хотя .. )
CSS3 имеет свойства border-image , но я пока не знаю о поддержке браузерами (подробнее см. Http://www.css3.info/preview/border-image/ ).
Просто напишите
style="border:medium double;"
для тега html
Вы могли бы использовать
<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>