Is there a way to name a media query? - html

Is there a way to name your media queries?
#media ("AddImageBorderQuery") {
#Cats {
border: 5px solid red;
box-sizing: border-box;
display: block;
}
}
There's mention of something similar here.
My use case is different than defining classes and switching to them.
If you want more details I have completely different designs hidden behind different queries (single page application). Then in those designs I want to have specific states and I want to name the query so I can switch to those states. There can be large number of changes so I want to use nested query groups as a way to organize them.
I'm doing this manually now using a dictionary and code but naming media queries would simplify things.
#media ("page1") {
#media ("AddImageBorderQuery") {
#Cats {
border: 5px solid red;
display: block;
}
}
}
#media ("page2") {
#media ("ShowContactForm") {
#ContactForm {
display: block;
}
}
}
window.showMediaQuery("ShowContactForm");

One approach to load media queries dynamically is by having a style tag with id, e.g. <style id="app-dynamic-media-query">, which content you can fill/replace later on the fly. You can access that style tag using document.getElementById.

Related

Different iframe for mobile devices

I'm trying to add iframe to Wordpress pages. I want to display iframe A for desktop users and iframe B for mobile users, because some elements just don't work with mobile devices and at the same time I don't want to lose functionality for the desktop version. I'm pretty new to coding, so detailed explanation how to solve this would be very welcome.
One way of doing this is using CSS media queries. #media(max-width: 540px) contains styles that will only apply on screens of width at most 540px (and you can change the number to whatever suits your needs).
And, I imagine you could do this too to the actual page pointed at by the iframe, so that you don't need two iframes in the first place. I.e. apply media queries directly to the page that has buttons to show/hide on mobile.
/* mobile (you can change 540px to whatever breakpoint you like) */
#media(max-width: 540px) {
.desktop {
display: none;
}
.mobile {
display: block;
border: 1px solid red;
}
}
/* desktop */
#media(min-width: 541px) {
.desktop {
display: block;
border: 1px solid cyan;
}
.mobile {
display: none;
}
}
<iframe class="desktop"></iframe>
<iframe class="mobile"></iframe>

HTML Table Sizing With Different Client Window Sizes

I'm trying to create an HTML scheduling app that sizes the created tables to fit the the screen while maintaining its same size ratio. It looks fine when I have it fullscreen: . But when I resize the window or someone with a different screen resolution runs it, the positioning of the tables messes up like so: .
I was wondering if there was something I could do in my CSS or JavaScript files that would ensure that the ratio and relative positioning of each table remained the same no matter what screen size or resolution it is ran on. I'll include a JSFiddle for further understanding here:
CSS for Tables and Positioning:
/* To control the style of the overall table class */
table {
border: 0.0625em solid black;
text-align: center;
table-layout: fixed;
}
th, td {
border: 0.0625em solid black;
width: 8.75em;
height: 2.1875em;
}
/* Settings for Days row */
.tableDays {
width: 8.75em;
}
/* Settings for Employee column */
.tableEmployees {
line-height: 2.1875em;
}
/* Settings for Tasks table */
.tableTasks {
width:100%;
margin-top:0.3125em;
empty-cells: show;
height:62.5em;
line-height: 2.1875em;
width: 6.25em;
}
.empTaskCont {
height: 31.25em;
width: 100%;
overflow-x: hidden;
overflow-y: scroll;
position: relative;
padding-bottom: 1.875em;
}
#table-wrapper-days {
position: relative;
width: 66.5em;
margin-left: 15.8125em;
/*float:right;*/
}
#table-scroll-days {
height: auto;
overflow-x: hidden;
}
#table-wrapper-employees {
position: relative;
float:left;
width:18%;
margin-top:0.5em;
}
#table-scroll-employees {
width: auto;
overflow-y: hidden;
max-height: 31.25em;
}
#table-wrapper-tasks {
position: relative;
width:81%;
float:right;
}
#table-scroll-tasks {
overflow-x: scroll;
overflow-y: scroll;
max-height: 32.625em;
}
.employee-mod-btn{
float:left;
}
JSFiddle: https://jsfiddle.net/hs5sz8kb/#&togetherjs=x3LUnVhmMp
I'm still very new to HTML, CSS, and JavaScript so any additional advice on my code is greatly appreciated. Thank you for your time!
Reviewing the content of your fiddle, the issue is less related to CSS, and more related to your HTML layout. The first problem is that you are building multiple tables when they should just be 1 table. Your top "row" should be part of the table with all the content, instead of a separate table. Your left column is also a separate table. Combine them all into 1 table and that will help a lot.
I hate to redirect your efforts toward a total rewrite because you are learning HTML and CSS, but you may find that a very effective way to implement "responsive" design is with a helper library. I would suggest considering the use of Bootstrap, although there are many others. Bootstrap adds a lot of "helper classes" that will take some of the effort of achieving what you are trying to achieve out of the equation. Consider tables for example, what I think you might be looking for is "breakpoint specific" tables.
https://getbootstrap.com/docs/4.0/content/tables/#breakpoint-specific
Another option is to have always responsive tables, where as the screen resizes you will get a horizontal scrolling frame.
There are a lot of options to choose from, so try it out. You can easily add the Bootstrap library to your JS Fiddle in the "resources" section.
Additionally, you might consider storing your data as JSON or in a database. As you progress with this project, you may find Datatables to be a very useful javascript library. It allows you to work with the raw data and build the tables more dynamically.
https://datatables.net/
Instead of using custom css to style your tables which could take some time for it to be looking good at all screen widths, consider using bootstrap which is a responsive framework for html, css etc. It will be worth while you reading about bootstrap as they provide responsive tables that will help you based on the screen size of the monitor or other device. Check out this link that will help you with building the html structure and adding bootstrap to your workflow. All you will have to do is modify the table to suit your needs.
References:
https://getbootstrap.com/
https://getbootstrap.com/docs/4.0/content/tables/

