2009-04-14 2 views
8

Я хочу сделать кросс-браузер (FF3, IE6, Safari, Opera), W3C действует (HTML и CSS оба), растяжению (по горизонтали по вертикали), без JavaScript и Семантический и меньшая разметка HTML Round CORNER. Изображения могут быть использованы для IE6.Как сделать кросс-браузер, W3C действительный, семантический, не-javascript ROUND corner?

Я пробовал и тестировал множество методов, доступных в сообществе. Но у всех есть одна из проблем, упомянутых выше. Если кто-нибудь знает, что я хочу, поделитесь со мной?

Помните, что я хочу сделать это без каких-либо JavaScript, jquery или любого типа js.

ответ

21

Два основных рендеринга двигатели поддерживали CSS3 в течение достаточно долгого времени, что делает закругленные углы, как просто, как:

-moz-border-radius: 5px; 
-webkit-border-radius: 5px; 
border-radius: 5px; 

Конечно, это не оказывает никакого влияния на IE6 или 7 (он работает в IE8) или 8, поэтому вам нужно реализовать неприятное разделенное разделение с изображениями для углов, что не соответствует вашим семантическим требованиям.

Я не поклонник отображения-хаков, связанных с javascript или css-hacks, поэтому я использую CSS3 и проверяю, что квадратная версия в IE7 выглядит приемлемой. Я делал это некоторое время, поскольку IE никогда не использовал для поддержки прозрачности PNG, что означало, что вы не могли красиво наложить закругленное угловое изображение на узорный фон. IE8 - большое улучшение, поэтому проблема начинает уходить - но я понимаю ваше желание заставить ее работать над IE6 и выше.

ОБНОВЛЕНИЕ: Различные фрагменты CSS3, которые изначально планировались для включения в IE8, фактически были удалены из окончательной версии. Пограничный радиус был одной из жертв.

+0

Thx для ответа на ур, я знаю, что для решения IE6 нужны Js или изображения. Я хочу сделать круглый угол с изображениями, но хочу использовать меньшие изображения, разметку и семантический путь. –

+0

Обновление - я только что нашел в MSDN, что граница CSS3 с границей была удалена из IE8. Следите за пакетом обновления или держитесь, пока IE9 для этой функции !!! – Fenton

+0

@Sohnee - вы должны поместить свое обновление в свой ответ, где вы можете быть уверены, что его никто не упустит. – alex

0

Вы можете использовать описанную технику here (это для виджета Apple Dashboard, но HTML/CSS должен быть тем же). Он использует девять изображений и не требует JavaScript.

Стив

+0

Это использует javascript и так много div. –

+0

Используется только JavaScript для части анимации - закругленные углы выполняются только с помощью HTML/CSS. Но да, это требует много div. –

+0

Content
Я хочу этот тип разметки –

0

Я не знаю, что вы имеете в виду смысловыми или растяжению закругленными углами, но вы можете использовать CSS границы радиуса атрибуты для Webkit и Firefox, а просто использовать комбинацию PNG изображений и this HTML Component, который добавляет PNG альфа -канальная поддержка IE6.

+0

Я хочу обойтись без javascript для IE –

6

Короткий ответ: вы не можете делать все, что хотите, без CSS3 - который не реализован ни в одной, ни в последней версии браузеров.

Итак, ответ должен либо использовать CSS3 (как описано выше Sohnee), либо научиться любить решения javascript/divs/images. И убедитесь, что он отображается нормально, когда браузер, который ни один из них не смотрит на него ...

1

Это должно позволить вам получить желаемый результат. Старый сложный метод DIVs с одним большим фоном. Вам нужно создать очень большое фоновое изображение, например. 2000 x 2000 пикселей, где вы нарисуете прямоугольник с закругленными углами. Я рекомендую сохранить его как .GIF с прозрачным фоном, чтобы обеспечить совместимость с IE6, так как вы хотите избежать JavaScript. Обратите внимание, что границы в этом примере предназначены только для выяснения того, где элемент появляется и может быть удален.

Я тестировал его на IE6, IE7, Firefox 2 и 3, Safari и Opera. Надеюсь это поможет.

