Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.12.2019, 20:56
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Создание геометрических фигур на JS
Здравствуйте.

Возможно ли в пустой области 100x100px div создать без вспомогательных HTML тегов чёрный квадрат 50x50px на чистом JS.
Меня интересует именно сам процесс как это делается, возможно вы посоветуете какие то гайды или библиотеки которые позволяют такое делать?

Последний раз редактировалось Biotoxsin, 26.12.2019 в 23:32.
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2019, 22:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Biotoxsin,
https://developer.mozilla.org/ru/docs/Web/CSS/::before
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2019, 23:33
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Сообщение от рони Посмотреть сообщение
Biotoxsin,
https://developer.mozilla.org/ru/docs/Web/CSS/::before
Меня интересует возможно ли сделать это только на JS?
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2019, 23:34
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Эта небольшая задачка поможет мне понять как справиться с моей проблемой.
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2019, 23:54
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Biotoxsin
Эта небольшая задачка поможет мне понять как справиться с моей проблемой.
Сообщение от Biotoxsin
Возможно ли в пустой области 100x100px div создать без вспомогательных HTML тегов чёрный квадрат 50x50px.
Да! Существует множество способов это сделать... Вот некоторые примеры... Все эти стили могут быть установлены через JS, не требуются псевдо-элементы
<div></div><div></div>
<div></div><div></div>
<div></div><div></div>
<div></div><div></div>
<div></div><div></div>
<div></div><div></div>
<div></div><div></div>
<style>
/* вспомогательные объявления, не относящиеся к примеру */
html {
	background: linear-gradient(45deg, red, blue);
	min-height: 100%;
}

div {
	width: 100px;
	height: 100px;
	margin: 1em;
	display: inline-block;
}

div:nth-child(2n) {
	margin-left: calc(-1em - 100px);
	border: 1px dashed rgba(0, 0, 0, 0.5);
	box-sizing: border-box;
}

/* примеры квадратов 100×100 c внутренним квадратом 50×50 */
div:nth-child(1) {
	box-sizing: border-box;
	background: padding-box black;
	border: 25px solid transparent;
}

div:nth-child(3) {
	background: linear-gradient(black, black) no-repeat 25px 25px / 50px 50px;
}

div:nth-child(5) {
	box-shadow: inset 0 0 0 25px white, inset 0 0 0 50px black; /* вариант на белом фоне */
}

div:nth-child(7) {
	background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">\
		<path d="M25,25 h50 v50 h-50Z"></path>\
	</svg>');
}

div:nth-child(9) {
	content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">\
		<path d="M25,25 h50 v50 h-50Z"></path>\
	</svg>');
}

div:nth-child(11) {
	background: black;
	transform: scale(0.5); /* если не важна рамка, тень, другое содержимое и значение getBoundingClientRect */
}

div:nth-child(13) {
	background: black;
	clip-path: polygon(25px 25px, 75px 25px, 75px 75px, 25px 75px); /* если не важно содержимое */
}
</style>


Вариант №1 Любой способ, который был показан выше, может быть применён через JS например так...
<body><script>
const div = document.createElement("div");

Object.assign(div.style, {
	width: "100px",
	height: "100px",
	background: "linear-gradient(black, black) no-repeat 25px 25px / 50px 50px"
});

document.body.append(div);
</script>


Вариант №2 Также возможно сгенерировать картинку при помощи Canvas API.
<body><script>
const div = document.createElement("div");
const canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;

const context = canvas.getContext("2d");
context.fillRect(25, 25, 50, 50);

Object.assign(div.style, {
	width: `${canvas.width}px`,
	height: `${canvas.height}px`,
	background: `url("${canvas.toDataURL()}") center / contain`
});

document.body.append(div);
</script>


ЕЩЁ Вариант №3 Также возможно сгенерировать картинку при помощи CSS Paint API.
<body><script>
function paintBox() {
	class Box {
		paint(context, size) {
			context.fillRect(0.5 * (size.width - 50), 0.5 * (size.height - 50), 50, 50);
		}
	}
	registerPaint("box", Box);
}

CSS.paintWorklet.addModule(
	`data:text/javascript,${`(${paintBox})();`}`
);

const div = document.createElement("div");

Object.assign(div.style, {
	width: "100px",
	height: "100px",
	background: "paint(box)"
});

document.body.append(div);
</script>

Последний раз редактировалось Malleys, 27.12.2019 в 00:55.
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2019, 00:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Biotoxsin, что значит "только на JS"?
Чтобы что-то появилось на экране, JS должен что-то изменить либо в HTML, либо в CSS. А дальше используем один из предложенных выше способов или придумываем ещё один.
Отобразить что-то на экране вообще не трогая CSS и HTML - как вы себе это представляете?
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2019, 00:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Biotoxsin,
не понимаю вопроса про js?
Malleys,
пример интересный, но как он связан с вопросом про js? ваше умение понять, что спросили, впечатляет.
Ответить с цитированием
  #8 (permalink)  
Старый 27.12.2019, 00:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Aetae
Отобразить что-то на экране вообще не трогая CSS и HTML - как вы себе это представляете?
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2019, 01:01
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
пример интересный, но как он связан с вопросом про js? ваше умение понять, что спросили, впечатляет.
Что именно в сообщении №5 непонятно? Вариант №3 может не стоит использовать, если вам нужна поддержка старых браузеров.

Я не представляю, как поменять представление элемента не обращаясь к СSS. Даже встроенные компоненты используют CSS (например, <video>)
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2019, 01:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Malleys
Что именно в сообщении №5 непонятно?
к содержанию сообщения, а тем более в его дополненном виде, с примера ми на js, вопросов нет. для полноты картины не хватает примера с псевдо-элементами.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример тестовых заданий на js junior elshaarawy Учебные материалы 3 26.03.2015 15:17
JS Coaching для стартапа OlgaAyva Работа 12 27.09.2011 22:18
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28
создание файла с помощью JS Bebarr Swallow Общие вопросы Javascript 1 14.06.2011 04:57