Форум программистов, компьютерный форум, киберфорум
Наши страницы
jQuery
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
1

Удалить не используемые классы в css

14.02.2018, 12:14. Просмотров 903. Ответов 34
Метки нет (Все метки)

Возник такой вопрос, есть утилита которая добавляет кнопку с выбранным в ней эффектом, эффектов css 20 шт, но используется только один для каждой кнопки, ну и соответственно при добавлении, например двух кнопок добавляется ещё 20 css эффектов, получается при добавлении двух кнопок добавляется 40 классов с эффектами, а используется всего два, что очень тормозит работу проекта.
Как с помощью скрипта можно удалять не используемые стили (классы) в css документе?
Пример:
Кнопка 1 использует эффект man
HTML5
1
<button type="button" class="button--manindexExtension1>
Кнопка 2 использует эффект bom
HTML5
1
<button type="button" class="button--bomindexExtension1>
т.е. из 20 эффектов используются два (man и bom), но в файл css добавляются все 20 классов с эффектами для каждой кнопки, вот их и нужно удалять раз они не используются. Названия 20 эффектов известны, я так понимаю, нужно создать массив с названиями эффектов и сравнивать их с использованными т.е. если button содержит класс man, bom то остальные классы из массива удаляются?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2018, 12:14
Ответы с готовыми решениями:

Как удалить css-файл
Как реализовать удаление целого css-файла? Либо заменить его. Либо...

Удалить медиа запрос в css документе
День добрый, подскажите как с помощью jQuery в css документе index.css удалить...

Бегущая строка / Часто используемые символы в строке
1) Нужно сделать бегущую строку в строке состояния браузера. Которая будет...

изменение изображения.используемые языки html и javascript
необходима помощь вставить в html файл изображение и 2 кнопки: увеличить и...

Удалить не используемые vlan на cisco
есть ли какая удобная метода удаления vlan с cisco коммутатора? Добавлено...

34
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 15:18  [ТС] 21
Щас в style.php добавились классы
PHP
1
2
3
4
5
6
7
8
9
10
11
12
.button--winonaindexExtension1 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
.button--winonaindexExtension2 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
вроде всё правильно, но из style.css они не удалились

