Страницы

Поиск по вопросам

Показаны сообщения с ярлыком internet-explorer. Показать все сообщения
Показаны сообщения с ярлыком internet-explorer. Показать все сообщения

четверг, 2 апреля 2020 г.

Баг IE: контейнер заканчивается раньше дочернего центровщика

#html #css #internet_explorer

                    
Очень трудно было выбрать тему для данного вопроса: "У меня не так отображается,
помогите!" - это не тема, но дело в том, что в данном вопросе рассматривается очередной
баг Internet Explorer (то есть в других браузерах всё отображается нормально), причину
которого никак не удаётся выяснить.

К задаче. У нас типичный блок .Wrapper, который имеет ширину 100% от окна, и центровщик
(margin: 0 auto;) с указанными min-width и max-width:



В IE следующий баг: Wrapper почему-то заканчивается раньше, чем надо, а центровщик
с содержимым перекрывает следующую такую же компоновку ниже:



Такой баг был замечен уже практически на свёрстанном лендинге, а потому было очень
трудно сделать минимальный работающий пример. Я постарался убрать весь лишний HTML
для данного примера, но CSS тоже самое было сделать очень трудно. 

Если Вы запустите пример в IE (ещё раз повторюсь, что в других браузерах всё нормально),
то увидите следующее:



Расскажу о том, что обнаружил сам. Сама по себе верхняя компоновка Wrapper-Centerer-Содержимое
отображается корректно (её содержимое - таблица). Баг появляется при появлении нижней
комбинации. Вообще там есть внутренний контейнер с зафлоченными элементами, но всё
равно неясно, в чём проблема. Естественно, везде где надо, есть overflow: hidden;.
    


Ответы

Ответ 1



К section добавьте flex: 1 0 auto: https://jsfiddle.net/Kniha/mLh63fao/3/ В примере добавлено через section[class$='-RootWrapper'].

понедельник, 30 марта 2020 г.

Не открываются внутренние страницы сайта и английская версия в IE11

#javascript #html #css #internet_explorer


Есть сайт https://playvr.ru/ 

Если попробовать открыть его в IE11 - то работает только главная страница, при переходе
на внутренние страницы - перенаправляет обратно на главную и показывает такое сообщение: 



Кто-то сталкивался с таким, у кого какие идеи есть?

Кроме jQuery на фронте никаких особых библиотек не использую (хотя если бы ошибка
была в JS - он бы в консоли показал это).

Еще неделю назад все работало отлично,
во всех остальных браузерах - так же все хорошо.
    


Ответы

Ответ 1



Ты как-то криво перенаправляешь Тут вопрос, почему оно в Chrome правильно работает. Ещё посмотри на свой .htaccess Возможно там что-то захарткожено.

Ответ 2



То что IE не выдает ошибок в консоли не значит, что в нем нет проблем! То что "съедают и сглаживают" современные браузеры, более старые и IE не воспринимают! Проверьте ваш сайт на валидацию: validator.w3.org/.../playvr.ru - Там уйма грубейших ошибок (div перед body, не правильное использование ссылок и href, ...)! Еще один тестировщик сео, но отображает все возможные проблемы сайта. Он вот показывает ошибки по пунтку Уязвимость URL и предупреждения по внутренним страницам (ошибки опять же со ссылкми). Плюс тестировщик оптимизации сайта - gtmetrix.com/.../playvr.ru , который указывает на ошибки с подробным описанием как решить. Вывод: Исправьте ошибки на сайте, оптимизируйте его, а потом задавайте такие вопросы, если они еще останутся)

воскресенье, 29 марта 2020 г.

Как добавить свойство filter drop-shadow в ie11?

#css #css3 #svg #internet_explorer #filter


Есть прозрачная картинка с декоративным шрифтом при ховере на которую накладывается
filter со свойством drop-shadow.

Как применить аналогичный эффект в ie11 ?

Код


img:hover {
  filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255, 255, 255,
0.5));
  -webkit-filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255,
255, 255, 0.5));
}




    


Ответы

Ответ 1



Как вариант, можно использовать svg фильтры, поддержка дает зеленый цвет. Ниже в примере я наложил img и svg с фильтром друг на друга, чтобы при hoverе плавно показывать фильтр через opacity и transition. Другого варианта я пока не придумал) .filter-wrap { position: relative; } .filter-wrap:hover .filter-wrap__svg { opacity: 1; } .filter-wrap__image { position: relative; z-index: 2; } .filter-wrap__svg { position: absolute; left: 0; top: 0; opacity: 0; transition: opacity 200ms ease-out; }


четверг, 19 марта 2020 г.

Дробные пиксели

#gwt #html #internet_explorer #css


Я всегда считал, что значения в px  могут быть только целыми числами. Но недавно,
отлавливая ошибку в Internet Explorer 10 обнаружил в панели разработчика следующее:



Дробные значения в пикселях везде.

При этом в GWT метод getClientWidth/Height() возвращает только целые значения. Как
сделать совместимость с IE10? У меня во многих местах нужно один абсолютно позиционированный
элемент отображать ровно над другим, а в IE10 он "дергается" (смещение менее, чем на 1 px).

И еще такой вопрос: а остальные величины (offset, padding, margin, coordinates) могут
быть дробными в px?
    


Ответы

Ответ 1



Дробное значение быть может, но это, скорее "неумность" разработчиков, или же "неумность" браузера при высчитывании ширины/высоты определенного DOM-элемента, установленного в дробное значение в процентах, например:
Браузер в таком случае производит простейшие математические действия для преобразования процентного соотношения в пиксельное без последующего преобразования результата в целое число(из дробного). А вообще, дробное значения пикселя - это, конечно же, абсурд. Нельзя "закрасить" половину пикселя или же его треть. Должно быть понятно, что 123.86px == 124px

Ответ 2



@Trash я преобразовал коммент к @Dexter в ответ т.к. считаю что он вполне имеет право быть ответом. Вообще то "css пиксель" состоит не из одного реального пикселя и его размер зависит от масштаба/браузера и число css пикселей может быть не целым! Вот статья

суббота, 7 марта 2020 г.

Угол под 45 градусов у div

#html #css #css3 #internet_explorer #clip_path


Друзья, может кто-то сталкивался с подобной задачей...
Необходимо у div срезать углы (верхний-левый и нижний правый), под углом 45 градусов.

реализовал через clip-path

    .corner45top {
    -webkit-clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: url("#swipe__clip-path");
    background-color: #FFFFFF;
    box-shadow: 0 1px 6px 0 rgba(86,86,86,0.25);
}

.corner45bottom {
    -webkit-clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%);
    clip-path: url("#swipe__clip-path-bottom");
    background-color: #FFFFFF;
    box-shadow: 0 1px 0 0 rgba(86,86,86,0.25);
}


    
        
            
        
     

   
    
        
            
        
     