Why border-bottom styling working in the media files in css even after removing it from there ?

I have a table in which there are three columns: Name, Type and Status. The HTML code of it is:
<div class="dependents">
<tbody><tr>
<td class="cell1">Name</td>
<td class="cell2">Type</td>
<td class="cell3">Status</td>
<td class="cell4 last"></td>
</tr>
</tbody>
</div>
The desktop view for this table is:
My task is to make a mobile view of the same table(between Dependents and Edit sections) of the same page in the following way:
I tried making the mobile view of the page by using the following CSS code:
#media screen and (max-width: 768px)
{
.dependents .table.title td {
font-weight: bold;
display: inline-block;
width:100%;
}
}
The CSS code(not complete) of the desktop view is:
.dependents .table.title td {
border-bottom: 1px solid #CCC;
font-weight: bold;
}
As shown in the mobile view, it is clearly depicted that the border-bottom in between Name, Type, and Status should not be present in the mobile view in comparison to the desktop view, it is present.
In order to achieve that I have removed the border-bottom line from the mobile CSS code. After removing the border-bottom line, I am still able to see the border bottom section in the mobile view because I believe it is taking the border-bottom of the desktop view. I am not sure how to get rid of it.
The "desktop view" is not within a media query. It always applies.
The "mobile view" supplements it, it doesn't replace it.
Since you don't override the border-bottom property with a different value, the existing rule applies.
Everything you code will apply to "desktop view".
#media screen and (max-width: 768px) {}
#media will over-ride the "desktop view" css code IF it satisfies the '#media screen' condition.
You have to re-declare the css for both cases if you want to play safe.
e.g.
.table.title.td {
border-bottom: 1px solid #CCC;
}
Then you override it with
#media screen and (max-width: 768px) {
.table.title.td {
border-bottom: none;
}
}
so basically you hv 2 pieces of code:
.table.title.td {
border-bottom: 1px solid #CCC;
}
#media screen and (max-width: 768px) {
.table.title.td {
border-bottom: none;
}
}
Important Note: declare your "mobile view" css at the end of your css file (as comparative to your normal "desktop view" css code), that way to make sure the "desktop view" code come first and only be over-ridden if needed.
Maybe this will help you:
.dependents .table.title td {
border-bottom: none;
font-weight: bold;
}
or if that is not working try this
.dependents .table.title td {
border-bottom: none!important;
}

How to make a floating page div responsive

