223 lines
6.1 KiB
SCSS
223 lines
6.1 KiB
SCSS
// Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE in the project root for license information.
|
|
|
|
//
|
|
// Office UI Fabric
|
|
// --------------------------------------------------
|
|
// Vendor-prefixed mixins
|
|
|
|
// Border radius.
|
|
@mixin ms-border-radius($radius: 5px) {
|
|
border-radius: $radius;
|
|
background-clip: padding-box;
|
|
}
|
|
|
|
// Drop shadow.
|
|
@mixin ms-drop-shadow($x-offset: 0, $y-offset: 0, $blur: 5px, $spread: 0, $alpha: 0.4) {
|
|
@include ms-box-shadow($x-offset, $y-offset $blur $spread rgba(0, 0, 0, $alpha));
|
|
}
|
|
|
|
// Background gradient.
|
|
@mixin ms-background-gradient($origin: left, $start: #000, $start-location: 0%, $stop: #FFF, $stop-location: 100%) {
|
|
|
|
// To maintain compatibility with the old arguments, reverse
|
|
// the $origin direction and set it as $destination.
|
|
$destination: null;
|
|
@if $origin == top {
|
|
$destination: bottom;
|
|
}
|
|
@if $origin == right {
|
|
$destination: left;
|
|
}
|
|
@if $origin == bottom {
|
|
$destination: top;
|
|
}
|
|
@if $origin == left {
|
|
$destination: right;
|
|
}
|
|
|
|
background-color: $start;
|
|
background-image: linear-gradient(to $destination, $start $start-location, $stop $stop-location);
|
|
}
|
|
|
|
// Rotation.
|
|
@mixin ms-rotate($degrees) {
|
|
@include ms-transform-rotate($degrees);
|
|
}
|
|
|
|
// Prevents user selection of text elements.
|
|
@mixin ms-user-select ($val) {
|
|
-webkit-touch-callout: $val;
|
|
-webkit-user-select: $val;
|
|
-khtml-user-select: $val;
|
|
-moz-user-select: $val;
|
|
-ms-user-select: $val;
|
|
user-select: $val;
|
|
}
|
|
|
|
// Prevents the text within a block element from wrapping to second line.
|
|
@mixin ms-no-wrap() {
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
// Flexbox
|
|
@mixin ms-flex-box() {
|
|
display: -ms-flexbox;
|
|
display: -webkit-flex;
|
|
display: flex;
|
|
}
|
|
|
|
@mixin ms-alignItems($mode) {
|
|
-webkit-box-align: $mode;
|
|
-moz-box-align: $mode;
|
|
-ms-flex-align: $mode;
|
|
-webkit-align-items: $mode;
|
|
align-items: $mode;
|
|
}
|
|
|
|
// Base/wrapper component to set typography throughout the app.
|
|
@mixin ms-Fabric {
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-font-smoothing: antialiased;
|
|
@include ms-inherit-font-family();
|
|
color: $ms-color-neutralPrimary;
|
|
font-family: $ms-font-family-west-european;
|
|
font-size: $ms-font-size-m;
|
|
}
|
|
|
|
// Set the font-family to 'inherit' for elements where the browser
|
|
// styles commonly conflict with the font-family that we want.
|
|
@mixin ms-inherit-font-family() {
|
|
button,
|
|
input,
|
|
textarea {
|
|
font-family: inherit;
|
|
}
|
|
}
|
|
|
|
// Overrides the browser's default focus outline style.
|
|
@mixin ms-focus-outline($inset: 0, $color: $ms-focus-border-color) {
|
|
// Only do this when it's a child of ms-Fabric in a focusVisible state.
|
|
.ms-Fabric.is-focusVisible &:focus {
|
|
outline: $ms-focus-border-width $ms-focus-border-style $color;
|
|
outline-offset: -$inset;
|
|
}
|
|
}
|
|
|
|
// Simulates a focus outline using an absolutely-positioned pseudo-element.
|
|
@mixin ms-focus-border($inset: 0, $color: $ms-focus-border-color) {
|
|
// Clear browser-specific focus styles and use 'transparent' as placeholder for focus style.
|
|
outline: transparent;
|
|
|
|
// Requirement because pseudo-element is absolutely positioned.
|
|
position: relative;
|
|
|
|
// Clear the focus border in Firefox.
|
|
// Reference: http://stackoverflow.com/a/199319/1436671
|
|
&::-moz-focus-inner {
|
|
border: 0;
|
|
}
|
|
|
|
// When the element that uses this mixin is in a :focus state, add a pseudo-element to
|
|
// create a border. Only do this when it's a child of ms-Fabric in a focusVisible state.
|
|
.ms-Fabric.is-focusVisible &:focus::after {
|
|
// Wrap the parent element with $padding.
|
|
content: '';
|
|
position: absolute;
|
|
top: $inset;
|
|
right: $inset;
|
|
bottom: $inset;
|
|
left: $inset;
|
|
|
|
// Add focus border of specified $color.
|
|
border: $ms-focus-border-width $ms-focus-border-style $color;
|
|
|
|
// Make the content not respond to mouse/touch events.
|
|
// Reference: https://css-tricks.com/almanac/properties/p/pointer-events/
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
// The best box is a border box.
|
|
@mixin ms-borderBox {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
// For setting the border base width
|
|
@mixin ms-borderBase {
|
|
border: 1px solid;
|
|
}
|
|
|
|
// Ensures the block expands to the full height to enclose its floated childen.
|
|
@mixin ms-clearfix {
|
|
zoom: 1;
|
|
&::before,
|
|
&::after {
|
|
display: table;
|
|
content: '';
|
|
line-height: 0;
|
|
}
|
|
&::after {
|
|
clear: both;
|
|
}
|
|
}
|
|
|
|
// Basic border-box, margin, and padding reset.
|
|
@mixin ms-normalize {
|
|
@include ms-borderBox;
|
|
box-shadow: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
// Generate text alignment classes, such as .ms-textAlignLeft
|
|
// @param [variable list] $alignments
|
|
@mixin ms-textAlign($alignments...) {
|
|
@warn 'The ms-textAlign mixin has been deprecated and will be removed in a future release of Fabric Core.';
|
|
@each $align in $alignments {
|
|
$alignStr: inspect($align);
|
|
.ms-textAlign#{to-upper-case(str-slice($alignStr, 1, 1)) + str-slice($alignStr, 2)} {
|
|
@include ms-text-align($align);
|
|
}
|
|
}
|
|
}
|
|
|
|
// To hide content while still making it readable by screen readers (Accessibility)
|
|
@mixin ms-screenReaderOnly {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
padding: 0;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
clip: rect(0,0,0,0);
|
|
border: 0;
|
|
}
|
|
|
|
// To add truncation with ellipsis
|
|
@mixin ms-textTruncate {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
word-wrap: normal; // Fix for IE 8/9 in case 'word-wrap: break-word' is set on parent nodes
|
|
}
|
|
|
|
// To disable text wrapping
|
|
@mixin ms-noWrap {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
// Replace or remove a portion of a string.
|
|
// Thanks to https://www.sassmeister.com/gist/1b4f2da5527830088e4d
|
|
@function ms-string-replace($string, $search, $replace: '') {
|
|
$index: str-index($string, $search);
|
|
|
|
@if $index {
|
|
@return str-slice($string, 1, $index - 1) + $replace + ms-string-replace(str-slice($string, $index + str-length($search)), $search, $replace);
|
|
}
|
|
|
|
@return $string;
|
|
}
|