Jump to content

Интересное задание от работодателя


envoleon
 Share

Recommended Posts

Всем привет. Примерно год назад, я пытался устроиться в одну компанию( не помню название). В общем там дали 3 тестовых задания для рассмотрения знаний. Первый был связан с html и css. Остальные два с javascript и mysql. На все про все давалось пол дня. По первому впечатлению первый оказался самым легким, но не тут то было (из-за чего я и провалил тест), о нем и пойдет речь в этой теме, так как с остальными я управился за час.

После провала, я решил не сдаваться и попробовать добить это первое задание. Бился на нем днями. Так его и не решил. Так его и не решили мои знакомые друзья (которые имеют хороший опыт в верстке). Я не знаю в чем подвох, может вы мне подскажите?

 

Вот само задание

Цитата

Имеется HTML разметка:


<style>
    .columns {width: 100%; overflow: hidden;}
    .sidebar-left {width: 300px;}
    .sidebar-right {width: 300px;}
</style>
<div class="columns">
    <div class="content"></div>
    <div class="sidebar-left"></div>
    <div class="sidebar-right"></div>
</div>


Допишите необходимые стили, чтобы на экране блоки отображались в следующем порядке:  sidebar-left,  content,  sidebar-right. При необходимости в разметку можно добавить один блок div. Использование bootstrap, flexbox, javascript и css функции calc запрещено.
Боковые столбцы фиксированные, центральная занимает оставшееся пространство. Высота колонок должна формируется в зависимости от их содержимого, а не от явного ее указания в css.
Запрещается менять местами div контейнеры в html разметке.  Ни одна из колонок не должна перекрывать содержимое, которое может идти сразу под колонками.
 

Может кто из вас сможет его решить, потому что я уже перепробовал очееень много разных способов? Может даже создатель этого задания сидит тут.

В заранее, прежде чем думать, что вы решили его за 5 минут с лета, внимательно прочитайте все условия (Тут не все так просто и вправду нужно подумать)

Никакие советы не принимаются. только готовое решение, которое вы сами уже протестировали. Буду проверять, укажу на ошибки, если будут.

Время для выполнения не ограничено, это чисто на интерес каждого, проверить свои способности.

Link to comment
Share on other sites

Здравствуйте.

Это действительно простая задача, на решение которой требуется не более 5 минут.

Дело в том, что такое решение не актуально много лет, с тех пор как "float" был вытеснен боле современными инструментами. А вот 10-15 лет назад такое можно было увидеть достаточно часто.

Я бы удивился увидев такое тестовое задание последние лет 7 так точно. Самое задание устарело как и его решение.

По моему мнению сейчас давать такое задание — равносильно что кичится.

Link to comment
Share on other sites

 

5 часов назад, klierik сказал:

Я бы удивился увидев такое тестовое задание последние лет 7 так точно. Самое задание устарело как и его решение.

По моему мнению сейчас давать такое задание — равносильно что кичится.

У работодателя видно были свои (как и его борода) взгляды на все это.
Решение засчитывается, но с требованием "за 5 минут" я бы поспорил, как минимум из-за margin-right -100%. Я не знаю, что нужно пережить, зная такую хитрость).
Значит пункт с добавлением еще одного div был выходом. Я старался его избежать из-за слов "при необходимости". Не знаю возможно ли его вообще выполнить.

У меня было одно решение (с таблицами), но слабое, так как каждая колонка тянет за собой вертикальный размер:

<html>
	<head>
		<style type="text/css">
			body
			{
				margin: 0px;
			}
			.columns
			{
				display:inline-table;
				table-layout: fixed;
				width: 100%;
				background: #FCE600;
				overflow:hidden;
				position: relative;
			}
			.sidebar-right
			{
				display:table-cell;
				position:relative;
				width: 300px;
				background: #0000ff;
			}
			.sidebar-left
			{
				display:table-cell;
				position:relative;
				right:100%;
				transform: translateX(200%);
				width: 300px;
				background: #ff0000;
			}
			.content
			{
				display:table-cell;
				position:relative;
				right:-300px;
				background: #54B948;
				word-wrap:break-word;
			}
		</style>
	</head>
	<body>
		<div class="columns">
			<div class="content">Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque eius odio eveniet suscipit quidem, vero commodi maiores explicabo ab labore modi? Nostrum veritatis ducimus corporis voluptatibus magni nobis velit veniam.</div>
			<div class="sidebar-left">Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque eius odio eveniet suscipit quidem, vero commodi maiores explicabo ab labore modi? Nostrum veritatis ducimus corporis voluptatibus magni nobis velit veniam.</div>
			<div class="sidebar-right">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Rem deserunt odit illum accusantium esse quo inventore molestias natus quasi quidem tempora, alias ullam expedita minus eius, aspernatur aperiam dolorem nostrum.
			Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque eius odio eveniet suscipit quidem, vero commodi maiores explicabo ab labore modi? Nostrum veritatis ducimus corporis voluptatibus magni nobis velit veniam.</div>
		</div>
	</body>