Добавлено через 2 минуты
Ещё один момент, эффект Winona он состоит из кучи классов
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
.button--winonaindexExtension2 {
    -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
.button--winonaindexExtension2::after {
    content: attr(data-text);
    position: absolute;
    width: 100%;
    height: 100%;
    /*top: 40%;*/
    left: 0;
    opacity: 0;
    color: #0000CD;
        -webkit-transform: translate3d(0, 25%, 0);
    transform: translate3d(0, 25%, 0);
}
.button--winonaindexExtension2 > span {
    display: inline-block;
}
.button--winonaindexExtension2 > span, .button--winonaindexExtension2::after {
    -webkit-transition: -webkit-transform 0.3s, opacity 0.3s;
    transition: transform 0.3s, opacity 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
.button--winonaindexExtension2:hover {
    background-color: #DCDCDC;
       border: 0px solid #ffffff;
 
}
.button--winonaindexExtension2:hover::after {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
}
.button--winonaindexExtension2:hover > span {
    opacity: 0;
    -webkit-transform: translate3d(0, -25%, 0);
    transform: translate3d(0, -25%, 0);
}
а выбирается только первый
CSS
1
2
3
4
5
6
.button--winonaindexExtension1 {
    -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
как удалить все классы которые содержат winona???
Пробывал так
PHP
1
$my = array('[class*="winona"]');
но в style.php получается
PHP
1
2
3
[class*="winona"] {
 
}
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 15:26 22
ну да не удалились, если ты хочешь не подключать стили, а просто моим скриптом просеять нужные и сложить в файл то надо чучуть код изменить
1
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 15:29  [ТС] 23
Цитата Сообщение от Уф Посмотреть сообщение
просеять нужные и сложить в файл то надо чучуть код изменить
Как это сделать)?
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 15:37 24
PHP
1
2
3
4
5
6
//в самом конце замени
foreach($my as $t) echo "$t {\n ".($st[$t])."\n}\n";
//на
$str = '';
foreach($my as $t) str .= "$t {\n ".($st[$t])."\n}\n";
file_put_contents('css/style2.css', $str);
получишь второй файл с отсеянными стилями

по поводу сложных селекторов можно так выдирать

PHP
1
2
foreach($st as $k => $t) if(strpos($k, 'winona')===false) str .= "$t {\n ".($st[$t])."\n}\n";
 //то есть включаем только те стили в названии которых не нашлось слово winona
0
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 15:45  [ТС] 25
Где то ошибка
HTML5
1
2
<br />
<b>Parse error</b>:  syntax error, unexpected '.=' (T_CONCAT_EQUAL) in <b>/home/mym/mym.nichost.ru/docs/style.php</b> on line <b>19</b><br />
вот в этой строчке
PHP
1
foreach($my as $t) str .= "$t {\n ".($st[$t])."\n}\n";
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 15:49 26
да вместо str надо $str
0
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 15:54  [ТС] 27
Сделал так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
header('Content-type: text/css');
$s = file_get_contents('css/index.css');
//тут всякой магией вырезаешь из текста нужные стили
 
// удаляем многострочные комментарии /* */
$s = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#','',$s);
 
//например разбиваем файл по закрывающей скобке
$sa = explode ( '}' , $s );
//потом проходим по нему и разбиваем по открывающей скобке
$st = array();
foreach($sa as $el) {
   $sp = explode ( '{' , $el );
   $st[ trim($sp[0]) ] = trim( $sp[1] ); //trim удалит лишние пробелы и переносы строк
}
$my = array('.button--winonaindexExtension1','.button--winonaindexExtension2');
$str = '';
foreach($my as $t) $str .= "$t {\n ".($st[$t])."\n}\n";
file_put_contents('css/style2.css', $str);
?>
но теперь style.php пустой, а style.css всё также ни чего не удалилось. Файла style2.css нет.

ссылка
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 16:01 28
Лучший ответ Сообщение было отмечено Дмитрий Дмитрий как решение

Решение

наверное у тебя нет разрешения на запись в эту папку, создай его вручную пустой и запусти заново.
если хочешь еще и вывести на экран, в конце это тогда
PHP
1
2
if(file_put_contents('css/style2.css', $str)===false) echo 'запись не удалась'.PHP_EOL;
echo $str;
если еще хочешь увидить ошибки вначале кода воткни обработчик ошибок
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    if (!(error_reporting() & $errno)) {
        // Этот код ошибки не включен в error_reporting,
        // так что пусть обрабатываются стандартным обработчиком ошибок PHP
        return false;
    }
 
    switch ($errno) {
    case E_USER_ERROR:
        echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
        echo "  Фатальная ошибка в строке $errline файла $errfile";
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
        echo "Завершение работы...<br />\n";
        exit(1);
        break;
 
    case E_USER_WARNING:
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
        break;
 
    case E_USER_NOTICE:
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
        break;
 
    default:
        echo "Неизвестная ошибка: [$errno] $errstr<br />\n";
        break;
    }
 
    /* Не запускаем внутренний обработчик ошибок PHP */
    return true;
}
 
// переключаемся на пользовательский обработчик
$old_error_handler = set_error_handler("myErrorHandler");
1
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 16:12  [ТС] 29
Посмотрел в папке css он там есть, но в консоли его не видно, наверное путь надо в html прописать на файл styl2.css?

Добавлено через 5 минут
Разрешения сделал, теперь в style.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
.button--winonaindexExtension1 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
.button--winonaindexExtension2 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
и тоже самое в syle2.css, прописал путь к нему, теперь видно, но что с ним делать то)) там только первые классы
CSS
1
2
3
4
5
6
7
8
9
10
11
12
.button--winonaindexExtension1 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
.button--winonaindexExtension2 {
 -webkit-transition: border-color 0.3s, background-color 0.3s;
    transition: border-color 0.3s, background-color 0.3s;
    -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 16:14 30
ну да. в style2.css ты высеиваешь скриптом что хочешь, а потом его уже подключаешь вместо index.css
0
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 16:21  [ТС] 31
Ясно.
Попробовал этот код
PHP
1
2
foreach($st as $k => $t) if(strpos($k, 'winona')===false) $str .= "$t {\n ".($st[$t])."\n}\n";
 //то есть включаем только те стили в названии которых не нашлось слово winona
Всё копируется в style.php и без названий классов т.е. в style2.css не попадает
Вот такой php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
header('Content-type: text/css');
$s = file_get_contents('css/index.css');
//тут всякой магией вырезаешь из текста нужные стили
 
// удаляем многострочные комментарии /* */
$s = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#','',$s);
 
//например разбиваем файл по закрывающей скобке
$sa = explode ( '}' , $s );
//потом проходим по нему и разбиваем по открывающей скобке
$st = array();
foreach($sa as $el) {
   $sp = explode ( '{' , $el );
   $st[ trim($sp[0]) ] = trim( $sp[1] ); //trim удалит лишние пробелы и переносы строк
}
/*$my = array('.button--winonaindexExtension1','.button--winonaindexExtension2');*/
$str = '';
/*foreach($my as $t) $str .= "$t {\n ".($st[$t])."\n}\n";*/
foreach($st as $k => $t) if(strpos($k, 'winona')===false) $str .= "$t {\n ".($st[$t])."\n}\n";
file_put_contents('css/style2.css', $str);
if(file_put_contents('css/style2.css', $str)===false) echo 'запись не удалась'.PHP_EOL;
echo $str;
?>
Вот что получается в style.php-только стили
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
background-color: #FFFFFF;
   color: #000000;
   font-family: Arial;
   font-weight: normal;
   font-size: 13px;
   line-height: 1.1875;
   margin: 0;
   padding: 0; {
 
}
clear: both;
   position: relative;
   table-layout: fixed;
   display: table;
   text-align: center;
   width: 100%;
   background-color: transparent;
   background-image: none;
   border: 0px #CCCCCC solid;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box; {
 
}
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 16:25 32
да там ошибка, надо
PHP
1
foreach($st as $k => $t) if(strpos($k, 'winona')===false) $str .= "$k {\n ".($t)."\n}\n";
а в файл не кладется ,потому что уже копай какие права доступа на папку у тебя на сервере стоят
1
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 16:39  [ТС] 33
Вот этот вариант супер, эффект winona удаляется
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
header('Content-type: text/css');
$s = file_get_contents('css/index.css');
//тут всякой магией вырезаешь из текста нужные стили
 