Но все эти "красивости" никак не работают в браузере EDGE, есть ли какой-то простой
вариант вылечить это?
Мог бы сделать углы например картинкой, но за блоками есть background-image цветной(
    


Ответы

Ответ 1



Для этого нам на помощь приходит SVG , подходит такой вариант ?

Ответ 2



Делаем маску с помощью overflow:hidden. Угол получаем поворотом элемента на 45 градусов transform:rotate(-45deg) (внутренний элемент вертим обратно, чтобы был ровно). С помощью отступов margin регулируем глубину среза. .container{ transform:rotate(-45deg); overflow:hidden; height: 160px; margin-top: -30px; } .inside{ transform:rotate(45deg); background:#090; height:100px; width:200px; margin:30px auto; }
Тестовый блок


воскресенье, 1 марта 2020 г.

Почему не работает js код на IE любой версии?

#javascript #internet_explorer


Почему не работает js код на IE любой версии? 





Код:

var titleSearch = `
    

Поиск `+ quantityProduct +`

`;


Ответы

Ответ 1



P.S. Решил сделать вопрос-ответ по причине того, что на поиски ответа убил порядком нескольких дней (а потом еще пару дней менял все на кавычки), надеюсь кому-либо это будет полезно. (Если есть другое решение, буду рад ответам в комментарии). IE не поддерживает шаблонные строки ``. Весь код, который содержит в себе подобные символы `, придется переписать на кавычки и конкатенацию (сложение, пример: "Hello" + "world!"). Решение: var titleSearch = '
' + '
' + '
' + '

Поиск (Всего 1 товар)

' + '
' + '
' + '
';

среда, 26 февраля 2020 г.

закрыть IE с помощью JS

#javascript #internet_explorer


что нужно прописать в консоли чтобы браузер сразу закрылся? 

моя попытка: 
    


Ответы

Ответ 1



window.open('','_self').close();

вторник, 25 февраля 2020 г.

Сайт в IE показывается по умолчанию в режиме совместимости

#html #internet_explorer #браузер #кроссбраузерность


Почему сайт http://skb.sfolt.ru/ показывается по умолчанию в режиме Стандарт, а http://milliommetr.ru/miko7
- в режиме совместимости? Как сделать так, чтобы у всех пользователей при переходе
на этот сайт стоял режим Стандарт? Если дело в доктайпах, проверила все страницы на
сайте, везде доктайп есть.    


Ответы

Ответ 1



Используйте следующий тэг: Если есть возможность, вместо edge указывайте конкретную версию IE. Например, 8 или 10. Использовать edge следует с осторожностью, поскольку: Веб-разработчикам рекомендуется использовать этот режим только на тестовых страницах. Возможны непредсказуемые результаты при рендеринге контента страницы в будущих версиях Windows Internet Explorer. Кроме того, если у пользователя режим совместимости включен по умолчанию, то этот тэг не сработает. Нужно будет использовать особые заголовки. с помощью php или с помощью .htaccess (используется в HTML5 Boilerplate) Header set X-UA-Compatible "IE=Edge,chrome=1" # mod_headers can't match by content-type, but we don't want to send this header on *everything*... Header unset X-UA-Compatible Вопрос: Почему IE может переходить в "режим совместимости" на моем сайте? Ответ: На это есть несколько причин ранее при просмотре сайта была нажата кнопка "просмотр в режиме совместимости"; переключение произошло автоматически из-за некоего контента, вызвавшего ошибку рендерера IE и вынудившего его откатиться на старую версию рендерера; режим совместимости был включен по умолчанию для всех сайтов; IE посчитал сайт частью вашей интрасети и переключился в режим совместимости; сайт попал в список Microsoft, как сайт, требующий включения режима совместимости;

Ответ 2



Вот подробная схема взаимодействия IE и режима документов: Determining IE9’s Document Mode

пятница, 31 января 2020 г.

IE 10-11 не видит условные комментарии

#html #internet_explorer #css #if


Подключаю в хедере 
 

IE8 видит нормально и меняет фон головы, а вот IE11 и 10 не воспринимают эту систему,почему
и как это исправить, на всякий

    


Ответы

Ответ 1



http://msdn.microsoft.com/en-us/library/ie/hh801214%28v=vs.85%29.aspx A page using Conditional Comments worked as intended in Windows Internet Explorer 9, but no longer works in Internet Explorer 10.

Ответ 2



Поддержка условных комментариев в стандартном режиме и режиме совместимости Internet Explorer 10 была удалена для улучшения взаимодействия и совместимости с HTML5. Это означает, что условные комментарии теперь обрабатываются как обычные комментарии, так же как в других браузерах. Это изменение может повлиять на страницы, написанные специально для Windows Internet Explorer, или страницы, использующие определитель браузера и подстраивающиеся под Internet Explorer. Страница, использующая условные комментарии, работает нормально в Windows Internet Explorer 9, но не работает в Internet Explorer 10. Используйте css хак: @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { /* стили только для IE10 */ }

Ответ 3



Да, спасибо для 10 и 11 версии подключается так Вы используйете IE

воскресенье, 26 января 2020 г.

Безразмерная верстка, непонятный отступ [закрыт]

#android #css #android_layout #internet_explorer #responsive


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 2 года назад.
                                                                                
           
                
        
Вот код



window.onload = window.onresize = function() {
    this.timeout && clearTimeout(this.timeout);
    this.timeout = setTimeout(function() {
        var image =  document.getElementsByTagName('img')[0];
    
        document.documentElement.style.fontSize = image.offsetHeight + '%';   
    }, 10);
    
}
html, body {
    height: 100%;
    width:100%;
    margin: 0;
}
.table {height: 100%; width:100%; display:table;}
.column {
    height: 100%;
    display: table-cell;
    border: 1px solid green;
    vertical-align: top;
}

.column-img {
    display: table-cell;
    height: 100%;
    background: red; /* for debugging */
}

img {
    display: block;
    height: 100%;
}
Content DIV, here will be tables and some another content
работает в IE9, Android Browser и т.п. Слева - резиновый отступ, справа - div с контентом. Ширина отступа зависит от высоты вьюпорта, поэтому сделал через gif-распорку с нужными пропорциями. Распорка и контент должны по высоте быть 100% от вьюпорта, контент занимает все место справа. Если сильно сжать в высоту пример, то вылезает дополнительный глючный отступ красного цвета. Как сделать, чтобы его не было? Есть просьба не предлагать верстать в JS... Спасибо. UPDATE На старом CSS без vh units задачу решить невозможно. Сделал на Javascript. Закрываю ответ - либо js, либо vh units (ныне работает везде)


Ответы

Ответ 1



Глюк браузера, .column-img {5px}, а img{5px}, только перерисовка в браузере спасет. Обновление Если убрать display: block; и добавить, то браузер перерисует опять страничку, и отступ исчезнет. Возможно, проблема в font-size, боюсь, тут поможет эксперимент, т.к. используется хак с gif картинкой, чего, конечно, нет в спецификациях. ;) Попробуйте "поиграть с изменением размера".

Как получить DOM через СОМ объект

#cpp #internet_explorer #dom #com


Я хочу программно нажимать на кнопки сайта. Для этого решил использовать СОМ объект
InternetExplorer. Выгрузить его в DOM  и там уже кликать по кнопкам. Делаю это так:

#include "stdafx.h"
#include "windows.h"
#import "progid:InternetExplorer.Application"

int _tmain(int argc, _TCHAR* argv[])
{

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
bool showIE = true;
SHDocVw::IWebBrowserAppPtr  ptrIE(_T("InternetExplorer.Application"));

ptrIE->Visible = (showIE ? VARIANT_TRUE : VARIANT_FALSE);

ptrIE->Navigate("https://vk.com");
int i = 0;
// ждем пока загрузится страница по url
while (ptrIE->Busy)
    i++;

// получаем html-страницу как DOM (объектная модель документа)
//auto pdisp = ptrIE->Document;
IDispatch pdisp = (ptrIE->Document).GetInterfacePtr();
HRESULT hresult;
DISPID dispid;
OLECHAR *szMember = L"querySelector";
hresult = pdisp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);

return 0;
}


Но при выполнении функции GetIDsOfNames программа вылетает с ошибкой access violation
reading location. Правильно ли я понимаю, что у меня в pdisp указатель в никуда?

UPDATE

Не надо было вызвывать GetInterfacePtr(), так как он возвращает указатель в никуда.
немного переделал код теперь он выглядит вот так:

#include "stdafx.h"
#include "windows.h"
#include "Mshtml.h"
#include "comutil.h"
#import "progid:InternetExplorer.Application"

int _tmain(int argc, _TCHAR* argv[])
{

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
bool showIE = true;
SHDocVw::IWebBrowser2Ptr ptrIE(_T("InternetExplorer.Application"));

ptrIE->Visible = (showIE ? VARIANT_TRUE : VARIANT_FALSE);

HRESULT hr = ptrIE->Navigate("myUrl");
if (!SUCCEEDED(hr))
{
}
int i = 0;
// ждем пока загрузится страница по url
while (ptrIE->Busy)
    i++;

// получаем html-страницу как DOM (объектная модель документа)
IHTMLDocument3 *doc3;
hr = ptrIE->Document->QueryInterface(IID_IHTMLDocument3, (void**)&doc3);
if FAILED(hr) return(hr);

IHTMLElement *parentElem;
hr = doc3->getElementById(_com_util::ConvertStringToBSTR("intro-step-4"), &parentElem);
if FAILED(hr) return(hr);

IDispatch * pDisp;
hr = parentElem->get_children(&pDisp);
parentElem->Release();
if FAILED(hr) return(hr);

IHTMLElementCollection *elemCol;
hr = pDisp->QueryInterface(IID_IHTMLElementCollection, (void **)&elemCol);  
pDisp->Release();
if FAILED(hr) return(hr);

_variant_t index = 0;
hr = elemCol->item(index, index, &pDisp);
if FAILED(hr) return(hr);

IHTMLElement * childElem;
hr = pDisp->QueryInterface(IID_IHTMLElement, (void **)&childElem);
if FAILED(hr) return(hr);

BSTR *pszText = new BSTR;
hr = childElem->click();
if FAILED(hr) return(hr);
hr = childElem->get_innerText(pszText);
if FAILED(hr) return(hr);

    return 0;
}


Судя по тексту который я получаю в hr = childElem->get_innerText(pszText) я нашел
нужный мне элемент. Но метод click() хотя и возвращает S_OK, но клик не производит.
По крайней мере никакой реакции в открытом браузере нет. Что делать?
    


Ответы

Ответ 1



Используйте умные COM-указатели _COM_SMARTPTR_TYPEDEF(IHTMLDocument2, __uuidof(IHTMLDocument2)); _COM_SMARTPTR_TYPEDEF(IHTMLDocument3, __uuidof(IHTMLDocument3)); IDispatchPtr d = ptrIE->Document; IHTMLDocument2Ptr doc2; IHTMLDocument3Ptr doc3; d->QueryInterface(IID_IHTMLDocument2, (void**)&doc2); doc2->... d->QueryInterface(IID_IHTMLDocument3, (void**)&doc3); Я попробовал получить указатель на интерфейс IHtmlSelector (чтобы использовать метод querySelector, но у меня не вышло). У себя я делаю так: if ( SUCCEEDED(doc3->getElementsByTagName(L"HTML", &collection)) ){ long count = 0; if (SUCCEEDED(collection->get_length(&count)) && count ) { IDispatch* disp = 0; VARIANT v; ::VariantInit(&v); v.vt = VT_I4; v.iVal = 0; IElementSelectorPtr selector; collection->item(v, v, &disp); disp->QueryInterface(IID_IElementSelector, (void**)&selector); selector->querySelector(...); } } Но здесь это не работает. Правда IWebBrowserApp считается устаревшим. Используйте IWebBrowser2.

пятница, 24 января 2020 г.

добавление функционала в Javascript (поиск в массиве), не поддерживаемого IE

#javascript #функции #internet_explorer #prototype #совместимость


Приветствую

Использую для поиска в массиве метод Array.prototype.find()

var dialogNode = xml.find(function(element){
    var objectParams = myGetTagParams(element.nodeName);

    return (objectParams.type == 'my:dialog');
});


но в IE этот функционал не поддерживается :( (а IE используют некоторые пользователи
сайта)

поэтому для них пришлось переписать код

var dialogNode = '';

for (var index in xml)
{
    var element = xml[index];

    var objectParams = myGetTagParams(element.nodeName);

    if (objectParams.type == 'my:dialog')
    {
        dialogNode = element;
        break;
    }
}


Это не очень удобно, когда в разных частях сайта используются конструкции типа "если
у пользователя один браузер - выполняй это, а если другой - выполняй это"

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

if (Array.prototype.find == undefined)
    Array.prototype.find = function(){}


?

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


Ответы

Ответ 1



Кажется разобрался! Главное - если прототипа не существовало, приходится внедрять его несколько иным путём, чем показано в приведённых в вопросе примерах, а именно использовать Object.defineProperty: if (!Array.prototype.find) { Object.defineProperty(Array.prototype, "find", { value: function(predicate) { if (this == null) { throw new TypeError('Array.prototype.find called on null or undefined'); } if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } var list = Object(this); var length = list.length >>> 0; var thisArg = arguments[1]; var value; for (var i = 0; i < length; i++) { value = list[i]; if (predicate.call(thisArg, value, i, list)) { return value; } } return undefined; }, }); }

воскресенье, 22 декабря 2019 г.

Grid-разметка в IE11

#css #вёрстка #internet_explorer #css_grid


Здравствуйте, подскажите, как мне изменить стили grid-разметки под IE11, во всех
браузерах, кроме этого отображается корректно. Даже gulp-autoprefixer не спасает (не
знаю в чем причина), в общем сам пример:



.first-row {
  display: grid;
  grid-gap: 16px;
  margin: 16px 0;
  grid-template-columns: 1fr 1fr 1fr;
  background-color: #fff;
  color: #444;
}

.first-row .box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  overflow: hidden;
}

.col0 {
  grid-column: 1;
  grid-row: 1 / 3;
  height: 50px;
}

.col1 {
  grid-column: 2;
  grid-row: 1 / 2;
  height: 17px;
}

.col2 {
  grid-column: 2;
  grid-row: 2;
  height: 17px;
}

.col3 {
  grid-column: 3;
  grid-row: 1 / 3;
  height: 50px;
}

.second-row {
  display: grid;
  grid-gap: 16px;
  margin: 16px 0;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  background-color: #fff;
  color: #444;
}

.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
  overflow: hidden;
}

.col4 {
  grid-column: auto;
  grid-row: 1;
  height: 17px;
}

.col5 {
  grid-column: auto;
  grid-row: 1;
  height: 17px;
}

.col6 {
  grid-column: auto;
  grid-row: 1;
  height: 17px;
}

.col7 {
  grid-column: auto;
  grid-row: 1;
  height: 17px;
}

Каталог товаров

1

2

3

4

5

6

7

8

Интересует вопрос по префиксам, как правильно под IE11 записать, например, grid-row: 1 / 3 или grid-gap: 16px, в документации не очевидно...


Ответы

Ответ 1



Не добавляйте фиксированную высоту для самих клеток грида. Добавляйте высоту их детям. К сожалению, автопрефиксов для гридов в IE будет недостаточно. И вообще, автопрефиксы бывают разные с разной степенью качества и направленности, универсальных нет. Но выход есть, и это миксины. А если понимать особенности гридов в IE, то можно и вручную: /** * Eric Meyer's Reset CSS v2.0 (https://meyerweb.com/ eric/tools/css/reset/) * http://cssreset.com */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } .first-row { display: -ms-grid; display: grid; grid-gap: 16px; margin: 16px 0; -ms-grid-columns: 1fr 16px 1fr 16px 1fr; -ms-grid-rows: 1fr 16px 1fr; grid-column-gap: 16px; grid-row-gap: 16px; grid-template-columns: 1fr 1fr 1fr; background-color: #fff; color: #444; } .first-row .box { background-color: #444; color: #fff; border-radius: 5px; display: flex; justify-content: center; align-items: center; position: relative; overflow: hidden; } .col0 { -ms-grid-column: 1; -ms-grid-column-span: 1; grid-column: 1; -ms-grid-row: 1; -ms-grid-row-span: 3; grid-row: 1 / 3; } .col0 h2{ height: 50px;} .col1 { -ms-grid-column: 3; -ms-grid-column-span: 1; grid-column: 2; -ms-grid-row: 1; -ms-grid-row-span: 1; grid-row: 1 / 2; } .col1 h2{ height: 17px;} .col2 { -ms-grid-column: 3; -ms-grid-column-span: 1; grid-column: 2; -ms-grid-row: 3; -ms-grid-row-span: 1; grid-row: 2; } .col2 h2{ height: 17px;} .col3 { -ms-grid-column: 5; -ms-grid-column-span: 1; grid-column: 3; -ms-grid-row: 1; -ms-grid-row-span:3; grid-row: 1 / 3; } .col3 h2{ height: 50px;} .second-row { display: -ms-grid; display: grid; grid-gap: 16px; margin: 16px 0; -ms-grid-columns: 1fr 16px 1fr 16px 1fr 16px 1fr; grid-template-columns: 1fr 1fr 1fr 1fr; background-color: #fff; color: #444; } .box { background-color: #444; color: #fff; border-radius: 5px; display: flex; justify-content: center; align-items: center; position: relative; overflow: hidden; } .col4 { -ms-grid-column: 1; -ms-grid-column-span: 1; grid-column: auto; -ms-grid-row: 1; -ms-grid-row-span: 1; grid-row: 1; } .col4 h2{ height: 17px;} .col5 { -ms-grid-column: 3; -ms-grid-column-span: 1; grid-column: auto; -ms-grid-row: 1; -ms-grid-row-span: 1; grid-row: 1; } .col5 h2{ height: 17px;} .col6 { -ms-grid-column: 5; -ms-grid-column-span: 1; grid-column: auto; -ms-grid-row: 1; -ms-grid-row-span: 1; grid-row: 1; } .col6 h2{ height: 17px;} .col7 { -ms-grid-column: 7; -ms-grid-column-span: 1; grid-column: auto; -ms-grid-row: 1; -ms-grid-row-span: 1; } .col7 h2{ height: 17px;} a{color:#fff}

Каталог товаров

1

2

3

4

5

6

7

8

Особенность состоит в основном в том, что в ие нужно прописывать весть список колонок вместе с отступами - gap для ие не существует. То есть, если у вас ряд 1fr 1fr с гапом в 16px, то в ие это будет ряд 1fr 16px 1fr. Соответственно место у второй колонки будет не второе, а третье. А ширину колонки(ряда) с ее местом тоже нужно писать в разных свойствах -ms-grid-column-span - ширина, -ms-grid-column - место колонки.

Ответ 2



Нужны префиксы и IE требует явно прописывать ячейки грида. IE не поддерживает grid-gap - вместо него надо использовать лишние пустые ячейки. Вместо высоты лучше указывать высоту рядов. Для объединения ячеек надо использовать span в соответствующем виде. Вот для первой строки, для второй аналогично: https://jsfiddle.net/ntv0n8s1/1/ .first-row { display: -ms-grid; display: grid; grid-gap: 16px; margin: 16px 0; -ms-grid-columns: 1fr 16px 1fr 16px 1fr; grid-template-columns: 1fr 1fr 1fr; -ms-grid-rows: 17px 16px 17px; grid-template-rows: 17px 17px; background-color: #fff; color: #444; } .box { background-color: #444; border-radius: 5px; border-radius: 5px; display: flex; justify-content: center; align-items: center; } .col0 { -ms-grid-column: 1; grid-column: 1; -ms-grid-row: 1; -ms-grid-row-span: 3; grid-row: span 2; } .col1 { -ms-grid-column: 3; grid-column: 2; -ms-grid-row: 1; grid-row: 1; } .col2 { -ms-grid-column: 3; grid-column: 2; -ms-grid-row: 3; grid-row: 2; } .col3 { -ms-grid-column: 5; grid-column: 3; -ms-grid-row: 1; -ms-grid-row-span: 3; grid-row: span 2; }

Каталог товаров

1

2

3

4



пятница, 20 декабря 2019 г.

Как подключить отдельные стили для IE10+?

#css #internet_explorer #style


Microsoft-то объявил, что теперь IE всё поддерживает, но по факту — c флексами беда,
с бутстрапом — беда (по разному принимают отступы).

Как можно эти проблемы решить теперь, если условные комментарии отменили в версиях IE10+?
    


Ответы

Ответ 1



вот есть вариант с использоанием яваскрипт javascript var doc = document.documentElement; doc.setAttribute('data-useragent', navigator.userAgent); css html[data-useragent*='MSIE 10.0'] h1 { color: blue; } оригинал

Ответ 2



Еще есть такой css хак: @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { /* IE10 IE11 */ } Если вам необходимо использовать его в сочетании с другими медиа-запросами, например, для организации адаптивной верстки, то можно объединять запросы. Например: @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) and (max-width : 768px){ /* IE10 IE11 до 768px по ширине*/ }

Ответ 3



Чистый CSS: условные стили для браузера (хаки) Под .selector подразумевается нужный вам селектор. /* Internet Explorer 11+ */ _:-ms-fullscreen, :root .selector { /* Нужные стили */ } /* Internet Explorer 10+ */ _:-ms-lang(x), .selector { /* Нужные стили */ } /* Internet Explorer 9+ */ _::selection, .selector { /* Нужные стили */ } /* Также можно так для IE10+ */ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { /* Нужные стили */ } Отдельные файлы для каждого браузера и их подключение через JavaScript Создаёте отдельный файл, к примеру, ie.css. Далее подключаете его в зависимости от браузера. Определяете является ли клиентский браузер IE. Также можете определять версию и для неё давать специфические стили. Если, да то создаёте элемент link и указываете ему href на наш файл ie.css. Пример кода var isIE = false || !!document.documentMode; if (isIE) { var head = document.getElementsByTagName("head")[0]; var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "ie.css"; head.appendChild(link); }

Ответ 4



/* стили только для IE9 */ @media screen and (min-width:0\0) { button:active, button:focus { top: -1px; left: -1px; } } /* стили только для IE10 и IE11 */ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { button:active, button:focus { top: -1px; left: -1px; } }

среда, 18 декабря 2019 г.

Крестик очистки в IE 10

#html #css #html5 #css3 #internet_explorer


В IE 10 в каждом поле input при вводе текста появляется крестик очистки, из-за чего
едет верстка. Как убрать крестик очистки в IE 10?
    


Ответы

Ответ 1



По умолчанию в IE 10 такой крестик ставится на input, убрать его можно так: input::-ms-clear { display: none; }

Ответ 2



К сожалению, этот способ не работает в том случае, когда в IE включён режим совместимости, так как IE недостаточно хорошо его эмулирует. Кто-нибудь знает другие способы убрать этот крестик? (Чтобы работало в режиме совместимости) От себя добавлю, что также работает этот вариант: ::-ms-clear { width : 0; height: 0; } Некоторые считают, что он даже лучше. Вопрос по поводу совместимости остаётся открытым.

воскресенье, 8 декабря 2019 г.

Скрипт некорректно работает в браузере Internet Explorer. Как исправить?

#javascript #jquery #internet_explorer #браузер #прокрутка


Скрипт некорректно работает в браузере Internet Explorer. Во время прокрутки происходит
сильное дерганье блока то вверх то вниз. Как исправить?



$(function() {
    var $hor = $("#horizontal");
    $("body").css('padding-bottom', $(window).width()*2);
    var delta = 0;
    $(window).on('scroll', function () {
        var top = $(document).scrollTop();
        var width = $(window).width();
        var lim = $hor.position().top - (delta) - ($(window).height() - $hor.outerHeight())
/ 2;
        delta = Math.min(Math.max(top - lim, 0), width * 2);

        $(".horizontal:first", $hor).css({left : delta});
        $(".horizontal:last", $hor).css({left : -(width*2 - delta)});
        $("body").css({'padding-top': delta, 'padding-bottom': width*2 - delta});
    });
});
p {
    height: 500px;
}
#horizontal {
    position: relative;
    overflow: hidden;
    width: 100%;
    font-size: 3em;
    margin: 0;
    padding: 0;
    height: 250px;
}
#horizontal .horizontal {
    position: absolute;
    width: 100%;
    left: -100%;
    padding: 20px;
}
#horizontal .horizontal .h_blockquote {
    position: relative;
    width: 100%;
    margin: 0 auto;
    font-size: 24px;
    line-height: 1.3em;
    color: #000;
}

test

Скрипт некорректно работает в браузере Internet Explorer. Как исправить? Скрипт некорректно работает в браузере Internet Explorer. Как исправить?
Скрипт некорректно работает в браузере Internet Explorer. Как исправить? Скрипт некорректно работает в браузере Internet Explorer. Как исправить?

test


Ответы

Ответ 1



Исправить нельзя, потому что вначале происходит движение по event scroll и только потом срабатывает функция на scroll. (Вначале страница поднемается, а потом добавляется padding к bady). Как вариант, отлавливать прокрутку ролика мышки: (в коде надо только правельно выставить границы) var boo = true; var delta = 10; $("body").css('height', "6000px"); var $hor = $("#horizontal"); $(document).ready(function() { $('body').bind('mousewheel', function(e) { var width = $(window).width(); if (e.originalEvent.wheelDelta / 120 > 0) { boo = false; $("body").css("overflow", "inherit"); if ($(document).scrollTop() < 250 && !boo && (delta > 0 - $(".h_blockquote_wrap").width())) { $("body").css("overflow", "hidden"); delta -= 10; $(".horizontal").css({ left: delta + "px" }); if (delta < 0 - $(".h_blockquote_wrap").width()) { $("body").css("overflow", "inherit"); boo = true; } } } else { boo = true; $("body").css("overflow", "inherit"); if ($(document).scrollTop() > 250 && boo && (delta < $("#horizontal").width())) { $("body").css("overflow", "hidden"); delta += 10; $(".horizontal").css({ left: delta + "px" }); if (delta > $("#horizontal").width()) { $("body").css("overflow", "inherit"); boo = false; } } } }); }); p { height: 500px; } #horizontal { position: relative; overflow: hidden; width: 100%; font-size: 3em; margin: 0; padding: 0; height: 250px; outline: 2px solid red; } .horizontal { display: block; position: absolute; width: 100%; left: -100%; padding: 20px; float: left; } .h_blockquote { position: relative; width: 100%; margin: 0 auto; font-size: 15px; line-height: 1.3em; color: #000; }

test

Скрипт некорректно работает в браузере Internet Explorer. Как исправить?

test



четверг, 5 декабря 2019 г.

Как убрать дефолтную анимацию нажатия на button в IE 9, 10, 11?

#javascript #html #css #вёрстка #internet_explorer


В IE 9, 10, 11 прыгают button при нажатии. Свойства margin: 0 и padding: 0 на псевдоклассы
:active и :focus проблемы не решают. Пример съезжания кнопок на видео:
https://monosnap.com/file/Lcln7cTFX0lPwWjbeu5JnQA5ikcefn
    


Ответы

Ответ 1



Глобальное решение без лишних вложенных элементов: button { padding: 10px; background: #fff; border: 1px solid; } button:active, button:focus { position: гelative; background: #999; } /* стили только для IE9 */ @media screen and (min-width:0\0) { button:active, button:focus { top: -1px; left: -1px; } } /* стили только для IE10 и IE11 */ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { button:active, button:focus { top: -1px; left: -1px; } }

Ответ 2



button > span, button:active span, button:focus span { position:relative; top: 0; left: 0; }

Ответ 3



Решение тестировалось на IE 11. Работает фокус с вычитанием по одному пикселю слева и сверху у внутренних полей и прибавлением справа и снизу, соответственно: button { padding: 10px; background: #fff; border: 1px solid; } button:active { padding: 9px 11px 11px 9px; background: #999; }

Ответ 4



Самое простое и надежное: заменить

воскресенье, 9 июня 2019 г.

Баг IE: контейнер заканчивается раньше дочернего центровщика

Очень трудно было выбрать тему для данного вопроса: "У меня не так отображается, помогите!" - это не тема, но дело в том, что в данном вопросе рассматривается очередной баг Internet Explorer (то есть в других браузерах всё отображается нормально), причину которого никак не удаётся выяснить.
К задаче. У нас типичный блок .Wrapper, который имеет ширину 100% от окна, и центровщик (margin: 0 auto;) с указанными min-width и max-width

В IE следующий баг: Wrapper почему-то заканчивается раньше, чем надо, а центровщик с содержимым перекрывает следующую такую же компоновку ниже:

Такой баг был замечен уже практически на свёрстанном лендинге, а потому было очень трудно сделать минимальный работающий пример. Я постарался убрать весь лишний HTML для данного примера, но CSS тоже самое было сделать очень трудно.
Если Вы запустите пример в IE (ещё раз повторюсь, что в других браузерах всё нормально), то увидите следующее:

Расскажу о том, что обнаружил сам. Сама по себе верхняя компоновка Wrapper-Centerer-Содержимое отображается корректно (её содержимое - таблица). Баг появляется при появлении нижней комбинации. Вообще там есть внутренний контейнер с зафлоченными элементами, но всё равно неясно, в чём проблема. Естественно, везде где надо, есть overflow: hidden;


Ответ

К section добавьте flex: 1 0 auto
https://jsfiddle.net/Kniha/mLh63fao/3/
В примере добавлено через section[class$='-RootWrapper']

пятница, 7 июня 2019 г.

Дробные пиксели

Я всегда считал, что значения в px могут быть только целыми числами. Но недавно, отлавливая ошибку в Internet Explorer 10 обнаружил в панели разработчика следующее:

Дробные значения в пикселях везде.
При этом в GWT метод getClientWidth/Height() возвращает только целые значения. Как сделать совместимость с IE10? У меня во многих местах нужно один абсолютно позиционированный элемент отображать ровно над другим, а в IE10 он "дергается" (смещение менее, чем на 1 px).
И еще такой вопрос: а остальные величины (offset, padding, margin, coordinates) могут быть дробными в px?


Ответ

Дробное значение быть может, но это, скорее "неумность" разработчиков, или же "неумность" браузера при высчитывании ширины/высоты определенного DOM-элемента, установленного в дробное значение в процентах, например:

Браузер в таком случае производит простейшие математические действия для преобразования процентного соотношения в пиксельное без последующего преобразования результата в целое число(из дробного). А вообще, дробное значения пикселя - это, конечно же, абсурд. Нельзя "закрасить" половину пикселя или же его треть. Должно быть понятно, что 123.86px == 124px

четверг, 23 мая 2019 г.

Угол под 45 градусов у div

Друзья, может кто-то сталкивался с подобной задачей... Необходимо у div срезать углы (верхний-левый и нижний правый), под углом 45 градусов.
реализовал через clip-path
.corner45top { -webkit-clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: polygon(5% -200%, 100% 0%, 100% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: url("#swipe__clip-path"); background-color: #FFFFFF; box-shadow: 0 1px 6px 0 rgba(86,86,86,0.25); }
.corner45bottom { -webkit-clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: polygon(0 -100%, 100% 0%, 98% 100%, 0% 100%, 0% 100%, 0% 100%); clip-path: url("#swipe__clip-path-bottom"); background-color: #FFFFFF; box-shadow: 0 1px 0 0 rgba(86,86,86,0.25); }

Но все эти "красивости" никак не работают в браузере EDGE, есть ли какой-то простой вариант вылечить это? Мог бы сделать углы например картинкой, но за блоками есть background-image цветной(


Ответ

Для этого нам на помощь приходит SVG , подходит такой вариант ?