</html>


 

Link to comment
Share on other sites

1 час назад, envoleon сказал:

Решение засчитывается, но с требованием "за 5 минут" я бы поспорил, как минимум из-за margin-right -100%. Я не знаю, что нужно пережить, зная такую хитрость).

Нужно уметь верстать под IE6 😉

Link to comment
Share on other sites

10.11.2019 в 03:09, envoleon сказал:

из-за margin-right -100%. Я не знаю, что нужно пережить, зная такую хитрость).

Нужно просто знать как работают отрицательные маржины 🙂

У меня решение заняло чуть больше времени. Но я искал решение без использования дополнительного div. Единственный минус - не работает в IE6, но ведь в условии про него ничего и не сказано, верно? 🙂 Если бы до меня это сразу дошло, решил бы быстрее, а так где -то минут за 40 управился. Причем я не сказал бы что я хорошо разбираюсь в верстке 🙂

.columns {
  width: 100%;
  overflow: hidden; 
}

.sidebar-left {
  width: 300px;
  float: left;
}

.sidebar-right {
  width: 300px;
  float: right;
}

.content{
  width: 100%;
  float: left;
  box-sizing: border-box;
  padding-left: 300px;
  padding-right: 300px;
  margin-right: -100%;
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By zeiger2
      Здравствуйте! У меня стоит задача, что при наведении на блок li строка должна поменять цвет, в том числе и картинка. Я меняю картинку с помощью 
      background-image: none;     background: url(../img/check_icon_red.png) left no-repeat;   Но теперь картинка позицианируется не там где должна, её можно поставить на место только вручную, через -100px. Нужно поставить ровно туда, где она была. Должна быть в одном ряду с другими
    • By Mix9
      есть див с 5 img, при уменьшении экрана див выходит за него. Я добавил overflow: auto для этого div в надежде на то, что я смогу прокручивать фотки с помощью скроллбара, однако даже с ним почему-то я не вижу часть фоток которые вышли за границу. Что с этим можно сделать? класс video повторяется 5 раз, я тут оставил только 1 
      .content{ width: 90%; background-color: #333; } .video{ margin: 0px 4px 0px 4px; width: 310; display: flex; flex-direction:column; } .video_button_text{ margin-top: 10px; display: flex; flex-direction: row; font-size: 20px; color: white; } .video_text_div{ display: inline-block; width: 250px; } .video_text{ text-align: justify-all; margin: 0px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .slidan_videos{ margin: 0px 10px 0px 20px; overflow: auto; width: auto; margin-bottom: 50px; display: flex; flex-direction: row; justify-content: space-around; } <div class="content"> <div class = slidan_videos> <div class = video> <div> <a href = 'ссылка'><img class="img" src=""картинка"></a> </div> <div class = video_button_text> <div class = avatarka_div> <a href="ссылка" target="_blank"><img class = avatarka src="картинка"></a> </div> <div class = video_text_div> <p class = video_text><a href="ссылка">текст</a></p> </div> </div> </div>
    • By Марко
      Добрый день. Начинающий программист, столкнулся с проблемой. Селектор .class не работает должным образом. Несмотря на правильное, я надеюсь, описание, на web-странице не отображается ни одно изображение. С чем может быть связано? Заранее спасибо за помощь. 



    • By Kaido
      Использую готовый плагин для модальных окон(от MaxGraph). Проблема в том, что когда у меня открыто два модальных окна, для примера Форма + Политика конфендициальности, и мне нужно закрыть политику вместе с ней закрывается и другое модальное окно. В JS я не сильно разбираюсь(собственно из за этого и использую готовый плагин), можете помочь кто работал с этим плагином? Я примерно понимаю как он работает, но реализовать чтобы закрывалось только одно не получается.
       
        <div class="content"> <button class="modal-btn" data-path="first" data-animation="fadeInUp" data-speed="1500">Открыть окно 1</button> </div> <div class="modal"> <div class="modal__wrapp" data-target="first"> <div class="modal__content"> <button class="modal__close">Закрыть</button> модальное окно <button data-path="policy">Политика</button> </div> </div> <div class="modal__wrapp" data-target="policy"> <div class="modal__content"> <button class="modal__close">Закрыть</button> политика </div> </div> </div> .modal { --transition-time: 0.3s; position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 1000; cursor: pointer; overflow-y: auto; overflow-x: hidden; text-align: center; opacity: 0; visibility: hidden; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp { display: none; cursor: default; width: fit-content; height: fit-content; } .modal__content{ position: absolute; left: 500px; width: 500px; height: 500px; display: flex; color: white; flex-direction: column; text-align: left; background-color: #000; } .modal__content button{ width: 200px; height: 50px; margin: 50px 0; } .modal.is-open { opacity: 1; visibility: visible; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp.modal-open { display: flex; } .disable-scroll { position: relative; overflow: hidden; height: 100vh; position: fixed; left: 0; top: 0; width: 100%; } .fade { opacity: 0; transition: opacity var(--transition-time); } .fade.animate-open { opacity: 1; transition: opacity var(--transition-time); } .fadeInUp { opacity: 0; transform: translateY(vw(-100)); transition: opacity var(--transition-time), transform var(--transition-time); } .fadeInUp.animate-open { opacity: 1; transform: translateY(0); transition: opacity var(--transition-time), transform var(--transition-time); } .modal__wrapp[data-target="policy"] .modal__content{ left: 1050px; background-color: #000; opacity: .5; } class Modal { constructor(options) { let defaultOptions = { isOpen: () => {}, isClose: () => {}, } this.options = Object.assign(defaultOptions, options); this.modal = document.querySelector('.modal'); this.speed = false; this.animation = false; this.isOpen = false; this.modalContainer = false; this.previousActiveElement = false; this.fixBlocks = document.querySelectorAll('.fix-block'); this.focusElements = [ 'a[href]', 'input', 'button', 'select', 'textarea', '[tabindex]' ]; this.events(); } events() { if (this.modal) { document.addEventListener('click', function(e){ const clickedElement = e.target.closest('[data-path]'); if (clickedElement) { let target = clickedElement.dataset.path; let animation = clickedElement.dataset.animation; if (clickedElement.classList.contains('modal-close')) { this.close(); } let speed = clickedElement.dataset.speed; this.animation = animation ? animation : 'fade'; this.speed = speed ? parseInt(speed) : 300; this.modalContainer = document.querySelector(`[data-target="${target}"]`); this.open(); return; } if (e.target.closest('.modal__close')) { this.close(); return; } }.bind(this)); window.addEventListener('keydown', function(e) { if (e.keyCode == 27) { if (this.isOpen) { this.close(); } } if (e.keyCode == 9 && this.isOpen) { this.focusCatch(e); return; } }.bind(this)); this.modal.addEventListener('click', function(e) { if (!e.target.classList.contains('modal__wrapp') && !e.target.closest('.modal__wrapp') && this.isOpen) { this.close(); } }.bind(this)); } } open() { this.previousActiveElement = document.activeElement; this.modal.style.setProperty('--transition-time', `${this.speed / 1000}s`); this.modal.classList.add('is-open'); this.disableScroll(); this.modalContainer.classList.add('modal-open'); this.modalContainer.classList.add(this.animation); setTimeout(() => { this.options.isOpen(this); this.modalContainer.classList.add('animate-open'); this.isOpen = true; this.focusTrap(); }, this.speed); } close() { if (this.modalContainer) { this.modalContainer.classList.remove('animate-open'); this.modalContainer.classList.remove(this.animation); this.modal.classList.remove('is-open'); this.modalContainer.classList.remove('modal-open'); this.enableScroll(); this.options.isClose(this); this.isOpen = false; this.focusTrap(); } } focusCatch(e) { const focusable = this.modalContainer.querySelectorAll(this.focusElements); const focusArray = Array.prototype.slice.call(focusable); const focusedIndex = focusArray.indexOf(document.activeElement); if (e.shiftKey && focusedIndex === 0) { focusArray[focusArray.length - 1].focus(); e.preventDefault(); } if (!e.shiftKey && focusedIndex === focusArray.length - 1) { focusArray[0].focus(); e.preventDefault(); } } focusTrap() { const focusable = this.modalContainer.querySelectorAll(this.focusElements); if (this.isOpen) { focusable[0].focus(); } else { this.previousActiveElement.focus(); } } disableScroll() { let pagePosition = window.scrollY; this.lockPadding(); document.body.classList.add('disable-scroll'); document.body.dataset.position = pagePosition; document.body.style.top = -pagePosition + 'px'; } enableScroll() { let pagePosition = parseInt(document.body.dataset.position, 10); this.unlockPadding(); document.body.style.top = 'auto'; document.body.classList.remove('disable-scroll'); window.scroll({ top: pagePosition, left: 0 }); document.body.removeAttribute('data-position'); } lockPadding() { let paddingOffset = window.innerWidth - document.body.offsetWidth + 'px'; this.fixBlocks.forEach((el) => { el.style.paddingRight = paddingOffset; }); document.body.style.paddingRight = paddingOffset; } unlockPadding() { this.fixBlocks.forEach((el) => { el.style.paddingRight = '0px'; }); document.body.style.paddingRight = '0px'; } } const modal = new Modal({ isOpen: (modal) => { console.log(modal); console.log('opened'); }, isClose: () => { console.log('closed'); }, });  
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy