Как сделать кросс-браузер, верный W3C, семантический, не javascript ROUND угол? - PullRequest
8 голосов
/ 14 апреля 2009

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

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

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

Ответы [ 12 ]

21 голосов
/ 14 апреля 2009

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

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

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

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

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

6 голосов
/ 14 апреля 2009

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

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

3 голосов
/ 04 октября 2010

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

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

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

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

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

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

1 голос
/ 14 апреля 2009

Это должно позволить вам получить желаемый результат. Старый сложенный метод 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 голосов
/ 21 октября 2012

Вот несколько методов, которые работают во всех браузерах:

0 голосов
/ 21 июля 2009

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

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

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

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

0 голосов
/ 14 апреля 2009

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

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

Мне сказали, что у него все еще есть некоторые ошибки WebKit, относящиеся к окрашиванию фона, но он отлично работает во всем остальном.

0 голосов
/ 14 апреля 2009

Если вы используете 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;}

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

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

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

Недостатки

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

<script type="text/javascript">document.execCommand("BackgroundImageCache",false,true);</script>
0 голосов
/ 14 апреля 2009

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

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

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

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

используется небольшая разметка Содержание

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

0 голосов
/ 14 апреля 2009

Я уверен, что метод минимального округления углов без 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;}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...