// удаляем многострочные комментарии /* */
$s = preg_replace('#/\*(?:[^*]*(?:\*(?!/))*)*\*/#','',$s);
 
//например разбиваем файл по закрывающей скобке
$sa = explode ( '}' , $s );
//потом проходим по нему и разбиваем по открывающей скобке
$st = array();
foreach($sa as $el) {
   $sp = explode ( '{' , $el );
   $st[ trim($sp[0]) ] = trim( $sp[1] ); //trim удалит лишние пробелы и переносы строк
}
$str = '';
foreach($st as $k => $t) if(strpos($k, 'winona')===false) $str .= "$k {\n ".($t)."\n}\n";
file_put_contents('css/style2.css', $str);
if(file_put_contents('css/style2.css', $str)===false) echo 'запись не удалась'.PHP_EOL;
echo $str;
?>
в файл style2.css записывается но в консоли он пустой)) а на сервере все ок.

Добавлено через 3 минуты
вот тут
PHP
1
if(strpos($k, 'winona')===false)
я могу через запитую перечислять эффекты для удаления?
PHP
1
if(strpos($k, 'winona','bom','san')===false)
Добавлено через 4 минуты
Попробовал перечислить выдает ошибку
PHP
1
2
<br />
<b>Warning</b>:  strpos() expects parameter 3 to be integer, string given in <b>/home/mym/mym.nichost.ru/docs/style.php</b> on line <b>20</b><br />
0
Уф
600 / 580 / 372
Регистрация: 13.07.2015
Сообщений: 1,767
Завершенные тесты: 1
15.02.2018, 16:42 34
вот так
PHP
1
if(strpos($k, 'winona')===false and strpos($k, 'bom')===false and strpos($k, 'san')===false)
1
Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 432
15.02.2018, 16:47  [ТС] 35
Круто, спасибо огромное, уделили мне кучу времени)
0
15.02.2018, 16:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2018, 16:47

Основы css, css классы
Я новичок поэтому не смейтесь. вот есть классы css. &lt;div...

Css и классы
Изучаю CSS. Вроде бы ничего сложного, но никак не могу понять смысл...

php и классы css
можно ли как-то в ксс заместо значений вставить переменные?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru