Фильтр работает нормально, но фоновое изображение больше не находится внутри тела. Здесь вы сталкиваетесь с особым фоновым поведением , которое распространяет значение фона от тела к холсту и удаляет его из тела. Другими словами, ваш фон перемещается на верхний элемент, а фильтр остается на теле.
Чтобы заметить это, просто примените фон к элементу html, и вы отключите эффект распространения, таким образом, фильтр будет работать как положено:
body {
background-image: url('https://picsum.photos/200/300?image=0');
filter: grayscale(50%) blur(3px) brightness(10%);
height:200px; /*you need a height to see the image !*/
}
html {
background:red;
}
Между прочим, нецелесообразно применять фильтр ко всему телу, поскольку это также повлияет на содержимое. Если вы хотите отфильтровать только изображение, лучше рассмотрите псевдоэлемент, который будет вашим фоновым слоем и к которому вы можете применить фильтр, не затрагивая содержимое:
body {
position:relative;
z-index:0;
height:200px; /*you need a height to see the image !*/
}
body:before {
content:"";
position:absolute;
z-index:-1;
top:0;
left:0;
right:0;
bottom:0;
background-image: url('https://picsum.photos/200/300?image=0');
filter: grayscale(50%) blur(3px) brightness(10%);
}