• Есть ли готовая похожая или такая же симуляция на js?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Ровно та же самая: https://paveldogreat.github.io/WebGL-Fluid-Simulation/
    Есть несколько аналогов, гуглить запросом "webgl|canvas fluid"
    Ответ написан
    Комментировать
  • Как сдвинуть второй внутренний элемент в правый край окна с помощью flexbox? Ну или с помощью каких-либо других инструментов css?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Желательно с помощью flexbox.

    С помощью флексбокс это делать неудобно. Придется добавлять псевдо с той же шириной, как у правого блока.

    Ваши друзья в данном случае гриды (2 способа) или абсолюты (гриды лучше).
    https://jsfiddle.net/056uLsa1/
    https://jsfiddle.net/179wtyrk/

    https://codepen.io/AnnaSummer/pen/ZEjwKea (тут оба варианта)
    Ответ написан
    6 комментариев
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Как вывести атрибуты товаров woocommerce?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Что бы не получать таких ошибок, нужно делать проверку, а не пуста ли переменная $subheadingvalues. Но это так. А вообще в самом плагине все до вас написано. Атрибуты выводятся в товаре в табе "доп информация", посмотрим код этой табы. plugins/woocommerce/templates/single-product/tabs/additional-information.php
    Код там такой <?php $product->list_attributes(); ?> используется метот list_attributes(); Можно на этом остановиться и в своем шаблоне написать
    global $product;
    $product->list_attributes();

    Но получим готовую разметку в виде таблицы. Посмотрим, что делает функция list_attributes();
    public function list_attributes() {
    		wc_get_template( 'single-product/product-attributes.php', array(
    			'product'    => $this
    		) );
    	}

    Идем в папку за нужным файлом plugins/woocommerce/templates/single-product/product-attributes.php
    Помимо прочего в нем видим
    $attributes = $product->get_attributes();
    .........
    <?php foreach ( $attributes as $attribute ) :
    		if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
    			continue;
    		} else {
    			$has_row = true;
    		}
    		?>
    		<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
    			<th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
    			<td><?php
    				if ( $attribute['is_taxonomy'] ) {
    
    					$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				} else {
    
    					// Convert pipes to commas and display values
    					$values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
    					echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
    				}
    			?></td>
    		</tr>
    	<?php endforeach; ?>

    Адаптируйте под свои нужды. Я думаю, должно работать)

    P.S. Не забываем поглядывать в документацию. Вот полный список того, что можно сделать с $product https://docs.woocommerce.com/wc-apidocs/class-WC_P...
    Ответ написан
    Комментировать
  • Почему не работает код jquery в setTimeout?

    SagePtr
    @SagePtr
    Еда - это святое
    Контекст функции поменялся, this тоже поменялся. Используйте стрелочные функции, чтобы контекст не менялся, или внутри обработчика присваивайте this другой переменной, а в колбэке таймаута обращайтесь к ней и забудьте про this.
    Ответ написан
    Комментировать
  • Есть вариант обойти попадание в спам писем отправленных с помощью wp_mail без создания почты?

    @Fenix957
    1) Все эти DKIM, SPF, DMARC добавлять нужно на хостинге
    На яндексе не нужно. Но учтите Много писем будете слать яндекс блокнет отправку писем если вы делаете рассылки и тд. Даже если сделаете доменную почту на самом яндексе. Примерно через 30-90 писем. Такчто лучше настроить свой сервер
    2) Ответ исходя из первого делайте свою
    3) Нет не нужно. Вы из одного почтового ящика всем будете отправлять
    4) Грубо говоря да )
    5) если используйте яндекс то да. Но учтите яндекс потом блокнет рассылки. Если письма будут шаблонные
    6) Вам нужно подвердить что вы владелец домена и все письма подписывать от имени своего сервера. Т.к всем спам порядком надоел и многие без DKIM, SPF, DMARC не доверяют и шлют в спам
    Коротка так
    Может еще кто напишет покидает ссылки
    Ответ написан
    Комментировать
  • Как сделать поиск по полям ACF?

    @weart
    У меня на одном из последних проектов вот такая комбинация работает

    function cf_search_join( $join ) {
    	global $wpdb;
    	if ( is_search() ) {
    		$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    	}
    	return $join;
    }
    add_filter( 'posts_join', 'cf_search_join' );
    
    
    function cf_search_where( $where ) {
    	global $pagenow, $wpdb;
    	if ( is_search() ) {
    		$where = preg_replace(
    			"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
    			"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    	}
    	return $where;
    }
    add_filter( 'posts_where', 'cf_search_where' );
    
    
    function cf_search_distinct( $where ) {
    	global $wpdb;
    	if ( is_search() ) {
    		return "DISTINCT";
    	}
    	return $where;
    }
    add_filter( 'posts_distinct', 'cf_search_distinct' );
    Ответ написан
    1 комментарий
  • Почему the_date() в WordPress выводится через раз в цикле?

    dimasmagadan
    @dimasmagadan
    это стандартное поведение этой функции

    When there are multiple posts on a page published under the SAME DAY, the_date() only displays the date for the first post (that is, the first instance of the_date()). To repeat the date for posts published under the same day, you should use the Template Tag the_time() or get_the_date() (since 3.0) with a date-specific format string.

    https://codex.wordpress.org/Function_Reference/the_date

    используйте the_time() или get_the_date()
    Ответ написан
    Комментировать
  • Что имел в виду автор учебника, устанавливая свойство overflow?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Что имелось в виду?

    Это и имелось в виду. То, что написано в комментарии.

    Родитель ничего не знает о высоте дочерних флоатов.
    Если все дети флоаты, то высота родителя будет нулевой.
    Чтобы она перестала быть нулевой и стала вести себя как высота по контенту, использовали overflow.

    Если вы зададите родителю фон или даже лучше бордер и проведете эксперимент, то всё сами увидите.
    Ответ написан
    4 комментария
  • Посыпалась разметка - дробные значения у параметров высоты?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Ctrl+0 проверь, чувствую, масштаб экрана неправильный.
    Ответ написан
    Комментировать
  • Как растянуть фон svg на весь экран?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Как закрывать выпадающее меню при клике вне его самого?

    @everdimension
    Использовать e.stopPropagation() — плохая идея. Читайте

    Правильный способ — проверять, является ли target сделанного клика элементом меню или чем-то другим. Если это не меню — закрывать меню.

    Появляется правильный вопрос, что делать, если кликнутый элемент — дочерний элемент меню? Для этого есть офигенный метод node.contains()

    Собственно, вся требуемая проверка получается совсем несложная — gist
    var el = document.getElementById('el');
    
    document.addEventListener('click', outsideEvtListener);
    
    function outsideEvtListener(evt) {
        if (evt.target === el || el.contains(evt.target)) {
            // клик внутри
            return;
        }
        // код для закрытия меню, например el.classList.add('hidden')
       
        // не забыть убрать слушатель событий (не для каждой имплементации требуется)
        document.removeEventListener(outsideEvtListener);
    }
    Ответ написан
    2 комментария
  • Как переключить на нужный слайд если loop?

    0xD34F
    @0xD34F
    let linkIndex = link.dataset.first;
    <...>
    mySwiper.slideToLoop(linkIndex);

    Значения какого типа содержаться в dataset? Строки. А индекс - это что? Число. Ну так сделайте из строки число.
    Ответ написан
    Комментировать
  • Почему не адаптивится svg в IE11?

    profesor08
    @profesor08
    Забудь про IE11. Не трать на него время.
    Ответ написан
    Комментировать
  • Как в инпуте убрать отрицательное значение?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    input type="number" min="0" value="1"
    Ответ написан
    Комментировать
  • Можно ли наложить прозрачный градиент на img?

    @fredaev
    Вот хорошая коллекция
    imagehover.io
    Ответ написан
    Комментировать
  • Почему slick slider сбивается при использовании fancybox?

    iamd503
    @iamd503
    Верстальщик
    Попробуйте эти свойства по переключать
    // Focus handling
      // ==============
    
      // Try to focus on the first focusable element after opening
      autoFocus: true,
    
      // Put focus back to active element after closing
      backFocus: true,
    
      // Do not let user to focus on element outside modal content
      trapFocus: true,
    Ответ написан
    1 комментарий
  • Как сделать вот это на СSS?

    rek888
    @rek888
    Интернет коммерция
    <html>
      <head>
        <style>@keyframes telik{0%{box-shadow:0 5px 10px 2px #fff}to{box-shadow:0 5px 10px 3px #fff}}body{background:#000}.circle{position:absolute;left:400px;top:80px;border:1px solid #000;border-radius:100%;width:10px;height:10px}.telik{background:#fff;width:500;height:250;position:relative;margin:100px auto;border-radius:3px;animation:.01s linear 0s infinite alternate telik}</style>
    </head>
    <body>
      <div class="telik">
        <span class="circle"></span>
      </div>
    </body>
    </html>
    Ответ написан
    1 комментарий
  • Как настроить стиль выходного файла SASS в gulp?

    Eridani
    @Eridani
    Мимо проходил
    outputStyle
    :nested
    :compact
    :expanded
    :compressed
    gulp.task('sass', function () {
     return gulp.src('./sass/**/*.scss')
       .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
       .pipe(gulp.dest('./css'));
    });
    Ответ написан
    4 комментария