Как сделать так, чтобы ширина сайта изменялась по примеру vk.com

147
10 сентября 2019, 16:10

Как сделать так, чтобы ширина сайта изменялась по примеру vk.com ? То есть, у меня есть центральная часть шириной 960px, а отступы слева=справа=примерно 471,5 px.

Я хочу, чтобы при уменьшении экрана до 976px (17px ползунок) - центральная часть оставалась без изменения, а уменьшались одновременно лишь отступы слева-справа и так до 976px (или больше, если 976<=разрешение<=1903).

И как это реализовать, если у меня картинка 1903px по ширине, и нужно чтобы она тоже слева-справа уменьшалась, а её центральная часть (976px) оставалась на месте. Пытался сделать просто в %, но все летит при больших изменениях, а на вк.ру, к примеру, все плавно.

html:

body {                                /*Чтобы не было отступов с краю*/ 
margin:0px; 
--size: 1903px; 
} 
.borders {                            /*границы сайта для удобства верстки*/ 
display: block; 
width: 100%; 
height: 1px; 
transform: rotate(-90deg); 
position: relative; 
} 
.border1 {                            /*левая граница*/ 
position: absolute; 
left: 463px; 
} 
.border2 {                            /*правая граница*/ 
position: absolute; 
right: 497px; 
} 
                                  /*Основная часть */ 
.header { 
position: relative;                   /*у главного relative у многих его     дочерних - absolute, для удобства*/ 
display: block; 
width: var(--size); 
height: 50px; 
background: #FF8080; 
-webkit-user-select: none;            /*Нельзя выделять текст в голове (for     Chrome)*/ 
-moz-user-select: none;               /* for Mozilla Firefox */ 
-ms-user-select: none;                /* Internet Explorer (не поддерживается) */ 
-o-user-select: none;                 /* Opera Presto (не поддерживается) */ 
} 
.logo { 
width: calc(var(--size) * 5);         /*Оптимизация размера*/ 
display: block; 
width: 53px; 
height: 20px; 
position: relative; 
left: 24.4%; 
top: 0px; 
font-size: 30px; 
font-family: Times New Roman; 
} 
.header_text_inside { 
position: relative; 
width: calc(var(--size) * 5);         /*Оптимизация размера*/ 
color: black; 
text-decoration-line: none; 
font-size: 30px; 
font-family: Times New Roman; 
font-size: 22px;  
margin-left: 40px;                        
} 
.header_text { 
display: block; 
width: 550px; 
height: 30px; 
position: absolute; 
left: 36%; 
top: 20px; 
letter-spacing:0.5px; 
} 
.enter_button { 
display: block; 
width: 135px; 
height: 25px; 
background:#C2484C; 
position: absolute; 
left:67%;  
top:6px; 
border-radius: 6px; 
text-align: center; 
line-height:24px; 
} 
.enter { 
display: block; 
width: 150px; 
height: 50px; 
} 
.reg { 
width: 110px; 
height: 25px; 
position: absolute; 
left:67%;  
top:30px; 
color: black; 
text-decoration-line: none; 
} 
.enter_text { 
color: black; 
text-decoration-line: none; 
} 
.main_image { 
max-width: 100%; 
height: auto; 
-webkit-user-select: none; 
-moz-user-select: none; 
user-select: none; 
pointer-events: none; 
} 
.topics { 
position: absolute; 
left:37%; 
top:15%; 
font-size: 40px; 
font-family: Arial, Times New Roman ; 
-webkit-user-select: none;            /*Нельзя выделять текст  (for Chrome)*/ 
-moz-user-select: none;               /* for Mozilla Firefox */ 
-ms-user-select: none;                /* Internet Explorer (не поддерживается) */ 
-o-user-select: none;                 /* Opera Presto (не поддерживается) */ 
color: #191919; 
} 
.num_topics { 
position: absolute; 
left:37.2%; 
top:21%; 
font-size: 40px; 
font-family: Arial, Times New Roman ; 
-webkit-user-select: none;            /*Нельзя выделять текст  (for Chrome)*/ 
-moz-user-select: none;               /* for Mozilla Firefox */ 
-ms-user-select: none;                /* Internet Explorer (не поддерживается) */ 
-o-user-select: none;                 /* Opera Presto (не поддерживается) */ 
color: #191919; 
}
<div> <!-- границы --> 
	<div class="border1 borders"> 
		<hr style="margin: 0px; display: block; height: 1px; width:1903px;"> 
	</div> 
	 
	<div class="border2 borders"> 
		<hr style="margin: 0px; display: block; height: 1px; width:1903px;"> 
	</div> 