Hi I'm still new to web development. So I have a register page that floats as a div above the main page but I was wondering how do I ensure that the div gets centered in a responsive manner?
The pages are separated and included at the header.
<?php
include ('includes/login.php');
include ('includes/register.php');
?>
my register's css
#regScreen {
padding: 5 5 40px 5px;
margin: 0 auto;
position: fixed;
top: 5%;
left: 33%;
z-index: 10;
display: none;
background: #ebebeb;
}
#regScreen:target, #regScreen:target+#cover {
display: block;
opacity: 2;
}
#reghead {
background-color: #e2e1e1;
text-align: center;
display: block;
padding: 0px 0px 10px 0px;
}
I tried to use media query on my #regscreen:
#media (max-width: 300px) {
#regScreen {width: 100%;
left:0%;
}
}
But using media queries doesn't seems to recognize the page as responsive as it is already small. From my understanding, please correct me if I'm wrong.
It's difficult to provide an exact answer without more infomation (it would be great if you added more of the HTML markup), however...
If the issue is that the floating div does not resize to fit various screen sizes (and since you're new to web development...welcome aboard!), there are a couple of suggestions I can make:
1) You may be overcomplicating it by trying to apply the #media (max-width:300px) media query. By simply adding the following styles, the registration form should resize accurately:
#regScreen {
/* The rest of your styles go here */
width:90%;
max-width:600px; /* em or rem value would be better than px... e.g. 37.5 em */
}
This would ensure that the width of the form is always either 90% of the screen width OR 600px, whichever is smaller.
2) If you think there may be an issue with the media query not trigerring, an easy way to test it is to make something really obvious happen at that breakpoint...for example:
#media (max-width: 300px) {
/* Test Style */
/* Turn background red when below 300px */
body{
background-color:red !important;
}
/* Your original styles */
#regScreen {
width: 100%;
left:0%;
}
}
By doing this, it should allow you to start troubleshooting whether it's your media query syntax or something else that is the issue; maybe the media query styles are being correctly applied (so your media query syntax is ok) but the new styles are being overwritten later in the CSS (or due to the specificity of certain rules).
If you add more info to your question, let me know and I'll take another look but until then, this should hopefully help get you on the right track.
I'm not sure about what is the element using those selectors, but I tried to make a sample html & css reference for solving your issue. Here is the link jsfiddle.net/3Le34w8p/
i already see one error just by looking
#media and (max-width: 300px) {
#regScreen {
width: 100%;
left:0%;
}
}
you for got 'and' before '(max-width: 300px)'

Keeping SASS Code DRY using Media Queries

I have two media queries. One is for phones while the other is for tablets. They both call for the same exact styling. In this case what would be the best approach for keeping this code DRY?
$mobile-portrait: "only screen and (max-width: 680px)";
$tablet-portrait: "only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait)";
div {
background: gray; margin: 0 auto; height: 50px; width: 50px;
#media #{$mobile-portrait} {
height: 100px; width: 100px;
}
#media #{$tablet-portrait} {
height: 100px; width: 100px;
}
}
I'm not sure that there's any good way to do this, but you could always just create multiple selectors. (I don't know if that's the best practice, but that's what I would do.)
#media #{$mobile-portrait},
#media #{$tablet-portrait} {
height: 100px;
width: 100px;
}
EDIT: The following is also valid.
#media #{$mobile-portrait}, #media #{$tablet-portrait} {
height: 100px; width: 100px;
}
For aesthetic I prefer putting the selectors on multiple lines. When there are longer selectors, the line break helps differentiate between them.
I also prefer the styles on multiple lines. If you have more than about three or four in a selector, it can get confusing.
EDIT 2: The comma actually acts like a logical or when inside of a media query.
Per this MDN article:
comma-separated lists
Comma-separated lists behave like the logical operator or when used in media queries. When using a comma-separated list of media queries, if any of the media queries returns true, the styles or style sheets get applied. Each media query in a comma-separated list is treated as an individual query, and any operator applied to one media query does not affect the others. This means the comma-separated media queries can target different media features, types, and states.
Which means that the second #media is not necessary:
#media #{$mobile-portrait}, #{$tablet-portrait} {
height: 100px;
width: 100px;
}