Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пропадают CSS стили при трансформации, Пропадают CSS стили при трансформации 
V
    Опции темы
JRoma
Дата 6.5.2013, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.3.2008

Репутация: нет
Всего: 1



Доброго времени суток!

Подскажите, кто знает, почему пропадают css стили при xsl трансформации у тегов div, которые генерируются в разделе <xsl:template match="item">...</xsl:template>? При чём даже тег <b> и <br/> не влияет на отображение. 

Данное поведение проявляется в IE9, Chrome, Fierfox, а вот Opera отображает всё так как я и ожидал.

Код

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="view.xsl"?>

<root>
    <title value="Числа"/>
    <body>
        <item value="Один"/>
        <item value="Два"/>
        <item value="Три"/>
    </body>
</root>


Код

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output
        media-type="text/html" method="xml" encoding="utf-8"
        omit-xml-declaration="yes"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    />
    <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>test</title>
                <link rel='stylesheet' type='text/css' href='style.css'/>
            </head>
            <body>
                <div class="layout">
                    <div class="title">
                        <xsl:value-of select="root/title/@value"/>
                    </div>
                    <div class="body">
                        <xsl:apply-templates select="//item" />
                    </div>
                </div>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="item">
        <div class="item">
            <b><xsl:value-of select="@value"/></b><br/>
        </div>
    </xsl:template>

</xsl:stylesheet>


Код

.layout{
    color: red;
}
.title{
    color: green;
}
.body{
    color: black;
}
.item{
    color: blue;
}


Если заменить инструкцию <xsl:apply-templates select="//item" /> на цикл <xsl:for-each select="//item">... </xsl:for-each>, то стили не пропадают.
PM MAIL   Вверх
diadiavova
Дата 6.5.2013, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



ИЕ9 у меня нет, в ИЕ10 отображается нормально, а в хроме вообще чистая страница. Проблему хрома решить не удалось, но в файрфоксе она решается путем правильной установки метода вывода
Код

<xsl:output
        media-type="text/html" method="html"
Когда ты ставишь xml, то вывод может не соответствовать формату. Взгляни, например, что выдает файрфокс, если сделать как сделал ты.
Код

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>test</title>
    <link href="style.css" type="text/css" rel="stylesheet">
</head>
<body>
    <div class="layout">
        <div class="title">Числа</div>
        <div class="body">
            <div class="item"><b>Один</b><br></br>
            </div>
            <div class="item"><b>Два</b><br></br>
            </div>
            <div class="item"><b>Три</b><br></br>
            </div>
        </div>
    </div>
</body>
</html>

Обрати внимание на то, как выводится элемент br


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
JRoma
Дата 7.5.2013, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.3.2008

Репутация: нет
Всего: 1



Действительно, замена метода вывода с xml на html решила проблему.

Код

    <xsl:output
        media-type="text/html" method="html" encoding="utf-8"
        omit-xml-declaration="yes"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    />


Chrome работает с локальными файлами только если запускать с ключом chrome.exe --allow-file-access-from-files

Элемент <br>, только показывается как <br></br> в инспекторе Fierfox, на деле это не приводит к двойному переводу строки. В Chrome показывает как <br>, а в Opera <br/>.

Спасибо за ответ.
PM MAIL   Вверх
diadiavova
Дата 7.5.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(JRoma @  7.5.2013,  06:33 Найти цитируемый пост)
Элемент <br>, только показывается как <br></br> в инспекторе Fierfox, на деле это не приводит к двойному переводу строки.

Это приводит к ошибке, из-за которой и появляется указанная проблема.
Цитата(JRoma @  7.5.2013,  06:33 Найти цитируемый пост)
В Chrome показывает как <br>, а в Opera <br/>.

Тут следует заметить, что с точки зрения xml записи <br/> и <br></br> - эквивалентны, поэтому разные xslt-процессоры могут выводить пустые элементы по-разному и это не ошибка в случае метода вывода xml. Именно поэтому одни браузеры показывали содержимое правильно, а другие - нет. А хром после исправления вывел бр без закрывающего слеша из-за того, что в хтмл так надо делать. Проблема возникает из-за того, что в первой версии xslt нет встроенной поддержки метода вывода xhtm(а вторая не поддерживается браузерами) со всеми особенностями этого формата. В этом смысле лучше было бы вообще отказаться от использования xhtml в качестве выходного формата, поскольку неизвестно к каким еще неприятностям это может привести.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
JRoma
Дата 8.5.2013, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.3.2008

Репутация: нет
Всего: 1



Спасибо за совет. Буду копать в сторону отказа от xhtml. Пока мой уровень знаний не позволяет это сделать.
PM MAIL   Вверх
diadiavova
Дата 8.5.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(JRoma @  8.5.2013,  11:36 Найти цитируемый пост)
Буду копать в сторону отказа от xhtml. Пока мой уровень знаний не позволяет это сделать. 

Поставь доктайп хтмловский и убери пространство имен из элемента html.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
JRoma
Дата 8.5.2013, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.3.2008

Репутация: нет
Всего: 1



Получилось!  smile 

Убрал пространство имен из тега html и заменил вывод доктайпа:
Код

    <xsl:output method="html"
      encoding="UTF-8"
      indent="yes"
      doctype-system="about:legacy-compat"/>


Раньше я убирал доктайп совсем (это было зря), и у меня пропадали тени в IE. Сейчас всё работает вот с такими стилями

Код

.title{
    overflow: hidden;
    width: 100%;    
    
    -moz-border-radius: 6px;
    -webkit-border-radius: 6px;
    border-radius: 6px;    
    
    background-image: -moz-linear-gradient(top, #79A8C5, #013278);
    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#79A8C5), to(#013278), color-stop(1,#013278));
    background-image: -ms-linear-gradient(#79A8C5, #013278);
    background-image: -o-linear-gradient(#79A8C5, #013278);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#79A8C5,endColorstr=#013278,GradientType=0);        

    -webkit-box-shadow: 0px 10px 5px -6px rgba(0,0,0,0.6); 
    -moz-box-shadow: 0px 10px 5px -6px rgba(0,0,0,0.6); 
    box-shadow: 0px 10px 5px -6px rgba(0,0,0,0.6); 
    
    margin: 0px 0px 10px;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0868 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.