</div> 
<div class="header">                     <!-- голова --> 
	<div class="logo">                   <!-- лого --> 
    	<h2> 
    		<a href="#" style="color: black; text-decoration-line: none;">SE</a> 
    	</h2> 
    </div> 
    <div class="header_text">            <!-- Разделы --> 
    	<a class="header_text_inside prices" href="">Цены</a> 
    	<a class="header_text_inside feedback" href="">Связаться с нами</a> 
    	<a class="header_text_inside about_us" href="">О школе</a> 
    </div> 
    <div class="enter">                                 <!-- Вход --> 
		<a href="#" class="enter_text"> 
			<div class="enter_button">Войти</div>       <!-- Кнопка входа --> 
		</a> 
		<a class="reg" href="#">Зарегестрироваться</a>  <!-- Зарегестрироваться -->   
	</div> 
</div> 
<div class="main">                        <!-- Первая видимая часть страницы -->                      
	<img class="main_image" src="/img/main_image.png"> 
	<strong><p class="topics">Тем</p></strong> 
	<p class="num_topics">166</p> 
</div> 
 
css:

Answer 1

Сделайте блок с шириной 976px (в примере container).

body { 
  margin: 0; 
} 
.container { 
  max-width: 976px; 
  margin: auto; 
  background-color: rgba(173, 216, 230, .4); 
} 
 
.header { 
  background-color: coral; 
} 
.header__container { 
    display: flex; 
    justify-content: space-between; 
    align-items: center; 
}
<div class="header"> 
  <div class="container header__container"> 
    <!-- голова --> 
    <div class="logo"> 
      <!-- лого --> 
      <h2> 
        <a href="#" style="color: black; text-decoration-line: none;">SE</a> 
      </h2> 
    </div> 
    <div class="header_text"> 
      <!-- Разделы --> 
      <a class="header_text_inside prices" href="">Цены</a> 
      <a class="header_text_inside feedback" href="">Связаться с нами</a> 
      <a class="header_text_inside about_us" href="">О школе</a> 
    </div> 
    <div class="enter"> 
      <!-- Вход --> 
      <a href="#" class="enter_text"> 
        <div class="enter_button">Войти</div> 
        <!-- Кнопка входа --> 
      </a> 
      <a class="reg" href="#">Зарегестрироваться</a> 
      <!-- Зарегестрироваться --> 
    </div> 
  </div> 
</div> 
<div class="container"> 
  <div class="main"> 
    <h1>Main</h1> 
  </div> 
</div>

p.s. Вопрос про картинку не понятен.

  • переменные CSS нужно прописывать в :root селекторе, так у них будет максимальная специфичность
  • если значение свойств 0, его стоит прописовать без ед. измерения
  • Не стройте разметку страницы на position:absolute, есть более профильные свойства (Flex, CSS Grid и float на крайний случай)
  • width: calc(var(--size) * 5) Зачем вам это свойство?
READ ALSO
БЭМ и состояния блока

БЭМ и состояния блока

Каким образом, в соответствии с БЭМ, реализовать кнопку имеющую два состояния: нажата и не нажата? Использовать псевдо-классы или создать...

96
Плавный поворот элемента в Jquery

Плавный поворот элемента в Jquery

Есть скрипт, который при фокусе мышки поворачивает картинку и возвращает в исходное положениеЭтот скрипт работает корректно лишь, когда...

110
Плиточная сетка работа со строками

Плиточная сетка работа со строками

Делаю плиточную сетку, не могу понять, как работать с каждой строкойВсе работает, но только для одной строки

123
Количество элементов в строке

Количество элементов в строке

Нужно немного изменить скриптСейчас количество элементов задается через переменную, в которой статически указывается количество элементов

116