Эффект контура к тексту
есть ли в CSS способы придать контуры тексту с разными цветами ? Я хочу выделить некоторые части моего текста, чтобы сделать его более интуитивным - например, имена, ссылки и т. д. Изменение цвета ссылок и т. д. в настоящее время они распространены, поэтому я хочу что-то новое.
11 ответов:
существует экспериментальное свойство webkit под названием
text-strokeв CSS3, я пытался заставить это работать в течение некоторого времени, но пока безуспешно.то, что я сделал вместо этого используется уже поддерживается
text-shadowсвойство (поддерживается в Chrome, Firefox, Opera и IE 9 я считаю).используйте четыре тени для имитации гладкого текста:
HTML:
<div class="strokeme"> This text should have a stroke in some browsers </div>CSS:
.strokeme { color: white; text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; }Я сделал демо для вас здесь
и завис пример -здесь
как Джейсон C упомянул в комментариях,
text-shadowсвойство CSS теперь поддерживается всеми основными браузерами, за исключением Opera Mini. Где это решение будет работать для обратной совместимости (на самом деле не проблема в отношении браузеров, которые автоматически обновляются) я считаю, чтоtext-strokeCSS должен быть использован.
Edit:
text-strokeтеперь довольно зрелая и реализована в большинстве браузеров. Это проще, резче и точнее. Если ваша аудитория браузера может поддерживать его, теперь вы должны использоватьtext-strokeво-первых, вместоtext-shadow.
вы можете и должны сделать, это просто
text-shadowэффект без каких-либо взаимозачетов:.outline { color: #fff; text-shadow: #000 0px 0px 1px; -webkit-font-smoothing: antialiased; }почему? Когда вы компенсируете несколько теневых эффектов, вы начнете замечать неуклюжие, неровные углы:
Наличие текстовых теневых эффектов только в одной позиции устраняет смещения, что означает Если вы чувствуете, что это слишком тонкий и предпочел бы более темный контур вместо этого, нет проблем - вы можете повторить тот же эффект (сохраняя ту же позицию и размытие), несколько раз. Вот так:text-shadow: #000 0px 0px 1px, #000 0px 0px 1px, #000 0px 0px 1px, #000 0px 0px 1px, #000 0px 0px 1px, #000 0px 0px 1px;вот пример только одного эффекта (сверху), и тот же эффект повторяется 14 раз (снизу):
также Примечание: потому что линии становятся настолько тонкими, что очень хорошая идея отключить субпиксельную визуализацию с помощью
-webkit-font-smoothing: antialiased.
легко! СВГ к спасению.
Это упрощенный способ:
svg{ font: bold 50px 'Arial'; width: 50%;. height: 50px; } text{ fill: none; stroke: red; stroke-width:2px; // stroke-dasharray: 2,2; stroke-linejoin: round; }<svg viewBox="0 0 350 50"> <text y="40">Scalable Title</text> </svg>вот еще комплекс демо.
вы можете попробовать укладывать несколько размытых теней, пока тени не будут выглядеть как штрих, например:
.shadowOutline { text-shadow: 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black; }вот скрипка:http://jsfiddle.net/GGUYY/
я упоминаю об этом на всякий случай, если кто-то заинтересован, хотя я бы не назвал это решением, потому что он терпит неудачу по-разному:
- он не работает в старом IE
- это делает совершенно по-разному в каждом браузере
- применение так много теней очень тяжело обрабатывать :S
Я искал кроссбраузерное текстовое решение, которое работает при наложении на фоновые изображения. думаю, у меня есть решение для этого, которое не включает дополнительную разметку, js и работает в IE7-9 (я не тестировал 6) и не вызывает проблем с псевдонимами.
это комбинация использования CSS3 text-shadow, которая имеет хорошую поддержку, кроме IE (http://caniuse.com/#search=text-shadow), затем с помощью комбинации фильтров для IE. CSS3 text-stroke support is poor в данный момент.
фильтры, т. е.
светофильтр (http://www.impressivewebs.com/css3-text-shadow-ie/) выглядит ужасно, поэтому я не использовал это.
ответ Дэвида Хьюитта включает в себя добавление фильтров dropshadow в комбинации направлений. ClearType затем удаляется к сожалению, так что мы в конечном итоге с плохо сглаженным текстом.
затем я объединил некоторые элементы, предложенные на useragentman с dropshadow фильтр.
вместе
этот пример будет черным текстом с белым штрихом. Я использую условные классы html по пути к целевой IE (http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/).
#myelement { color: #000000; text-shadow: -1px -1px 0 #ffffff, 1px -1px 0 #ffffff, -1px 1px 0 #ffffff, 1px 1px 0 #ffffff; } html.ie7 #myelement, html.ie8 #myelement, html.ie9 #myelement { background-color: white; filter: progid:DXImageTransform.Microsoft.Chroma(color='white') progid:DXImageTransform.Microsoft.Alpha(opacity=100) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=1,offY=1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=-1,offY=1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=1,offY=-1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=-1,offY=-1); zoom: 1; }
Я получил лучшие результаты с 6 разных теней:
.strokeThis{ text-shadow: -1px -1px 0 #ff0, 0px -1px 0 #ff0, 1px -1px 0 #ff0, -1px 1px 0 #ff0, 0px 1px 0 #ff0, 1px 1px 0 #ff0; }
этот mixin для SASS даст плавные результаты, используя 8-axis:
@mixin stroke($size: 1px, $color: #000) { text-shadow: -#{$size} -#{$size} 0 $color, 0 -#{$size} 0 $color, #{$size} -#{$size} 0 $color, #{$size} 0 0 $color, #{$size} #{$size} 0 $color, 0 #{$size} 0 $color, -#{$size} #{$size} 0 $color, -#{$size} 0 0 $color; }и обычный CSS:
text-shadow: -1px -1px 0 #000, 0 -1px 0 #000, 1px -1px 0 #000, 1px 0 0 #000, 1px 1px 0 #000, 0 1px 0 #000, -1px 1px 0 #000, -1px 0 0 #000;
h1 { color: black; -webkit-text-fill-color: white; /* Will override color (regardless of order) */ -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: black; }<h1>Properly stroked!</h1>
работа с более толстыми штрихами становится немного грязной, если у вас есть удовольствие от sass, попробуйте этот миксин, а не идеальный, и в зависимости от веса хода он генерирует достаточное количество css.
@mixin stroke($width, $colour: #000000) { $shadow: 0 0 0 $colour; // doesn't do anything but I couldn't work out how to create a blank string and maintain commas @for $i from 0 through $width { $shadow: $shadow, -$i + px -$width + px 0 $colour, $i + px -$width + px 0 $colour, -$i + px $width + px 0 $colour, $i + px $width + px 0 $colour, -$width + px -$i + px 0 $colour, $width + px -$i + px 0 $colour, -$width + px $i + px 0 $colour, $width + px $i + px 0 $colour, } text-shadow: $shadow; }
несколько текстовых-тени..
Что-то вроде этого:var steps = 10, i, R = 0.6, x, y, theStyle = '1vw 1vw 3vw #005dab'; for (i = -steps; i <= steps; i += 1) { x = (i / steps) / 2; y = Math.sqrt(Math.pow(R, 2) - Math.pow(x, 2)); theStyle = theStyle + ',' + x.toString() + 'vw ' + y.toString() + 'vw 0 #005dab'; theStyle = theStyle + ',' + x.toString() + 'vw -' + y.toString() + 'vw 0 #005dab'; theStyle = theStyle + ',' + y.toString() + 'vw ' + x.toString() + 'vw 0 #005dab'; theStyle = theStyle + ',-' + y.toString() + 'vw ' + x.toString() + 'vw 0 #005dab'; } document.getElementsByTagName("H1")[0].setAttribute("style", "text-shadow:" + theStyle);
вот CSS файл надеюсь, что вы получите то, что вы хотите
/* ----- Logo ----- */ #logo a { background-image:url('../images/wflogo.png'); min-height:0; height:40px; } * html #logo a {/* IE6 png Support */ background-image: none; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../images/wflogo.png", sizingMethod="crop"); } /* ----- Backgrounds ----- */ html{ background-image:none; background-color:#336699; } #logo{ background-image:none; background-color:#6699cc; } #container, html.embed{ background-color:#FFFFFF; } .safari .wufoo input.file{ background:none; border:none; } .wufoo li.focused{ background-color:#FFF7C0; } .wufoo .instruct{ background-color:#F5F5F5; } /* ----- Borders ----- */ #container{ border:0 solid #cccccc; } .wufoo .info, .wufoo .paging-context{ border-bottom:1px dotted #CCCCCC; } .wufoo .section h3, .wufoo .captcha, #payment .paging-context{ border-top:1px dotted #CCCCCC; } .wufoo input.text, .wufoo textarea.textarea{ } .wufoo .instruct{ border:1px solid #E6E6E6; } .fixed .info{ border-bottom:none; } .wufoo li.section.scrollText{ border-color:#dedede; } /* ----- Typography ----- */ .wufoo .info h2{ font-size:160%; font-family:inherit; font-style:normal; font-weight:normal; color:#000000; } .wufoo .info div{ font-size:95%; font-family:inherit; font-style:normal; font-weight:normal; color:#444444; } .wufoo .section h3{ font-size:110%; font-family:inherit; font-style:normal; font-weight:normal; color:#000000; } .wufoo .section div{ font-size:85%; font-family:inherit; font-style:normal; font-weight:normal; color:#444444; } .wufoo label.desc, .wufoo legend.desc{ font-size:95%; font-family:inherit; font-style:normal; font-weight:bold; color:#444444; } .wufoo label.choice{ font-size:100%; font-family:inherit; font-style:normal; font-weight:normal; color:#444444; } .wufoo input.text, .wufoo textarea.textarea, .wufoo input.file, .wufoo select.select{ font-style:normal; font-weight:normal; color:#333333; font-size:100%; } {* Custom Fonts Break Dropdown Selection in IE *} .wufoo input.text, .wufoo textarea.textarea, .wufoo input.file{ font-family:inherit; } .wufoo li div, .wufoo li span, .wufoo li div label, .wufoo li span label{ font-family:inherit; color:#444444; } .safari .wufoo input.file{ /* Webkit */ font-size:100%; font-family:inherit; color:#444444; } .wufoo .instruct small{ font-size:80%; font-family:inherit; font-style:normal; font-weight:normal; color:#444444; } .altInstruct small, li.leftHalf small, li.rightHalf small, li.leftThird small, li.middleThird small, li.rightThird small, .iphone small{ color:#444444 !important; } /* ----- Button Styles ----- */ .wufoo input.btTxt{ } /* ----- Highlight Styles ----- */ .wufoo li.focused label.desc, .wufoo li.focused legend.desc, .wufoo li.focused div, .wufoo li.focused span, .wufoo li.focused div label, .wufoo li.focused span label, .safari .wufoo li.focused input.file{ color:#000000; } /* ----- Confirmation ----- */ .confirm h2{ font-family:inherit; color:#444444; } a.powertiny b, a.powertiny em{ color:#1a1a1a !important; } .embed a.powertiny b, .embed a.powertiny em{ color:#1a1a1a !important; } /* ----- Pagination ----- */ .pgStyle1 var, .pgStyle2 var, .pgStyle2 em, .page1 .pgStyle2 var, .pgStyle1 b, .wufoo .buttons .marker{ font-family:inherit; color:#444444; } .pgStyle1 var, .pgStyle2 td{ border:1px solid #cccccc; } .pgStyle1 .done var{ background:#cccccc; } .pgStyle1 .selected var, .pgStyle2 var, .pgStyle2 var em{ background:#FFF7C0; color:#000000; } .pgStyle1 .selected var{ border:1px solid #e6dead; } /* Likert Backgrounds */ .likert table{ background-color:#FFFFFF; } .likert thead td, .likert thead th{ background-color:#e6e6e6; } .likert tbody tr.alt td, .likert tbody tr.alt th{ background-color:#f5f5f5; } /* Likert Borders */ .likert table, .likert th, .likert td{ border-color:#dedede; } .likert td{ border-left:1px solid #cccccc; } /* Likert Typography */ .likert caption, .likert thead td, .likert tbody th label{ color:#444444; font-family:inherit; } .likert tbody td label{ color:#575757; font-family:inherit; } .likert caption, .likert tbody th label{ font-size:95%; } /* Likert Hover */ .likert tbody tr:hover td, .likert tbody tr:hover th, .likert tbody tr:hover label{ background-color:#FFF7C0; color:#000000; } .likert tbody tr:hover td{ border-left:1px solid #ccc69a; } /* ----- Running Total ----- */ .wufoo #lola{ background:#e6e6e6; } .wufoo #lola tbody td{ border-bottom:1px solid #cccccc; } .wufoo #lola{ font-family:inherit; color:#444444; } .wufoo #lola tfoot th{ color:#696969; } /* ----- Report Styles ----- */ .wufoo .wfo_graph h3{ font-size:95%; font-family:inherit; color:#444444; } .wfo_txt, .wfo_graph h4{ color:#444444; } .wufoo .footer h4{ color:#000000; } .wufoo .footer span{ color:#444444; } /* ----- Number Widget ----- */ .wfo_number{ background-color:#f5f5f5; border-color:#dedede; } .wfo_number strong, .wfo_number em{ color:#000000; } /* ----- Chart Widget Border and Background Colors ----- */ #widget, #widget body{ background:#FFFFFF; } .fcNav a.show{ background-color:#FFFFFF; border-color:#cccccc; } .fc table{ border-left:1px solid #dedede; } .fc thead th, .fc .more th{ background-color:#dedede !important; border-right:1px solid #cccccc !important; } .fc tbody td, .fc tbody th, .fc tfoot th, .fc tfoot td{ background-color:#FFFFFF; border-right:1px solid #cccccc; border-bottom:1px solid #dedede; } .fc tbody tr.alt td, .fc tbody tr.alt th, .fc tbody td.alt{ background-color:#f5f5f5; } /* ----- Chart Widget Typography Colors ----- */ .fc caption, .fcNav, .fcNav a{ color:#444444; } .fc tfoot, .fc thead th, .fc tbody th div, .fc tbody td.count, .fc .cards tbody td a, .fc td.percent var, .fc .timestamp span{ color:#000000; } .fc .indent .count{ color:#4b4b4b; } .fc .cards tbody td a span{ color:#7d7d7d; } /* ----- Chart Widget Hover Colors ----- */ .fc tbody tr:hover td, .fc tbody tr:hover th, .fc tfoot tr:hover td, .fc tfoot tr:hover th{ background-color:#FFF7C0; } .fc tbody tr:hover th div, .fc tbody tr:hover td, .fc tbody tr:hover var, .fc tfoot tr:hover th div, .fc tfoot tr:hover td, .fc tfoot tr:hover var{ color:#000000; } /* ----- Payment Summary ----- */ .invoice thead th, .invoice tbody th, .invoice tbody td, .invoice tfoot th, .invoice .total, .invoice tfoot .last th, .invoice tfoot .last td, .invoice tfoot th, .invoice tfoot td{ border-color:#dedede; } .invoice thead th, .wufoo .checkNotice{ background:#f5f5f5; } .invoice th, .invoice td{ color:#000000; } #ppSection, #ccSection{ border-bottom:1px dotted #CCCCCC; } #shipSection, #invoiceSection{ border-top:1px dotted #CCCCCC; } /* Drop Shadows */ /* - - - Local Fonts - - - */ /* - - - Responsive - - - */ @media only screen and (max-width: 480px) { html{ background-color:#FFFFFF; } a.powertiny b, a.powertin em{ color:#1a1a1a !important; } } /* - - - Custom Theme - - - */


Comments