<html> 
<head> 
    <style type="text/css"> 
    .RoundRectInside 
    { 
     width: 100%; 
     background: url(BigBackground.gif) top left no-repeat; 
     overflow: hidden; 
    } 

    .RoundRectOutside 
    { 
     width: 20em; 
     height: 20em; 
     background: url(BigBackground.gif) bottom left no-repeat; 
     overflow: hidden; 
     position: relative; 
    } 

    .RoundRectTopRight 
    { 
     float: right; 
     /* Width and Height should correspond to width and height of rounded corner */ 
     width: 30px; 
     height: 30px; 
     background: url(BigBackground.gif) top right no-repeat; 
     overflow: hidden; 
     position: absolute; 
     top: 0; 
     right: 0; 
    } 

    .RoundRectBottomRight 
    { 
     float: right; 
     /* Width and Height should correspond to width and height of rounded corner */ 
     width: 30px; 
     height: 30px; 
     background: url(BigBackground.gif) bottom right no-repeat; 
     overflow: hidden; 
     position: absolute; 
     bottom: 0; 
     right: 0; 
    } 
    </style> 
</head> 

<body> 
    <div class="RoundRectOutside"> 
    <div class="RoundRectInside"> 
     <div>Content goes here</div> 
     <div class="RoundRectTopRight"></div> 
    </div> 
    <div class="RoundRectBottomRight"></div> 
    </div> 
</body> 

</html> 
+0

Thx для этого я попробую это, но у меня хорошее решение с ome очень маленькое изображение, но на этой границе цвета невозможно. Http: //apptools.com/examples/roundedbox. php –

+0

, пожалуйста, дайте мне живую ссылку вашего примера. я не понял правильно. я тестировал, но не работал, уже показывает красную рамку на поле –

+0

К сожалению, у меня нет сервера, на котором я могу его загрузить. Тем не менее, , как я писал в своем ответе, появляется красная рамка, потому что я поместил атрибут «border» в CSS, чтобы помочь выяснить положение элементов. Я изменил свой пост и удалил границу, попробуйте скопировать его сейчас. – Diego

0

Я довольно уверен, что минимальных не JS округляется угловой технику для IE6/7 требует 2 маленьких изображений (верхний и нижний) и 1 дополнительный DIV для фиксированной ширины коробки и 3 маленьких изображений (снизу, слева и справа) и 3 дополнительных div для поля переменной ширины.

Фиксированная ширина

<div class="box"> 
<div class="bottom"> 
gjkgjk 
</div> 
</div> 

.box {background:url(image to round off the top) top left no-repeat:padding:0;} 
.box .bottom {background:url(image to round off the bottom) bottom left no-repeat:margin:0;width:100px} 

Переменный Ширина

<div class="box"> 
<div class="top-right"> 
<div class="bottom-left"> 
<div class="bottom-right"> 
gjkgjk 
</div> 
</div> 
</div> 
</div> 

.box {background:url(image to round off the top-left) top left no-repeat:padding:0;} 
.box .right{background:url(image to round off the top-right) top right no-repeat:padding:0;margin:0;} 
.box .bottom-left {background:url(image to round off the bottom-left) bottom left no-repeat:margin:0;padding:0;} 
.box .bottom-right {background:url(image to round off the bottom-right) bottom right no-repeat:margin:0;padding:0;} 

Если вы хотите округлую границу, а не только округлой сплошной фон выше, может быть изменен с помощью границы, отрицательный запас, положение относительно/абсолютного , ширину и положение фонового изображения, чтобы оно работало, но не помню, как это было на моей голове.

+0

Мне нужно растягиваться, так что # 1 не для меня и для решения №2 я нашел лучший способ, см. Мой ответ ниже –

0

Это лучшее, что я нашел до сих пор.

http://apptools.com/examples/roundedbox.php

Это кросс-браузер, W3C действительным и использовать только один изображение. но мы не можем сделать границу с этим.

Это решение для фиксированной ширины witdth границы.

это использовать небольшую разметку ` Content

` с действительным CSS, HTML http://www.askthecssguy.com/examples/roundedCorners/index.html

+0

Если вы посмотрите на мой метод, вы можете сделать это с меньшей разметкой. – VirtuosiMedia

+0

Просто примечание: пример на * askthecssguy.com * не очень хорошо масштабируется, так как он использует фиксированную ширину. Поэтому он не является «растяжимым». – Diego

0

Если вы используете PNG8 с альфа-прозрачностью, изображения могут иметь прозрачность в IE6. Оговорки состоят в том, что вы можете иметь только прозрачные или непрозрачные изображения (все, что между ними будет отображаться только на 100% прозрачно), и что вы не можете использовать большую цветовую палитру или градиенты.

В зависимости от вашего дизайна существует возможное обходное решение, или вы можете использовать его в сочетании с опцией PNG8 выше. Если ваш фон прост, вы можете просто сопоставить что-либо за пределами угла с фоном. Используя эту технику, вы можете легко сделать это с одним изображением для своих углов, если вы используете спрайты. Разметка будет выглядеть примерно следующим образом:

<div id="content"> 
    <span class="lt"></span> 
    <span class="rt"></span> 
    <span class="lb"></span> 
    <span class="rb"></span> 
</div> 

И в CSS:

#content {position:relative;} 

/*These styles are generic and can be reused over multiple corner types*/ 
.lt, .rt, .lb, .rb{ 
    background:url(../images/button_corners.png) no-repeat; 
    width:5px; 
    height:5px; 
    position:absolute; 
} 
.lt, .rt{top:0px;} 
.rt, .rb{right:0px;} 
.lt, .lb{left:0px;} 
.rb, .lb{bottom:0px;} 

/*The following would be used specifically for #content, but you could reuse a different part of the same image for a different container or button */ 

#content .lt{background-position:-200px 0px;} 
#content .rt{background-position:-245px 0px;} 
#content .lb{background-position:-200px -45px;} 
#content .rb{background-position:-245px -45px;} 

Есть свои преимущества и недостатки такого подхода:

Преимущества

Это кросс- браузер, он работает с жидкостными и фиксированными макетами, и вы можете использовать его для пунктов меню (зависание будет работать в IE6 для ссылок) или в контейнерах , он не требует JavaScript, и с помощью спрайта CSS вы можете сделать это с одним изображением даже с несколькими типами углов.

Недостатки

Он не будет работать с любой планировкой, граница может быть сложной или некрасиво, это добавляет несколько дополнительных элементов в разметку, и если вы используете его для элемента связи с эффектом парения , IE6 имеет мерцание, которое может быть разрешено только с помощью JavaScript. Тем не менее, что JavaScript является только одна строкой и может быть включен в условном комментарии:

<script type="text/javascript">document.execCommand("BackgroundImageCache",false,true);</script> 
0

Если вы не возражаете против использования Javascript для только IE, вы можете использовать условные комментарии и Javascript динамически вставлять VML roundrects, что может делать то, что вы хотите (или просто использовать статически условно прокомментированный VML). Граница границы CSS3 охватывает Gecko, WebKit и KHTML. Для Opera требуется фоновое изображение SVG.

Вот пример вытащил из одного из моих проектов: http://entr0py.org/misc/reader/basic/

Я сказал, что все еще имеет некоторые WebKit ошибки, связанные с фоновой окраски, но она прекрасно работает и во всем остальном.

+0

это выглядит странно в IE 6 –

0

Привет, мне недавно пришлось преодолеть ту же проблему, изменяемый размер виджета с закругленными углами, внутренней границей, тень и градиентный фон. Он также должен работать на всех браузерах (включая IE6).

Предполагая, что вы используете фотошоп и правильно следите за исходными файлами, это довольно легко. В целом для этого требуется 4 изображения (до 7 в зависимости от того, как вы поддерживаете IE6), все они могут быть нарезаны из исходного файла фотошопа, поэтому его довольно легко.

Проверьте приведенную ниже ссылку.

http://thatguynamedandy.com/blog/css-widget-rounded-corner-gradient-drop-shadow

3

Лучшее решение на сегодняшний день является CSS3Pie.

Он позволяет добавлять закругленные углы в IE с помощью CSS.

Вы можете использовать граничный радиус CSS для всех других браузеров и CSS3Pie для IE.

Он использует специфический для IE стиль behavior, поэтому не является стандартным CSS, но это означает, что вы получаете правильно семантический HTML (без ложных div для макета), и вам не нужно беспокоиться о подключаемых модулях JQuery ,

Это Javascript (из рода), но его нужно использовать только в IE; все другие браузеры будут использовать обычный CSS для борьбы с ним и даже не будут загружать IE-специфический код.

(кстати IE9 в настоящее время не поддерживает границы радиуса ... но, конечно, IE6/7/8 все еще там и будет какое-то время, чтобы прийти)

+0

Вопрос "не-javascript" –

+0

@Jitendra - он также указал семантический HTML. Дело в том, что IE6/7/8 не может сделать это без Javascript или дополнительной разметки. CSS3Pie - безусловно наименее навязчивое решение. – Spudley

Смежные вопросы